edit - fix WantReturns (Win BUG)

Rein Klazes rklazes at xs4all.nl
Wed May 14 12:47:11 CDT 2003


On Sun, 11 May 2003 20:20:55 -0600, you wrote:

> It looks like Windows has an old BUG in Edit control when handling WM_GetDlgCode message.
> It always returns 0x8D no mater what the style and and properties of a window is.
> Interesting enough, Delphi relays on this behavior.
> 
> Vitaliy Margolen
> 
> changelog:
>   - controls/edit.c
>     fix problem with capturing [return] keys in multi-line edits
> 

Vitaliy, 

This is not right. A edit-listboxcombo, used in Newsbin to enter filter
expressions, gives this result in spy++:

| <00706> 0002022C P WM_KEYDOWN nVirtKey:VK_RETURN cRepeat:1 ScanCode:1C fExtended:0 fAltDown:0 fRepeat:0 fUp:0 [wParam:0000000D lParam:001C0001 time:14:25:17.823]
| <00707> 0002022C S WM_GETDLGCODE wParam:0000000D lParam:0012FD88
| <00708> 00020230 S .CB_GETDROPPEDSTATE wParam:00000000 lParam:00000000
| <00709> 00020230 R .CB_GETDROPPEDSTATE fDropped:False [lResult:00000000]
| <00710> 0002022C R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_HASSETSEL | DLGC_WANTCHARS [lResult:00000089]
| <00711> 0002022C S WM_GETDLGCODE wParam:00000000 lParam:00000000
| <00712> 0002022C R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_HASSETSEL | DLGC_WANTCHARS [lResult:00000089]

Needless to say this stopped working properly when updating with CVS:((

It is not the CB_GETDROPPEDMESSAGE but the return value that matters
here.

Attached I revert your patch for this special case. I  hope that it
still solves your problem and that you got the other cases right.

Changelog:
	controls/	: edit.c
	Revert the previous patch for capturing keys in an
	edit-listbox combo. 

Rein.
-- 
Rein Klazes
rklazes at xs4all.nl
-------------- next part --------------
--- wine/controls/edit.c	2003-05-13 08:03:58.000000000 +0200
+++ mywine/controls/edit.c	2003-05-14 19:39:50.000000000 +0200
@@ -744,10 +744,20 @@
          */
 
 	case WM_GETDLGCODE:
-               result = DLGC_HASSETSEL | DLGC_WANTCHARS | DLGC_WANTARROWS
-                         | DLGC_WANTMESSAGE;
-                /* Windows BUG! Windows always returns DLGC_WANTMESSAGE flag without additional checks. */
-                break;
+		result = DLGC_HASSETSEL | DLGC_WANTCHARS | DLGC_WANTARROWS;
+                if( es->hwndListBox )
+                {
+                    if (lParam && (((LPMSG)lParam)->message == WM_KEYDOWN))
+                    {
+                       int vk = (int)((LPMSG)lParam)->wParam;
+                       if( vk == VK_RETURN || vk == VK_ESCAPE)
+                           if( SendMessageW(GetParent(hwnd), CB_GETDROPPEDSTATE, 0, 0))
+                                result |= DLGC_WANTMESSAGE;
+                    }
+		} else
+                    /* It seems in all other cases Windows has this set: */
+                    result |= DLGC_WANTMESSAGE;
+		break;
 
         case WM_IME_CHAR:
             if (!unicode)


More information about the wine-devel mailing list