Akihiro Sagawa : user32: Don' t emit WM_COMMAND on choosing an item in a context menu (Edit control).

Alexandre Julliard julliard at winehq.org
Tue Apr 8 14:02:50 CDT 2014


Module: wine
Branch: master
Commit: 0bfc8f05c62c34002d46553385605c538edff04d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0bfc8f05c62c34002d46553385605c538edff04d

Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date:   Tue Apr  8 01:43:51 2014 +0900

user32: Don't emit WM_COMMAND on choosing an item in a context menu (Edit control).

---

 dlls/user32/edit.c       |   19 +++++++++----------
 dlls/user32/tests/edit.c |    2 +-
 2 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c
index e9cbc91..1a9796f 100644
--- a/dlls/user32/edit.c
+++ b/dlls/user32/edit.c
@@ -3244,14 +3244,11 @@ static LRESULT EDIT_WM_Char(EDITSTATE *es, WCHAR c)
 
 /*********************************************************************
  *
- *	WM_COMMAND
+ *	EDIT_ContextMenuCommand
  *
  */
-static void EDIT_WM_Command(EDITSTATE *es, INT code, INT id, HWND control)
+static void EDIT_ContextMenuCommand(EDITSTATE *es, UINT id)
 {
-	if (code || control)
-		return;
-
 	switch (id) {
 		case EM_UNDO:
                         SendMessageW(es->hwndSelf, WM_UNDO, 0, 0);
@@ -3301,6 +3298,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;
+	UINT cmd;
 
 	ORDER_UINT(start, end);
 
@@ -3329,7 +3327,12 @@ static void EDIT_WM_ContextMenu(EDITSTATE *es, INT x, INT y)
 	if (!(es->flags & EF_FOCUSED))
             SetFocus(es->hwndSelf);
 
-	TrackPopupMenu(popup, TPM_LEFTALIGN | TPM_RIGHTBUTTON, x, y, 0, es->hwndSelf, NULL);
+	cmd = TrackPopupMenu(popup, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD | TPM_NONOTIFY,
+			     x, y, 0, es->hwndSelf, NULL);
+
+	if (cmd)
+	    EDIT_ContextMenuCommand(es, cmd);
+
 	DestroyMenu(menu);
 }
 
@@ -4984,10 +4987,6 @@ LRESULT EditWndProc_common( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, B
 		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;
diff --git a/dlls/user32/tests/edit.c b/dlls/user32/tests/edit.c
index 219fb1d..312e419 100644
--- a/dlls/user32/tests/edit.c
+++ b/dlls/user32/tests/edit.c
@@ -2323,7 +2323,7 @@ static void test_contextmenu(void)
     SendMessageA(hwndEdit, WM_SETTEXT, 0, (LPARAM)"foo");
     SendMessageA(hwndEdit, WM_CONTEXTMENU, (WPARAM)hwndEdit, MAKEWORD(-1, -1));
     while (PeekMessageA(&msg, hwndEdit, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
-    todo_wine ok(menu_messages.wm_command == 0,
+    ok(menu_messages.wm_command == 0,
        "Expected no WM_COMMAND messages, got %d\n", menu_messages.wm_command);
     todo_wine ok(menu_messages.em_setsel == 1,
        "Expected 1 EM_SETSEL message, got %d\n", menu_messages.em_setsel);




More information about the wine-cvs mailing list