Dmitry Timoshkov : winex11.drv: On KeymapNotify event also sychronize WinKey state.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Jul 14 09:42:25 CDT 2015
Module: wine
Branch: master
Commit: a02c3ae7591f463a656d8189dd02c3e640c9d0f2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a02c3ae7591f463a656d8189dd02c3e640c9d0f2
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Mon Jul 13 14:39:25 2015 +0800
winex11.drv: On KeymapNotify event also sychronize WinKey state.
---
dlls/winex11.drv/keyboard.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
index b0f5b95..bd24961 100644
--- a/dlls/winex11.drv/keyboard.c
+++ b/dlls/winex11.drv/keyboard.c
@@ -1233,6 +1233,7 @@ void X11DRV_KeymapNotify( HWND hwnd, XEvent *event )
WORD vkey;
BOOL pressed;
} modifiers[6]; /* VK_LSHIFT through VK_RMENU are contiguous */
+ BOOL lwin_pressed = FALSE, rwin_pressed = FALSE;
if (!get_async_key_state( keystate )) return;
@@ -1264,6 +1265,12 @@ void X11DRV_KeymapNotify( HWND hwnd, XEvent *event )
if (!modifiers[m].vkey) modifiers[m].vkey = vkey;
if (event->xkeymap.key_vector[i] & (1<<j)) modifiers[m].pressed = TRUE;
break;
+ case VK_LWIN:
+ if (event->xkeymap.key_vector[i] & (1<<j)) lwin_pressed = TRUE;
+ break;
+ case VK_RWIN:
+ if (event->xkeymap.key_vector[i] & (1<<j)) rwin_pressed = TRUE;
+ break;
}
}
}
@@ -1281,12 +1288,27 @@ void X11DRV_KeymapNotify( HWND hwnd, XEvent *event )
}
}
+ if (!(keystate[VK_LWIN] & 0x80) != !lwin_pressed)
+ {
+ TRACE( "Adjusting state for VK_LWIN. State before %#.2x\n", keystate[VK_LWIN]);
+ update_key_state( keystate, VK_LWIN, lwin_pressed );
+ changed = TRUE;
+ }
+ if (!(keystate[VK_RWIN] & 0x80) != !rwin_pressed)
+ {
+ TRACE( "Adjusting state for VK_RWIN. State before %#.2x\n", keystate[VK_RWIN]);
+ update_key_state( keystate, VK_RWIN, rwin_pressed );
+ changed = TRUE;
+ }
+
LeaveCriticalSection( &kbd_section );
if (!changed) return;
update_key_state( keystate, VK_CONTROL, (keystate[VK_LCONTROL] | keystate[VK_RCONTROL]) & 0x80 );
update_key_state( keystate, VK_MENU, (keystate[VK_LMENU] | keystate[VK_RMENU]) & 0x80 );
update_key_state( keystate, VK_SHIFT, (keystate[VK_LSHIFT] | keystate[VK_RSHIFT]) & 0x80 );
+ update_key_state( keystate, VK_LWIN, keystate[VK_LWIN] & 0x80 );
+ update_key_state( keystate, VK_RWIN, keystate[VK_RWIN] & 0x80 );
set_async_key_state( keystate );
}
More information about the wine-cvs
mailing list