From a94de86ccc013928d2817228ed7c8247a91a898c Mon Sep 17 00:00:00 2001 From: Michael Martin Date: Tue, 21 Apr 2009 03:24:24 +0000 Subject: [PATCH] - menu.c: Only send WM_COMMAND messages to the top parent window. - edit.c: Use WM_MENUSELECT vice WM_COMMAND to determine which clipboard message to send. - Fixes vb apps edit context menu and maybe others. Bug #4404 svn path=/trunk/; revision=40628 --- reactos/dll/win32/user32/controls/edit.c | 19 ++++++++++++------- reactos/dll/win32/user32/windows/menu.c | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/user32/controls/edit.c b/reactos/dll/win32/user32/controls/edit.c index 3cd74c2a8a2..ba32bf847ce 100644 --- a/reactos/dll/win32/user32/controls/edit.c +++ b/reactos/dll/win32/user32/controls/edit.c @@ -255,7 +255,7 @@ static BOOL EDIT_EM_Undo(EDITSTATE *es); * WM_XXX message handlers */ static LRESULT EDIT_WM_Char(EDITSTATE *es, WCHAR c); -static void EDIT_WM_Command(EDITSTATE *es, INT code, INT id, HWND conrtol); +static void EDIT_WM_MenuSelect(EDITSTATE *es, INT code, INT id, HWND conrtol); static void EDIT_WM_ContextMenu(EDITSTATE *es, INT x, INT y); static void EDIT_WM_Copy(EDITSTATE *es); static LRESULT EDIT_WM_Create(EDITSTATE *es, LPCWSTR name); @@ -947,8 +947,8 @@ static LRESULT EditWndProc_common( HWND hwnd, UINT msg, EDIT_WM_Clear(es); break; - case WM_COMMAND: - EDIT_WM_Command(es, HIWORD(wParam), LOWORD(wParam), (HWND)lParam); + case WM_MENUSELECT: + EDIT_WM_MenuSelect(es, HIWORD(wParam), LOWORD(wParam), (HWND)lParam); break; case WM_CONTEXTMENU: @@ -4224,12 +4224,17 @@ static LRESULT EDIT_WM_Char(EDITSTATE *es, WCHAR c) * WM_COMMAND * */ -static void EDIT_WM_Command(EDITSTATE *es, INT code, INT id, HWND control) +static void EDIT_WM_MenuSelect(EDITSTATE *es, INT code, INT id, HWND control) { - if (code || control) - return; - switch (id) { + static INT MenuSelected; + + if (id != 0) { + MenuSelected = id; + return; + } + + switch (MenuSelected) { case EM_UNDO: SendMessageW(es->hwndSelf, WM_UNDO, 0, 0); break; diff --git a/reactos/dll/win32/user32/windows/menu.c b/reactos/dll/win32/user32/windows/menu.c index 51da1c0cefd..94d28cede32 100644 --- a/reactos/dll/win32/user32/windows/menu.c +++ b/reactos/dll/win32/user32/windows/menu.c @@ -2375,7 +2375,7 @@ MenuExecFocusedItem(MTRACKER *Mt, PROSMENUINFO MenuInfo, UINT Flags) PostMessageW(Mt->OwnerWnd, WM_MENUCOMMAND, MenuInfo->FocusedItem, (LPARAM)MenuInfo->Self); - else + else if (GetParent(Mt->OwnerWnd) == GetDesktopWindow()) PostMessageW(Mt->OwnerWnd, WM_COMMAND, ItemInfo.wID, 0); } }