- Patch by Nikolay Sivov : Fix Edit margins calculation for empty client area case.
- Patch by Akihiro Sagawa : Emit EM_SETSEL message when choosing "Select All" from context menu. Don' t emit WM_COMMAND on choosing an item in a context menu (Edit control).

svn path=/trunk/; revision=62749
This commit is contained in:
James Tabor 2014-04-14 20:23:17 +00:00
parent 90e1c4d5bc
commit b66792a4bb

View file

@ -2918,7 +2918,7 @@ static void EDIT_EM_SetMargins(EDITSTATE *es, INT action,
default_right_margin = tm.tmAveCharWidth / 2; default_right_margin = tm.tmAveCharWidth / 2;
min_size = calc_min_set_margin_size(dc, default_left_margin, default_right_margin); min_size = calc_min_set_margin_size(dc, default_left_margin, default_right_margin);
GetClientRect(es->hwndSelf, &rc); GetClientRect(es->hwndSelf, &rc);
if(rc.right - rc.left < min_size) { if (!IsRectEmpty(&rc) && (rc.right - rc.left < min_size)) {
default_left_margin = es->left_margin; default_left_margin = es->left_margin;
default_right_margin = es->right_margin; default_right_margin = es->right_margin;
} }
@ -3252,17 +3252,14 @@ static LRESULT EDIT_WM_Char(EDITSTATE *es, WCHAR c)
return 1; return 1;
} }
#if 0 // Removed see Revision 43925 comments.
/********************************************************************* /*********************************************************************
* *
* 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) { switch (id) {
case EM_UNDO: case EM_UNDO:
SendMessageW(es->hwndSelf, WM_UNDO, 0, 0); SendMessageW(es->hwndSelf, WM_UNDO, 0, 0);
@ -3280,15 +3277,13 @@ static void EDIT_WM_Command(EDITSTATE *es, INT code, INT id, HWND control)
SendMessageW(es->hwndSelf, WM_CLEAR, 0, 0); SendMessageW(es->hwndSelf, WM_CLEAR, 0, 0);
break; break;
case EM_SETSEL: case EM_SETSEL:
EDIT_EM_SetSel(es, 0, (UINT)-1, FALSE); SendMessageW(es->hwndSelf, EM_SETSEL, 0, -1);
EDIT_EM_ScrollCaret(es);
break; break;
default: default:
ERR("unknown menu item, please report\n"); ERR("unknown menu item, please report\n");
break; break;
} }
} }
#endif
/********************************************************************* /*********************************************************************
@ -3313,8 +3308,8 @@ static void EDIT_WM_ContextMenu(EDITSTATE *es, INT x, INT y)
HMENU popup = GetSubMenu(menu, 0); HMENU popup = GetSubMenu(menu, 0);
UINT start = es->selection_start; UINT start = es->selection_start;
UINT end = es->selection_end; UINT end = es->selection_end;
UINT cmd;
BOOL selectedItem; // reactos r40667
ORDER_UINT(start, end); ORDER_UINT(start, end);
/* undo */ /* undo */
@ -3345,34 +3340,12 @@ static void EDIT_WM_ContextMenu(EDITSTATE *es, INT x, INT y)
if (!(es->flags & EF_FOCUSED)) if (!(es->flags & EF_FOCUSED))
SetFocus(es->hwndSelf); SetFocus(es->hwndSelf);
#ifdef __REACTOS__ // r40667 cmd = TrackPopupMenu(popup, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD | TPM_NONOTIFY,
selectedItem = TrackPopupMenu(popup, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, x, y, 0, es->hwndSelf, NULL); x, y, 0, es->hwndSelf, NULL);
// Added see Revision 43925 comments.
switch (selectedItem) { if (cmd)
case EM_UNDO: EDIT_ContextMenuCommand(es, cmd);
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;
}
#endif
DestroyMenu(menu); DestroyMenu(menu);
} }
@ -5049,11 +5022,7 @@ LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
case WM_CLEAR: case WM_CLEAR:
EDIT_WM_Clear(es); EDIT_WM_Clear(es);
break; break;
#if 0 // Removed see Revision 43925 comments.
case WM_COMMAND:
EDIT_WM_Command(es, HIWORD(wParam), LOWORD(wParam), (HWND)lParam);
break;
#endif
case WM_CONTEXTMENU: case WM_CONTEXTMENU:
EDIT_WM_ContextMenu(es, (short)LOWORD(lParam), (short)HIWORD(lParam)); EDIT_WM_ContextMenu(es, (short)LOWORD(lParam), (short)HIWORD(lParam));
break; break;