[ros-diffs] [weiden] 41805: Allow activating tasks

weiden at svn.reactos.org weiden at svn.reactos.org
Wed Jul 8 16:33:26 CEST 2009


Author: weiden
Date: Wed Jul  8 18:33:25 2009
New Revision: 41805

URL: http://svn.reactos.org/svn/reactos?rev=41805&view=rev
Log:
Allow activating tasks

Modified:
    trunk/reactos/base/shell/explorer-new/taskswnd.c

Modified: trunk/reactos/base/shell/explorer-new/taskswnd.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/explorer-new/taskswnd.c?rev=41805&r1=41804&r2=41805&view=diff
==============================================================================
--- trunk/reactos/base/shell/explorer-new/taskswnd.c [iso-8859-1] (original)
+++ trunk/reactos/base/shell/explorer-new/taskswnd.c [iso-8859-1] Wed Jul  8 18:33:25 2009
@@ -1029,6 +1029,21 @@
 }
 
 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 @@
         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 @@
                                     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 @@
             {
                 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;
             }



More information about the Ros-diffs mailing list