dlls/user32/edit.c | 70 ++++++++++++++++++++------------------------------- 1 files changed, 28 insertions(+), 42 deletions(-) diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c index eadcc3d..c53a83d 100644 --- a/dlls/user32/edit.c +++ b/dlls/user32/edit.c @@ -3357,43 +3357,6 @@ static LRESULT EDIT_WM_Char(EDITSTATE *es, WCHAR c) /********************************************************************* * - * WM_COMMAND - * - */ -static void EDIT_WM_Command(EDITSTATE *es, INT code, INT id, HWND control) -{ - if (code || control) - return; - - switch (id) { - case EM_UNDO: - SendMessageW(es->hwndSelf, WM_UNDO, 0, 0); - break; - case WM_CUT: - SendMessageW(es->hwndSelf, WM_CUT, 0, 0); - break; - case WM_COPY: - SendMessageW(es->hwndSelf, WM_COPY, 0, 0); - break; - case WM_PASTE: - SendMessageW(es->hwndSelf, WM_PASTE, 0, 0); - break; - case WM_CLEAR: - SendMessageW(es->hwndSelf, WM_CLEAR, 0, 0); - break; - case EM_SETSEL: - EDIT_EM_SetSel(es, 0, (UINT)-1, FALSE); - EDIT_EM_ScrollCaret(es); - break; - default: - ERR("unknown menu item, please report\n"); - break; - } -} - - -/********************************************************************* - * * WM_CONTEXTMENU * * Note: the resource files resource/sysres_??.rc cannot define a @@ -3414,6 +3377,7 @@ static void EDIT_WM_ContextMenu(EDITSTATE *es, INT x, INT y) HMENU popup = GetSubMenu(menu, 0); UINT start = es->selection_start; UINT end = es->selection_end; + INT selectedMenuItem; ORDER_UINT(start, end); @@ -3440,7 +3404,33 @@ static void EDIT_WM_ContextMenu(EDITSTATE *es, INT x, INT y) y = rc.top + (rc.bottom - rc.top) / 2; } - TrackPopupMenu(popup, TPM_LEFTALIGN | TPM_RIGHTBUTTON, x, y, 0, es->hwndSelf, NULL); + selectedMenuItem = TrackPopupMenu(popup, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, x, y, 0, es->hwndSelf, NULL); + switch (selectedMenuItem) { + case 0: + break; + case EM_UNDO: + SendMessageW(es->hwndSelf, WM_UNDO, 0, 0); + break; + case WM_CUT: + SendMessageW(es->hwndSelf, WM_CUT, 0, 0); + break; + case WM_COPY: + SendMessageW(es->hwndSelf, WM_COPY, 0, 0); + break; + case WM_PASTE: + SendMessageW(es->hwndSelf, WM_PASTE, 0, 0); + break; + case WM_CLEAR: + SendMessageW(es->hwndSelf, WM_CLEAR, 0, 0); + break; + case EM_SETSEL: + EDIT_EM_SetSel(es, 0, (UINT)-1, FALSE); + EDIT_EM_ScrollCaret(es); + break; + default: + ERR("unknown menu item, please report\n"); + break; + } DestroyMenu(menu); } @@ -5192,10 +5182,6 @@ 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); - break; - case WM_CONTEXTMENU: EDIT_WM_ContextMenu(es, (short)LOWORD(lParam), (short)HIWORD(lParam)); break;