PTASK_GROUP CurrentGroup;
PTASK_ITEM CurrentTaskItem, LastTaskItem;
- DbgPrint("Tasks dump:\n");
+ TRACE("Tasks dump:\n");
if (This->IsGroupingEnabled)
{
CurrentGroup = This->TaskGroups;
while (CurrentGroup != NULL)
{
- DbgPrint("- Group PID: 0x%p Tasks: %d Index: %d\n", CurrentGroup->dwProcessId, CurrentGroup->dwTaskCount, CurrentGroup->Index);
+ TRACE("- Group PID: 0x%p Tasks: %d Index: %d\n", CurrentGroup->dwProcessId, CurrentGroup->dwTaskCount, CurrentGroup->Index);
CurrentTaskItem = This->TaskItems;
LastTaskItem = CurrentTaskItem + This->TaskItemCount;
{
if (CurrentTaskItem->Group == CurrentGroup)
{
- DbgPrint(" + Task hwnd: 0x%p Index: %d\n", CurrentTaskItem->hWnd, CurrentTaskItem->Index);
+ TRACE(" + Task hwnd: 0x%p Index: %d\n", CurrentTaskItem->hWnd, CurrentTaskItem->Index);
}
CurrentTaskItem++;
}
{
if (CurrentTaskItem->Group == NULL)
{
- DbgPrint("- Task hwnd: 0x%p Index: %d\n", CurrentTaskItem->hWnd, CurrentTaskItem->Index);
+ TRACE("- Task hwnd: 0x%p Index: %d\n", CurrentTaskItem->hWnd, CurrentTaskItem->Index);
}
CurrentTaskItem++;
}
LastTaskItem = CurrentTaskItem + This->TaskItemCount;
while (CurrentTaskItem != LastTaskItem)
{
- DbgPrint("- Task hwnd: 0x%p Index: %d\n", CurrentTaskItem->hWnd, CurrentTaskItem->Index);
+ TRACE("- Task hwnd: 0x%p Index: %d\n", CurrentTaskItem->hWnd, CurrentTaskItem->Index);
CurrentTaskItem++;
}
}
return -1;
}
- DbgPrint("Updated button %d for hwnd 0x%p\n", TaskItem->Index, TaskItem->hWnd);
+ TRACE("Updated button %d for hwnd 0x%p\n", TaskItem->Index, TaskItem->hWnd);
return TaskItem->Index;
}
TaskSwitchWnd_UpdateIndexesAfterButtonInserted(This,
iIndex);
- DbgPrint("Added button %d for hwnd 0x%p\n", iIndex, TaskItem->hWnd);
+ TRACE("Added button %d for hwnd 0x%p\n", iIndex, TaskItem->hWnd);
TaskItem->Index = iIndex;
This->ToolbarBtnCount++;
if (!GetWindowThreadProcessId(hWnd,
&dwProcessId))
{
- DbgPrint("Cannot get process id of hwnd 0x%p\n", hWnd);
+ TRACE("Cannot get process id of hwnd 0x%p\n", hWnd);
return NULL;
}
TaskSwitchWnd_CheckActivateTaskItem(IN OUT PTASK_SWITCH_WND This,
IN OUT PTASK_ITEM TaskItem)
{
- PTASK_ITEM ActiveTaskItem;
+ PTASK_ITEM CurrentTaskItem;
PTASK_GROUP TaskGroup = NULL;
- ActiveTaskItem = This->ActiveTaskItem;
+ CurrentTaskItem = This->ActiveTaskItem;
if (TaskItem != NULL)
TaskGroup = TaskItem->Group;
return;
}
- if (ActiveTaskItem != NULL)
+ if (CurrentTaskItem != NULL)
{
- PTASK_GROUP ActiveTaskGroup;
+ PTASK_GROUP CurrentTaskGroup;
- if (ActiveTaskItem == TaskItem)
+ if (CurrentTaskItem == TaskItem)
return;
- ActiveTaskGroup = ActiveTaskItem->Group;
+ CurrentTaskGroup = CurrentTaskItem->Group;
if (This->IsGroupingEnabled &&
- ActiveTaskGroup != NULL &&
- ActiveTaskGroup->IsCollapsed)
+ CurrentTaskGroup != NULL &&
+ CurrentTaskGroup->IsCollapsed)
{
- if (ActiveTaskGroup == TaskGroup)
+ if (CurrentTaskGroup == TaskGroup)
return;
/* FIXME */
else
{
This->ActiveTaskItem = NULL;
- if (ActiveTaskItem->Index >= 0)
+ if (CurrentTaskItem->Index >= 0)
{
- TaskSwitchWnd_UpdateTaskItemButton(This,
- ActiveTaskItem);
+ TaskSwitchWnd_UpdateTaskItemButton(This, CurrentTaskItem);
}
}
}
if (TaskItem != NULL && TaskItem->Index >= 0)
{
- TaskSwitchWnd_UpdateTaskItemButton(This,
- TaskItem);
+ TaskSwitchWnd_UpdateTaskItemButton(This, TaskItem);
+ }
+ else if (TaskItem == NULL)
+ {
+ TRACE("Active TaskItem now NULL\n");
}
}
{
PTASK_ITEM TaskItem;
+ if (!IsWindow(hWnd) || ITrayWindow_IsSpecialHWND(This->Tray, hWnd))
+ return FALSE;
+
TaskItem = TaskSwitchWnd_FindTaskItem(This,
hWnd);
if (TaskItem == NULL)
{
- DbgPrint("Add window 0x%p\n", hWnd);
+ TRACE("Add window 0x%p\n", hWnd);
TaskItem = TaskSwitchWnd_AllocTaskItem(This);
if (TaskItem != NULL)
{
{
if (TaskItem != NULL)
{
- DbgPrint("Activate window 0x%p on button %d\n", TaskItem->hWnd, TaskItem->Index);
+ TRACE("Activate window 0x%p on button %d\n", TaskItem->hWnd, TaskItem->Index);
}
- TaskSwitchWnd_CheckActivateTaskItem(This,
- TaskItem);
+ TaskSwitchWnd_CheckActivateTaskItem(This, TaskItem);
return FALSE;
}
{
PTASK_ITEM TaskItem;
+ if (!hWnd)
+ {
+ return TaskSwitchWnd_ActivateTaskItem(This, NULL);
+ }
+
TaskItem = TaskSwitchWnd_FindTaskItem(This,
hWnd);
if (TaskItem == NULL)
if (TaskItem == NULL)
{
- DbgPrint("Activate window 0x%p, could not find task\n", hWnd);
+ TRACE("Activate window 0x%p, could not find task\n", hWnd);
}
- return TaskSwitchWnd_ActivateTaskItem(This,
- TaskItem);
+ return TaskSwitchWnd_ActivateTaskItem(This, TaskItem);
}
static BOOL
hWnd);
if (TaskItem != NULL)
{
- DbgPrint("Delete window 0x%p on button %d\n", hWnd, TaskItem->Index);
+ TRACE("Delete window 0x%p on button %d\n", hWnd, TaskItem->Index);
TaskSwitchWnd_DeleteTaskItem(This,
TaskItem);
return TRUE;
}
//else
- //DbgPrint("Failed to delete window 0x%p\n", hWnd);
+ //TRACE("Failed to delete window 0x%p\n", hWnd);
return FALSE;
}
hWnd);
if (TaskItem != NULL)
{
- DbgPrint("Flashing window 0x%p on button %d\n", hWnd, TaskItem->Index);
+ TRACE("Flashing window 0x%p on button %d\n", hWnd, TaskItem->Index);
TaskSwitchWnd_FlashTaskItem(This,
TaskItem);
return TRUE;
/* Only show windows that still exist and are visible and none of explorer's
special windows (such as the desktop or the tray window) */
if (IsWindow(hWnd) && IsWindowVisible(hWnd) &&
- !ITrayWindow_IsSpecialHWND(This->Tray,
- hWnd))
+ !ITrayWindow_IsSpecialHWND(This->Tray, hWnd))
{
+ DWORD exStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
/* Don't list popup windows and also no tool windows */
- if (GetWindow(hWnd,
- GW_OWNER) == NULL &&
- !(GetWindowLong(hWnd,
- GWL_EXSTYLE) & WS_EX_TOOLWINDOW))
+ if ((GetWindow(hWnd, GW_OWNER) == NULL || exStyle & WS_EX_APPWINDOW) &&
+ !(exStyle & WS_EX_TOOLWINDOW))
{
TaskSwitchWnd_AddTask(This,
hWnd);
}
static LRESULT CALLBACK
-TaskSwichWnd_ToolbarSubclassedProc(IN HWND hWnd,
+TaskSwitchWnd_ToolbarSubclassedProc(IN HWND hWnd,
IN UINT msg,
IN WPARAM wParam,
IN LPARAM lParam,
TOOLBARCLASSNAME,
szRunningApps,
WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN |
- TBSTYLE_TOOLTIPS | TBSTYLE_WRAPABLE | TBSTYLE_LIST |
- TBSTYLE_TRANSPARENT |
- CCS_TOP | CCS_NORESIZE | CCS_NODIVIDER,
+ TBSTYLE_TOOLTIPS | TBSTYLE_WRAPABLE | TBSTYLE_LIST | TBSTYLE_TRANSPARENT |
+ CCS_TOP | CCS_NORESIZE | CCS_NODIVIDER,
0,
0,
0,
/* Subclass the toolbar control because it doesn't provide a
NM_NCHITTEST notification */
This->IsToolbarSubclassed = SetWindowSubclass(This->hWndToolbar,
- TaskSwichWnd_ToolbarSubclassedProc,
+ TaskSwitchWnd_ToolbarSubclassedProc,
TSW_TOOLBAR_SUBCLASS_ID,
(DWORD_PTR)This);
}
case APPCOMMAND_BROWSER_HOME:
case APPCOMMAND_LAUNCH_MAIL:
default:
- DbgPrint("Shell app command %d unhandled!\n", (INT)GET_APPCOMMAND_LPARAM(lParam));
+ TRACE("Shell app command %d unhandled!\n", (INT)GET_APPCOMMAND_LPARAM(lParam));
break;
}
break;
case HSHELL_WINDOWCREATED:
- TaskSwitchWnd_AddTask(This,
+ Ret = TaskSwitchWnd_AddTask(This,
(HWND)lParam);
- Ret = TRUE;
break;
case HSHELL_WINDOWDESTROYED:
/* The window still exists! Delay destroying it a bit */
- TaskSwitchWnd_DeleteTask(This,
- (HWND)lParam);
+ TaskSwitchWnd_DeleteTask(This, (HWND)lParam);
Ret = TRUE;
break;
- case HSHELL_ACTIVATESHELLWINDOW:
- goto UnhandledShellMessage;
-
case HSHELL_RUDEAPPACTIVATED:
- goto UnhandledShellMessage;
-
case HSHELL_WINDOWACTIVATED:
- TaskSwitchWnd_ActivateTask(This,
- (HWND)lParam);
- Ret = TRUE;
+ if (lParam)
+ {
+ TaskSwitchWnd_ActivateTask(This, (HWND) lParam);
+ Ret = TRUE;
+ }
break;
case HSHELL_GETMINRECT:
break;
case HSHELL_TASKMAN:
+ PostMessage(ITrayWindow_GetHWND(This->Tray), TWM_OPENSTARTMENU,0, 0);
+ break;
+
+ case HSHELL_ACTIVATESHELLWINDOW:
case HSHELL_LANGUAGE:
case HSHELL_SYSMENU:
case HSHELL_ENDTASK:
{
if (hshell_msg[i].msg == (INT)wParam)
{
- DbgPrint("Shell message %ws unhandled (lParam = 0x%p)!\n", hshell_msg[i].msg_name, lParam);
+ TRACE("Shell message %ws unhandled (lParam = 0x%p)!\n", hshell_msg[i].msg_name, lParam);
found = 1;
break;
}
}
if (!found)
{
- DbgPrint("Shell message %d unhandled (lParam = 0x%p)!\n", (INT)wParam, lParam);
+ TRACE("Shell message %d unhandled (lParam = 0x%p)!\n", (INT)wParam, lParam);
}
break;
}
bIsMinimized = IsIconic(TaskItem->hWnd);
bIsActive = (TaskItem == This->ActiveTaskItem);
+ TRACE("Active TaskItem %p, selected TaskItem %p\n", This->ActiveTaskItem, TaskItem);
+ if (This->ActiveTaskItem)
+ TRACE("Active TaskItem hWnd=%p, TaskItem hWnd %p\n", This->ActiveTaskItem->hWnd, TaskItem->hWnd);
+
+ TRACE("Valid button clicked. HWND=%p, IsMinimized=%s, IsActive=%s...\n",
+ TaskItem->hWnd, bIsMinimized ? "Yes" : "No", bIsActive ? "Yes" : "No");
+
if (!bIsMinimized && bIsActive)
{
PostMessage(TaskItem->hWnd,
WM_SYSCOMMAND,
SC_MINIMIZE,
0);
+ TRACE("Valid button clicked. App window Minimized.\n");
}
else
{
WM_SYSCOMMAND,
SC_RESTORE,
0);
+ TRACE("Valid button clicked. App window Restored.\n");
}
SetForegroundWindow(TaskItem->hWnd);
+ TRACE("Valid button clicked. App window Activated.\n");
}
}
}
static LRESULT
-TaskSwichWnd_HandleItemPaint(IN OUT PTASK_SWITCH_WND This,
+TaskSwitchWnd_HandleItemPaint(IN OUT PTASK_SWITCH_WND This,
IN OUT NMTBCUSTOMDRAW *nmtbcd)
{
LRESULT Ret = CDRF_DODEFAULT;
{
case CDDS_ITEMPREPAINT:
- Ret = TaskSwichWnd_HandleItemPaint(This,
+ Ret = TaskSwitchWnd_HandleItemPaint(This,
nmtbcd);
break;
if (uMsg != WM_NCCREATE)
{
- This = (PTASK_SWITCH_WND)GetWindowLongPtr(hwnd,
- 0);
+ This = (PTASK_SWITCH_WND)GetWindowLongPtr(hwnd, 0);
}
if (This != NULL || uMsg == WM_NCCREATE)
TaskSwitchWnd_UpdateTheme(This);
break;
case WM_ERASEBKGND:
- TaskSwitchWnd_DrawBackground(hwnd, (HDC)wParam);
- break;
+ if (!This->TaskBandTheme)
+ break;
+ TaskSwitchWnd_DrawBackground(hwnd, (HDC) wParam);
+ return TRUE;
case WM_SIZE:
{
SIZE szClient;
szClient.cy,
SWP_NOZORDER);
- TaskSwitchWnd_UpdateButtonsSize(This,
- FALSE);
+ TaskSwitchWnd_UpdateButtonsSize(This, FALSE);
}
break;
}
{
/* We want the tray window to be draggable everywhere, so make the control
appear transparent */
- Ret = DefWindowProc(hwnd,
- uMsg,
- wParam,
- lParam);
+ Ret = DefWindowProc(hwnd, uMsg, wParam, lParam);
if (Ret != HTVSCROLL && Ret != HTHSCROLL)
- Ret = HTTRANSPARENT;
- break;
+ return HTTRANSPARENT;
+ return Ret;
}
case WM_COMMAND:
{
if (lParam != 0 && (HWND)lParam == This->hWndToolbar)
{
- TaskSwitchWnd_HandleButtonClick(This,
- LOWORD(wParam));
+ TaskSwitchWnd_HandleButtonClick(This, LOWORD(wParam));
}
break;
}
if (nmh->hwndFrom == This->hWndToolbar)
{
- Ret = TaskSwitchWnd_HandleToolbarNotification(This,
- nmh);
+ return TaskSwitchWnd_HandleToolbarNotification(This, nmh);
}
- break;
+ return 0;
}
case TSWM_ENABLEGROUPING:
TaskSwitchWnd_EnableGrouping(This,
(BOOL)wParam);
}
- break;
+ return Ret;
}
case TSWM_UPDATETASKBARPOS:
{
/* Update the button spacing */
- TaskSwitchWnd_UpdateTbButtonSpacing(This,
- ITrayWindow_IsHorizontal(This->Tray),
- 0,
- 0);
+ TaskSwitchWnd_UpdateTbButtonSpacing(This, ITrayWindow_IsHorizontal(This->Tray), 0, 0);
break;
}
pt.x = (LONG)LOWORD(lParam);
pt.y = (LONG)HIWORD(lParam);
- MapWindowPoints(NULL,
- This->hWndToolbar,
- &pt,
- 1);
+ MapWindowPoints(NULL, This->hWndToolbar, &pt, 1);
- iBtn = (INT_PTR)SendMessage(This->hWndToolbar,
- TB_HITTEST,
- 0,
- (LPARAM)&pt);
+ iBtn = (INT_PTR) SendMessage(This->hWndToolbar, TB_HITTEST, 0, (LPARAM) &pt);
if (iBtn >= 0)
{
- TaskSwitchWnd_HandleButtonRightClick(This,
- iBtn);
+ TaskSwitchWnd_HandleButtonRightClick(This, iBtn);
}
else
goto ForwardContextMenuMsg;
{
ForwardContextMenuMsg:
/* Forward message */
- Ret = SendMessage(ITrayWindow_GetHWND(This->Tray),
- uMsg,
- wParam,
- lParam);
+ Ret = SendMessage(ITrayWindow_GetHWND(This->Tray), uMsg, wParam, lParam);
}
break;
}
TaskSwitchWnd_Create(This);
#if DUMP_TASKS != 0
- SetTimer(hwnd,
- 1,
- 5000,
- NULL);
+ SetTimer(hwnd, 1, 5000, NULL);
#endif
break;
if (This->IsToolbarSubclassed)
{
if (RemoveWindowSubclass(This->hWndToolbar,
- TaskSwichWnd_ToolbarSubclassedProc,
+ TaskSwitchWnd_ToolbarSubclassedProc,
TSW_TOOLBAR_SUBCLASS_ID))
{
This->IsToolbarSubclassed = FALSE;
case WM_NCDESTROY:
TaskSwitchWnd_NCDestroy(This);
- HeapFree(hProcessHeap,
- 0,
- This);
- SetWindowLongPtr(hwnd,
- 0,
- 0);
+ HeapFree(hProcessHeap, 0, This);
+ SetWindowLongPtr(hwnd, 0, 0);
break;
#if DUMP_TASKS != 0
break;
#endif
+ case WM_KLUDGEMINRECT:
+ {
+ PTASK_ITEM TaskItem = TaskSwitchWnd_FindTaskItem(This, (HWND)wParam);
+ if (TaskItem)
+ {
+ RECT* prcMinRect = (RECT*)lParam;
+ RECT rcItem, rcToolbar;
+ SendMessageW(This->hWndToolbar,TB_GETITEMRECT, TaskItem->Index, (LPARAM)&rcItem);
+ GetWindowRect(This->hWndToolbar, &rcToolbar);
+
+ OffsetRect(&rcItem, rcToolbar.left, rcToolbar.top);
+
+ *prcMinRect = rcItem;
+ return TRUE;
+ }
+ return FALSE;
+ }
+
default:
/* HandleDefaultMessage: */
if (uMsg == This->ShellHookMsg && This->ShellHookMsg != 0)
{
/* Process shell messages */
- Ret = (LRESULT)TaskSwitchWnd_HandleShellHookMsg(This,
- wParam,
- lParam);
- break;
+ return (LRESULT) TaskSwitchWnd_HandleShellHookMsg(This, wParam, lParam);
}
- Ret = DefWindowProc(hwnd,
- uMsg,
- wParam,
- lParam);
break;
}
}
- else
- {
- Ret = DefWindowProc(hwnd,
- uMsg,
- wParam,
- lParam);
- }
- return Ret;
+ return DefWindowProc(hwnd, uMsg, wParam, lParam);
}