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-patches
mailing list