mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 21:42:57 +00:00
[EXPLORER] Improve the minimize-condition on Win+D (#5423)
- Add CanBeMinimized helper function to determine whether the window should be minimized. - Use them in FindEffectiveProc and MinimizeWindowsProc functions. - Improve the Minimize code. CORE-18427
This commit is contained in:
parent
cdfd8f4e1b
commit
22ab8c812a
1 changed files with 23 additions and 20 deletions
|
@ -99,6 +99,20 @@ VOID RestoreWindowPos()
|
||||||
g_WindowPosBackup.RemoveAll();
|
g_WindowPosBackup.RemoveAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL CanBeMinimized(HWND hwnd)
|
||||||
|
{
|
||||||
|
if (::IsWindowVisible(hwnd) && !::IsIconic(hwnd) && ::IsWindowEnabled(hwnd))
|
||||||
|
{
|
||||||
|
if (::GetClassLongPtrW(hwnd, GCW_ATOM) == (ULONG_PTR)WC_DIALOG)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
DWORD exstyle = (DWORD)::GetWindowLongPtrW(hwnd, GWL_EXSTYLE);
|
||||||
|
if (!(exstyle & WS_EX_TOPMOST))
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
struct EFFECTIVE_INFO
|
struct EFFECTIVE_INFO
|
||||||
{
|
{
|
||||||
HWND hwndFound;
|
HWND hwndFound;
|
||||||
|
@ -113,7 +127,7 @@ FindEffectiveProc(HWND hwnd, LPARAM lParam)
|
||||||
{
|
{
|
||||||
EFFECTIVE_INFO *pei = (EFFECTIVE_INFO *)lParam;
|
EFFECTIVE_INFO *pei = (EFFECTIVE_INFO *)lParam;
|
||||||
|
|
||||||
if (!IsWindowVisible(hwnd) || IsIconic(hwnd))
|
if (!CanBeMinimized(hwnd))
|
||||||
return TRUE; // continue
|
return TRUE; // continue
|
||||||
|
|
||||||
if (pei->hTrayWnd == hwnd || pei->hwndDesktop == hwnd ||
|
if (pei->hTrayWnd == hwnd || pei->hwndDesktop == hwnd ||
|
||||||
|
@ -159,13 +173,6 @@ IsThereAnyEffectiveWindow(BOOL bMustBeInMonitor)
|
||||||
ei.bMustBeInMonitor = bMustBeInMonitor;
|
ei.bMustBeInMonitor = bMustBeInMonitor;
|
||||||
|
|
||||||
EnumWindows(FindEffectiveProc, (LPARAM)&ei);
|
EnumWindows(FindEffectiveProc, (LPARAM)&ei);
|
||||||
if (ei.hwndFound && FALSE)
|
|
||||||
{
|
|
||||||
WCHAR szClass[64], szText[64];
|
|
||||||
GetClassNameW(ei.hwndFound, szClass, _countof(szClass));
|
|
||||||
GetWindowTextW(ei.hwndFound, szText, _countof(szText));
|
|
||||||
MessageBoxW(NULL, szText, szClass, 0);
|
|
||||||
}
|
|
||||||
return ei.hwndFound != NULL;
|
return ei.hwndFound != NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2689,7 +2696,7 @@ ChangePos:
|
||||||
|
|
||||||
LRESULT OnCopyData(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
LRESULT OnCopyData(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||||
{
|
{
|
||||||
COPYDATASTRUCT *pCopyData = reinterpret_cast<COPYDATASTRUCT *>(lParam);
|
COPYDATASTRUCT *pCopyData = (COPYDATASTRUCT *)lParam;
|
||||||
switch (pCopyData->dwData)
|
switch (pCopyData->dwData)
|
||||||
{
|
{
|
||||||
case TABDMC_APPBAR:
|
case TABDMC_APPBAR:
|
||||||
|
@ -3262,16 +3269,14 @@ HandleTrayContextMenu:
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (::IsWindowVisible(hwnd) && !::IsIconic(hwnd))
|
if (CanBeMinimized(hwnd))
|
||||||
{
|
{
|
||||||
MINWNDPOS mwp;
|
MINWNDPOS mwp = { hwnd, { sizeof(mwp.wndpl) } };
|
||||||
mwp.hwnd = hwnd;
|
if (::GetWindowPlacement(hwnd, &mwp.wndpl) && // Save the position and status
|
||||||
mwp.wndpl.length = sizeof(mwp.wndpl);
|
::ShowWindowAsync(hwnd, SW_SHOWMINNOACTIVE)) // Minimize
|
||||||
::GetWindowPlacement(hwnd, &mwp.wndpl); // Save the position and status
|
{
|
||||||
|
info->pMinimizedAll->Add(mwp);
|
||||||
info->pMinimizedAll->Add(mwp);
|
}
|
||||||
|
|
||||||
::ShowWindowAsync(hwnd, SW_MINIMIZE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -3309,9 +3314,7 @@ HandleTrayContextMenu:
|
||||||
{
|
{
|
||||||
HWND hwnd = g_MinimizedAll[i].hwnd;
|
HWND hwnd = g_MinimizedAll[i].hwnd;
|
||||||
if (::IsWindowVisible(hwnd) && ::IsIconic(hwnd))
|
if (::IsWindowVisible(hwnd) && ::IsIconic(hwnd))
|
||||||
{
|
|
||||||
::SetWindowPlacement(hwnd, &g_MinimizedAll[i].wndpl);
|
::SetWindowPlacement(hwnd, &g_MinimizedAll[i].wndpl);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_MinimizedAll.RemoveAll();
|
g_MinimizedAll.RemoveAll();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue