user32: edit: Use a dialog mode after receiving WM_GETDLGCODE message.
Tests show that the edit control uses a dialog mode after receiving
WM_GETDLGCODE message and it doesn't depend on whether the edit control
has a parent window.
diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c
index eadcc3d..0cb8f11 100644
--- a/dlls/user32/edit.c
+++ b/dlls/user32/edit.c
@@ -83,6 +83,8 @@
#define EF_USE_SOFTBRK 0x0100 /* Enable soft breaks in text. */
#define EF_APP_HAS_HANDLE 0x0200 /* Set when an app sends EM_[G|S]ETHANDLE. We are in sole control of
the text buffer if this is clear. */
+#define EF_DIALOGMODE 0x0400 /* Indicates that we are inside a dialog window */
+
typedef enum
{
END_0 = 0, /* line ends with terminating '\0' character */
@@ -3163,22 +3165,9 @@
* controls without ES_WANTRETURN would attempt to detect whether it is inside
* a dialog box or not.
*/
-static BOOL EDIT_IsInsideDialog(EDITSTATE *es)
+static inline BOOL EDIT_IsInsideDialog(EDITSTATE *es)
{
- WND *pParent;
- BOOL r = FALSE;
-
- if (es->hwndParent)
- {
- pParent = WIN_GetPtr(es->hwndParent);
- if (pParent && pParent != WND_OTHER_PROCESS && pParent != WND_DESKTOP)
- {
- if (pParent->flags & WIN_ISDIALOG)
- r = TRUE;
- WIN_ReleasePtr(pParent);
- }
- }
- return r;
+ return (es->flags & EF_DIALOGMODE);
}
@@ -5107,27 +5096,32 @@
if (es->style & ES_MULTILINE)
result |= DLGC_WANTALLKEYS;
- if (lParam && (((LPMSG)lParam)->message == WM_KEYDOWN))
- {
- int vk = (int)((LPMSG)lParam)->wParam;
+ if (lParam)
+ {
+ es->flags|=EF_DIALOGMODE;
- if (es->hwndListBox)
- {
- if (vk == VK_RETURN || vk == VK_ESCAPE)
- if (SendMessageW(GetParent(hwnd), CB_GETDROPPEDSTATE, 0, 0))
- result |= DLGC_WANTMESSAGE;
- }
- else
- {
- switch (vk)
- {
- case VK_ESCAPE:
- SendMessageW(GetParent(hwnd), WM_CLOSE, 0, 0);
- break;
- default:
- break;
- }
- }
+ if (((LPMSG)lParam)->message == WM_KEYDOWN)
+ {
+ int vk = (int)((LPMSG)lParam)->wParam;
+
+ if (es->hwndListBox)
+ {
+ if (vk == VK_RETURN || vk == VK_ESCAPE)
+ if (SendMessageW(GetParent(hwnd), CB_GETDROPPEDSTATE, 0, 0))
+ result |= DLGC_WANTMESSAGE;
+ }
+ else
+ {
+ switch (vk)
+ {
+ case VK_ESCAPE:
+ SendMessageW(GetParent(hwnd), WM_CLOSE, 0, 0);
+ break;
+ default:
+ break;
+ }
+ }
+ }
}
break;