Index: subsys/system/explorer/taskbar/taskbar.cpp =================================================================== --- subsys/system/explorer/taskbar/taskbar.cpp (revision 13872) +++ subsys/system/explorer/taskbar/taskbar.cpp (working copy) @@ -60,7 +60,7 @@ TaskBar::~TaskBar() { - KillTimer(_hwnd, 0); +// KillTimer(_hwnd, 0); //DeinstallShellHook(); } @@ -96,25 +96,32 @@ _next_id = IDC_FIRST_APP; //InstallShellHook(_hwnd, PM_SHELLHOOK_NOTIFY); + RegisterShellHookWindow(_hwnd); Refresh(); - SetTimer(_hwnd, 0, 200, NULL); +// SetTimer(_hwnd, 0, 200, NULL); return 0; } LRESULT TaskBar::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam) { + static UINT ShellHookNmsg = 0; + + if (!ShellHookNmsg) { + ShellHookNmsg = RegisterWindowMessage(TEXT("SHELLHOOK")); + LOG (FmtString(TEXT("Nmsg == %#x"), ShellHookNmsg)); + } switch(nmsg) { case WM_SIZE: SendMessage(_htoolbar, WM_SIZE, 0, 0); ResizeButtons(); break; - case WM_TIMER: - Refresh(); - return 0; +// case WM_TIMER: +// Refresh(); +// return 0; case WM_CONTEXTMENU: { Point pt(lparam); @@ -145,7 +152,19 @@ return (LRESULT)(HWND)_last_foreground_wnd; default: def: - return super::WndProc(nmsg, wparam, lparam); + if (nmsg == RegisterWindowMessage(TEXT("SHELLHOOK"))) { + LOG(FmtString(TEXT("SHELLHOOK %x"), wparam)); + switch (wparam) { + case HSHELL_WINDOWCREATED: + case HSHELL_WINDOWDESTROYED: + case HSHELL_WINDOWACTIVATED: + case HSHELL_REDRAW: + Refresh(); + break; + } + } else { + return super::WndProc(nmsg, wparam, lparam); + } } return 0;