Re: SetFocus and DefPushButton management

2005-03-16 Thread Dimitrie O. Paun
On Wed, Mar 16, 2005 at 10:22:51AM +0100, Katia Maculan wrote:
 +   SendMessageA (dlgInfo-hwndFocus, BM_SETSTYLE, 
 BS_DEFPUSHBUTTON, TRUE); 
  ^
Please use SendMessageW instead.

 +   /*Check for a previous defpushbutton*/
 +   if (dlgInfo-idResult)
 +   {
 +  hWndOldDefPushButton = GetDlgItem 
 (hwnd,dlgInfo-idResult);
 +  if (hWndOldDefPushButton  (hWndOldDefPushButton != 
 dlgInfo-hwndFocus))
 +  SendMessageA (hWndOldDefPushButton, BM_SETSTYLE, 
 BS_PUSHBUTTON, TRUE);
 
Ditto.


-- 
Dimi.



SetFocus and DefPushButton management

2005-03-16 Thread Katia Maculan
After the creation of a dialog if the focus is set on a PushButton this 
one must have also  the BS_DEFPUSHBUTTON style like in windows.
Attached the patch with a regression test.

Katia
--
Katia Maculan
Developer
ISIS Papyrus Italy Srl
Tel: (+39) 0125 6455400 Fax: (+39) 0125 6455400
E-mail: [EMAIL PROTECTED]
Info: [EMAIL PROTECTED]
Hotline: +43-2236-27551-111
Visit our Website: http://www.isis-papyrus.com
diff -urN oldwinedir/dlls/user/tests/dialog.c 
newwinedir/dlls/user/tests/dialog.c
--- oldwinedir/dlls/user/tests/dialog.c 2005-03-07 12:12:40.0 +0100
+++ newwinedir/dlls/user/tests/dialog.c 2005-03-14 16:33:03.0 +0100
@@ -849,6 +849,40 @@
 }
 }
 
+static LRESULT CALLBACK DlgFocusProc (HWND hDlg, UINT message, WPARAM wParam, 
LPARAM lParam)
+{
+   HWND hwndFocusCtrl = NULL;
+   HWND hwndDefPushButton = NULL;
+   LRESULT DlgCode;
+   LRESULT CtrlState;
+   switch (message)
+   {
+   case WM_INITDIALOG:
+   PostMessage(hDlg, WM_USER, 0, 0);
+   return TRUE;
+
+   case WM_USER:
+  // Check if the focus is on IDOK button
+  CtrlState = SendMessage (GetDlgItem(hDlg, IDOK), BM_GETSTATE, 0, 0);
+  if (CtrlState == BST_FOCUS)
+   hwndFocusCtrl = GetDlgItem(hDlg, IDOK);
+  // Check if IDOK is the default push button
+   DlgCode = SendMessage (GetDlgItem(hDlg, IDOK), WM_GETDLGCODE, 0, 0);
+  if (DlgCode  DLGC_DEFPUSHBUTTON)
+   hwndDefPushButton = GetDlgItem(hDlg, IDOK);
+   ok (hwndFocusCtrl  hwndDefPushButton, The focus and the 
DLGC_DEFPUSHBUTTON style are not in the same button\n);
+   EndDialog(hDlg, LOWORD(wParam));
+   return TRUE;
+   }
+   return FALSE;
+
+}
+
+static void InitialFocusTest1 (void)
+{
+DialogBox(g_hinst, DEFPUSHBUTTON_TEST_DIALOG, NULL, 
(DLGPROC)DlgFocusProc);
+
+}
 
 START_TEST(dialog)
 {
@@ -860,4 +894,5 @@
 IsDialogMessageWTest();
 WM_NEXTDLGCTLTest();
 InitialFocusTest();
+InitialFocusTest1();
 }
diff -urN oldwinedir/windows/dialog.c newwinedir/windows/dialog.c
--- oldwinedir/windows/dialog.c 2005-03-07 12:12:54.0 +0100
+++ newwinedir/windows/dialog.c 2005-03-14 16:30:19.0 +0100
@@ -669,8 +669,23 @@
 {
 /* By returning TRUE, app has requested a default focus assignment 
*/
 dlgInfo-hwndFocus = GetNextDlgTabItem( hwnd, 0, FALSE);
-if( dlgInfo-hwndFocus )
-SetFocus( dlgInfo-hwndFocus );
+if (dlgInfo-hwndFocus)
+{
+   SetFocus( dlgInfo-hwndFocus );
+   HWND hWndOldDefPushButton = NULL;
+   if (SendMessageW(dlgInfo-hwndFocus, WM_GETDLGCODE, 0, 0) 
+ (DLGC_UNDEFPUSHBUTTON | DLGC_BUTTON))
+   {
+   SendMessageA (dlgInfo-hwndFocus, BM_SETSTYLE, 
BS_DEFPUSHBUTTON, TRUE); 
+   /*Check for a previous defpushbutton*/
+   if (dlgInfo-idResult)
+   {
+  hWndOldDefPushButton = GetDlgItem 
(hwnd,dlgInfo-idResult);
+  if (hWndOldDefPushButton  (hWndOldDefPushButton != 
dlgInfo-hwndFocus))
+  SendMessageA (hWndOldDefPushButton, BM_SETSTYLE, 
BS_PUSHBUTTON, TRUE); 
+   }
+}
+}
 }
 
if (template.style  WS_VISIBLE  !(GetWindowLongW( hwnd, GWL_STYLE ) 
 WS_VISIBLE))


Re: SetFocus and DefPushButton management

2005-03-16 Thread Jakob Eriksson
Send it to wine-patches if you want it merged in CVS.

Katia Maculan wrote:
After the creation of a dialog if the focus is set on a PushButton 
this one must have also  the BS_DEFPUSHBUTTON style like in windows.
Attached the patch with a regression test.

Katia

diff -urN oldwinedir/dlls/user/tests/dialog.c 
newwinedir/dlls/user/tests/dialog.c
--- oldwinedir/dlls/user/tests/dialog.c 2005-03-07 12:12:40.0 +0100
+++ newwinedir/dlls/user/tests/dialog.c 2005-03-14 16:33:03.0 +0100
@@ -849,6 +849,40 @@
}
}
+static LRESULT CALLBACK DlgFocusProc (HWND hDlg, UINT message, WPARAM wParam, 
LPARAM lParam)
+{
+   HWND hwndFocusCtrl = NULL;
+   HWND hwndDefPushButton = NULL;
+   LRESULT DlgCode;
+   LRESULT CtrlState;
+   switch (message)
+   {
+   case WM_INITDIALOG:
+   PostMessage(hDlg, WM_USER, 0, 0);
+   return TRUE;
+
+   case WM_USER:
+  // Check if the focus is on IDOK button
+  CtrlState = SendMessage (GetDlgItem(hDlg, IDOK), BM_GETSTATE, 0, 0);
+  if (CtrlState == BST_FOCUS)
+   hwndFocusCtrl = GetDlgItem(hDlg, IDOK);
+  // Check if IDOK is the default push button
+   DlgCode = SendMessage (GetDlgItem(hDlg, IDOK), WM_GETDLGCODE, 0, 0);
+  if (DlgCode  DLGC_DEFPUSHBUTTON)
+   hwndDefPushButton = GetDlgItem(hDlg, IDOK);
+   ok (hwndFocusCtrl  hwndDefPushButton, The focus and the 
DLGC_DEFPUSHBUTTON style are not in the same button\n);
+   EndDialog(hDlg, LOWORD(wParam));
+   return TRUE;
+   }
+   return FALSE;
+
+}
+
+static void InitialFocusTest1 (void)
+{
+DialogBox(g_hinst, DEFPUSHBUTTON_TEST_DIALOG, NULL, 
(DLGPROC)DlgFocusProc);
+
+}
START_TEST(dialog)
{
@@ -860,4 +894,5 @@
IsDialogMessageWTest();
WM_NEXTDLGCTLTest();
InitialFocusTest();
+InitialFocusTest1();
}
diff -urN oldwinedir/windows/dialog.c newwinedir/windows/dialog.c
--- oldwinedir/windows/dialog.c	2005-03-07 12:12:54.0 +0100
+++ newwinedir/windows/dialog.c	2005-03-14 16:30:19.0 +0100
@@ -669,8 +669,23 @@
{
/* By returning TRUE, app has requested a default focus assignment */
dlgInfo-hwndFocus = GetNextDlgTabItem( hwnd, 0, FALSE);
-if( dlgInfo-hwndFocus )
-SetFocus( dlgInfo-hwndFocus );
+if (dlgInfo-hwndFocus)
+{
+   SetFocus( dlgInfo-hwndFocus );
+   HWND hWndOldDefPushButton = NULL;
+   if (SendMessageW(dlgInfo-hwndFocus, WM_GETDLGCODE, 0, 0) 
+ (DLGC_UNDEFPUSHBUTTON | DLGC_BUTTON))
+   {
+   SendMessageA (dlgInfo-hwndFocus, BM_SETSTYLE, BS_DEFPUSHBUTTON, TRUE); 
+   /*Check for a previous defpushbutton*/
+   if (dlgInfo-idResult)
+   {
+  hWndOldDefPushButton = GetDlgItem (hwnd,dlgInfo-idResult);
+  if (hWndOldDefPushButton  (hWndOldDefPushButton != dlgInfo-hwndFocus))
+  SendMessageA (hWndOldDefPushButton, BM_SETSTYLE, BS_PUSHBUTTON, TRUE); 
+   }
+}
+}
}

	if (template.style  WS_VISIBLE  !(GetWindowLongW( hwnd, GWL_STYLE )  WS_VISIBLE))