From 8d45a2401ac5136f9b7adcdd16211cdc56cd7a12 Mon Sep 17 00:00:00 2001 From: Thomas Bluemel Date: Wed, 8 Jul 2009 14:33:25 +0000 Subject: [PATCH] Allow activating tasks svn path=/trunk/; revision=41805 --- reactos/base/shell/explorer-new/taskswnd.c | 101 ++++++++++++++++++--- 1 file changed, 90 insertions(+), 11 deletions(-) diff --git a/reactos/base/shell/explorer-new/taskswnd.c b/reactos/base/shell/explorer-new/taskswnd.c index e1e578d36b4..63fb9f34d14 100644 --- a/reactos/base/shell/explorer-new/taskswnd.c +++ b/reactos/base/shell/explorer-new/taskswnd.c @@ -1028,6 +1028,21 @@ TaskSwitchWnd_AddTask(IN OUT PTASK_SWITCH_WND This, return TaskItem != NULL; } +static BOOL +TaskSwitchWnd_ActivateTaskItem(IN OUT PTASK_SWITCH_WND This, + IN OUT PTASK_ITEM TaskItem) +{ + if (TaskItem != NULL) + { + DbgPrint("Activate window 0x%p on button %d\n", TaskItem->hWnd, TaskItem->Index); + } + + TaskSwitchWnd_CheckActivateTaskItem(This, + TaskItem); + + return FALSE; +} + static BOOL TaskSwitchWnd_ActivateTask(IN OUT PTASK_SWITCH_WND This, IN HWND hWnd) @@ -1041,20 +1056,14 @@ TaskSwitchWnd_ActivateTask(IN OUT PTASK_SWITCH_WND This, TaskItem = TaskSwitchWnd_FindOtherTaskItem(This, hWnd); } - - if (TaskItem != NULL) - { - DbgPrint("Activate window 0x%p on button %d\n", hWnd, TaskItem->Index); - } - else + + if (TaskItem == NULL) { DbgPrint("Activate window 0x%p, could not find task\n", hWnd); } - TaskSwitchWnd_CheckActivateTaskItem(This, - TaskItem); - - return FALSE; + return TaskSwitchWnd_ActivateTaskItem(This, + TaskItem); } static BOOL @@ -1634,6 +1643,75 @@ TaskSwitchWnd_EnableGrouping(IN OUT PTASK_SWITCH_WND This, FALSE); } +static VOID +TaskSwitchWnd_HandleTaskItemClick(IN OUT PTASK_SWITCH_WND This, + IN OUT PTASK_ITEM TaskItem) +{ + BOOL bMinimize; + + if (IsWindow(TaskItem->hWnd)) + { + bMinimize = !IsIconic(TaskItem->hWnd) && + TaskItem == This->ActiveTaskItem; + + if (!bMinimize && IsIconic(TaskItem->hWnd)) + { + PostMessage(TaskItem->hWnd, + WM_SYSCOMMAND, + SC_RESTORE, + 0); + } + + SetForegroundWindow(TaskItem->hWnd); + + if (bMinimize) + { + PostMessage(TaskItem->hWnd, + WM_SYSCOMMAND, + SC_MINIMIZE, + 0); + } + } +} + +static VOID +TaskSwitchWnd_HandleTaskGroupClick(IN OUT PTASK_SWITCH_WND This, + IN OUT PTASK_GROUP TaskGroup) +{ + /* TODO: Show task group menu */ +} + +static BOOL +TaskSwitchWnd_HandleButtonClick(IN OUT PTASK_SWITCH_WND This, + IN WORD wIndex) +{ + PTASK_ITEM TaskItem; + PTASK_GROUP TaskGroup; + + if (This->IsGroupingEnabled) + { + TaskGroup = FindTaskGroupByIndex(This, + (INT)wIndex); + if (TaskGroup != NULL && TaskGroup->IsCollapsed) + { + TaskSwitchWnd_HandleTaskGroupClick(This, + TaskGroup); + return TRUE; + } + } + + TaskItem = FindTaskItemByIndex(This, + (INT)wIndex); + if (TaskItem != NULL) + { + TaskSwitchWnd_HandleTaskItemClick(This, + TaskItem); + return TRUE; + } + + return FALSE; +} + static LRESULT TaskSwichWnd_HandleItemPaint(IN OUT PTASK_SWITCH_WND This, IN OUT NMTBCUSTOMDRAW *nmtbcd) @@ -1860,7 +1938,8 @@ TaskSwitchWndProc(IN HWND hwnd, { if (lParam != 0 && (HWND)lParam == This->hWndToolbar) { - DbgPrint("WM_COMMAND %u:%u (%u)\n", (UINT)LOWORD(wParam), (UINT)HIWORD(wParam), (UINT)wParam); + TaskSwitchWnd_HandleButtonClick(This, + LOWORD(wParam)); } break; }