Piotr Caban : user32: Select text control content while setting dialog focus.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Feb 18 10:14:56 CST 2016
Module: wine
Branch: master
Commit: 73ee2a8b4f7d13701c756721b2b9b92b4ddabd0d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=73ee2a8b4f7d13701c756721b2b9b92b4ddabd0d
Author: Piotr Caban <piotr at codeweavers.com>
Date: Tue Feb 16 14:49:10 2016 +0100
user32: Select text control content while setting dialog focus.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/user32/dialog.c | 4 ++++
dlls/user32/tests/dialog.c | 31 ++++++++++++++++++++++++++++++-
dlls/user32/tests/resource.rc | 8 ++++++++
3 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/dlls/user32/dialog.c b/dlls/user32/dialog.c
index 8340850..e841152 100644
--- a/dlls/user32/dialog.c
+++ b/dlls/user32/dialog.c
@@ -707,7 +707,11 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate,
focus = GetNextDlgTabItem( hwnd, 0, FALSE );
if (!focus) focus = GetNextDlgGroupItem( hwnd, 0, FALSE );
if (focus)
+ {
+ if (SendMessageW( focus, WM_GETDLGCODE, 0, 0 ) & DLGC_HASSETSEL)
+ SendMessageW( focus, EM_SETSEL, 0, MAXLONG );
SetFocus( focus );
+ }
}
}
diff --git a/dlls/user32/tests/dialog.c b/dlls/user32/tests/dialog.c
index eede834..a6cd1be 100644
--- a/dlls/user32/tests/dialog.c
+++ b/dlls/user32/tests/dialog.c
@@ -786,7 +786,8 @@ static INT_PTR CALLBACK focusDlgWinProc (HWND hDlg, UINT uiMsg, WPARAM wParam,
switch (uiMsg)
{
case WM_INITDIALOG:
- return TRUE;
+ SetWindowTextA(GetDlgItem(hDlg, 200), "new caption");
+ return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == 200)
@@ -958,6 +959,34 @@ static void test_focus(void)
DestroyWindow(hDlg);
}
+
+ /* Test 5:
+ * Select textbox's text on creation */
+ {
+ HWND hDlg;
+ HRSRC hResource;
+ HANDLE hTemplate;
+ DLGTEMPLATE* pTemplate;
+ HWND edit;
+ DWORD selectionStart = 0xdead, selectionEnd = 0xbeef;
+
+ hResource = FindResourceA(g_hinst,"FOCUS_TEST_DIALOG_3", (LPCSTR)RT_DIALOG);
+ hTemplate = LoadResource(g_hinst, hResource);
+ pTemplate = LockResource(hTemplate);
+
+ hDlg = CreateDialogIndirectParamA(g_hinst, pTemplate, NULL, focusDlgWinProc, 0);
+ ok(hDlg != 0, "Failed to create test dialog.\n");
+ edit = GetDlgItem(hDlg, 200);
+
+ ok(GetFocus() == edit, "Focus not set to edit, focus=%p, dialog=%p, edit=%p\n",
+ GetFocus(), hDlg, edit);
+ SendMessageA(edit, EM_GETSEL, (WPARAM)&selectionStart, (LPARAM)&selectionEnd);
+ ok(selectionStart == 0 && selectionEnd == 11,
+ "Text selection after WM_SETFOCUS is [%i, %i) expected [0, 11)\n",
+ selectionStart, selectionEnd);
+
+ DestroyWindow(hDlg);
+ }
}
static void test_GetDlgItemText(void)
diff --git a/dlls/user32/tests/resource.rc b/dlls/user32/tests/resource.rc
index be47038..fdef5a9 100644
--- a/dlls/user32/tests/resource.rc
+++ b/dlls/user32/tests/resource.rc
@@ -107,6 +107,14 @@ FONT 8, "MS Shell Dlg"
LTEXT "Hello world", 200,4,4,50,14
}
+FOCUS_TEST_DIALOG_3 DIALOG 0, 0, 60, 30
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Test dialog"
+FONT 8, "MS Shell Dlg"
+{
+ EDITTEXT 200,4,4,50,14
+}
+
IDD_DIALOG DIALOG 0, 0, 186, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
More information about the wine-cvs
mailing list