From d73991290db9ca2b68d9ab34e1d7128163de4ac8 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 12 Jan 2011 13:22:12 +0000 Subject: [PATCH] [EXPLORER_NEW] Open a context menu, when a task is right clicked. Patch by greenie (greenie__ at hotmail dot com) See issue #4671 for more details. svn path=/trunk/; revision=50368 --- reactos/base/shell/explorer-new/taskswnd.c | 61 +++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/reactos/base/shell/explorer-new/taskswnd.c b/reactos/base/shell/explorer-new/taskswnd.c index a694267111c..6a4501191cc 100644 --- a/reactos/base/shell/explorer-new/taskswnd.c +++ b/reactos/base/shell/explorer-new/taskswnd.c @@ -1715,6 +1715,64 @@ TaskSwitchWnd_HandleButtonClick(IN OUT PTASK_SWITCH_WND This, return FALSE; } + +static VOID +TaskSwitchWnd_HandleTaskItemRightClick(IN OUT PTASK_SWITCH_WND This, + IN OUT PTASK_ITEM TaskItem) +{ + + HMENU hmenu = GetSystemMenu(TaskItem->hWnd, FALSE); + + if (hmenu) { + POINT pt; + GetCursorPos(&pt); + int cmd = TrackPopupMenu(hmenu, TPM_LEFTBUTTON|TPM_RIGHTBUTTON|TPM_RETURNCMD, pt.x, pt.y, 0, This->hWndToolbar, NULL); + if (cmd) { + SetForegroundWindow(TaskItem->hWnd); // reactivate window after the context menu has closed + PostMessage(TaskItem->hWnd, WM_SYSCOMMAND, cmd, 0); + } + } +} + +static VOID +TaskSwitchWnd_HandleTaskGroupRightClick(IN OUT PTASK_SWITCH_WND This, + IN OUT PTASK_GROUP TaskGroup) +{ + /* TODO: Show task group right click menu */ +} + +static BOOL +TaskSwitchWnd_HandleButtonRightClick(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_HandleTaskGroupRightClick(This, + TaskGroup); + return TRUE; + } + } + + TaskItem = FindTaskItemByIndex(This, + (INT)wIndex); + + if (TaskItem != NULL) + { + TaskSwitchWnd_HandleTaskItemRightClick(This, + TaskItem); + return TRUE; + } + + return FALSE; +} + + static LRESULT TaskSwichWnd_HandleItemPaint(IN OUT PTASK_SWITCH_WND This, IN OUT NMTBCUSTOMDRAW *nmtbcd) @@ -2001,7 +2059,8 @@ TaskSwitchWndProc(IN HWND hwnd, (LPARAM)&pt); if (iBtn >= 0) { - /* FIXME: Display the system menu of the window */ + TaskSwitchWnd_HandleButtonRightClick(This, + iBtn); } else goto ForwardContextMenuMsg;