Now checks the "show desktop" state periodically as before.

This commit is contained in:
spx 2011-08-10 14:13:53 +00:00
parent 78b7a857c4
commit 82941f6618

View File

@ -121,10 +121,7 @@ void CSystem::Initialize(HINSTANCE instance)
0, 0,
WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS); WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);
if (c_WinEventHook == NULL) SetTimer(c_Window, TIMER_SHOWDESKTOP, INTERVAL_SHOWDESKTOP, NULL);
{
SetTimer(c_Window, TIMER_SHOWDESKTOP, INTERVAL_SHOWDESKTOP, NULL);
}
SetTimer(c_Window, TIMER_NETSTATS, INTERVAL_NETSTATS, NULL); SetTimer(c_Window, TIMER_NETSTATS, INTERVAL_NETSTATS, NULL);
SetTimer(c_Window, TIMER_DELETELATER, INTERVAL_DELETELATER, NULL); SetTimer(c_Window, TIMER_DELETELATER, INTERVAL_DELETELATER, NULL);
} }
@ -552,18 +549,28 @@ void CSystem::UpdateWorkareaInfo()
*/ */
HWND CSystem::GetDefaultShellWindow() HWND CSystem::GetDefaultShellWindow()
{ {
static HWND c_ShellW = NULL; // cache
HWND ShellW = GetShellWindow(); HWND ShellW = GetShellWindow();
if (ShellW) if (ShellW)
{ {
WCHAR className[16]; if (ShellW == c_ShellW)
if (GetClassName(ShellW, className, 16) > 0 &&
_wcsicmp(className, L"Progman") == 0)
{ {
return ShellW; return ShellW;
} }
else
{
WCHAR className[16];
if (GetClassName(ShellW, className, 16) > 0 &&
wcscmp(className, L"Progman") == 0)
{
c_ShellW = ShellW;
return ShellW;
}
}
} }
c_ShellW = NULL;
return NULL; return NULL;
} }
@ -790,22 +797,10 @@ bool CSystem::CheckDesktopState(HWND WorkerW)
{ {
c_ShowDesktop = !c_ShowDesktop; c_ShowDesktop = !c_ShowDesktop;
if (c_WinEventHook)
{
if (c_ShowDesktop)
{
SetTimer(c_Window, TIMER_SHOWDESKTOP, INTERVAL_SHOWDESKTOP, NULL);
}
else
{
KillTimer(c_Window, TIMER_SHOWDESKTOP);
}
}
if (CRainmeter::GetDebug()) if (CRainmeter::GetDebug())
{ {
LogWithArgs(LOG_DEBUG, L"System: %s", LogWithArgs(LOG_DEBUG, L"System: \"%s\" has been detected.",
c_ShowDesktop ? L"\"Show the desktop\" has been detected." : L"\"Show open windows\" has been detected."); c_ShowDesktop ? L"Show the desktop" : L"Show open windows");
} }
PrepareHelperWindow(WorkerW); PrepareHelperWindow(WorkerW);
@ -830,7 +825,7 @@ void CALLBACK CSystem::MyWinEventProc(HWINEVENTHOOK hWinEventHook, DWORD event,
{ {
WCHAR className[16]; WCHAR className[16];
if (GetClassName(hwnd, className, 16) > 0 && if (GetClassName(hwnd, className, 16) > 0 &&
_wcsicmp(className, L"WorkerW") == 0 && wcscmp(className, L"WorkerW") == 0 &&
BelongToSameProcess(GetDefaultShellWindow(), hwnd)) BelongToSameProcess(GetDefaultShellWindow(), hwnd))
{ {
const int max = 5; const int max = 5;
@ -850,11 +845,6 @@ void CALLBACK CSystem::MyWinEventProc(HWINEVENTHOOK hWinEventHook, DWORD event,
++loop; ++loop;
} }
} }
if (loop >= max) // detection failed
{
SetTimer(c_Window, TIMER_SHOWDESKTOP, INTERVAL_SHOWDESKTOP, NULL);
}
} }
} }
} }