Alexandre Julliard : winex11: Pass a window handle for keyboard hardware messages too.

Alexandre Julliard julliard at winehq.org
Tue Mar 1 11:07:14 CST 2011


Module: wine
Branch: master
Commit: 8f88d4fe78827f40728f05be2738b40d784bba65
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8f88d4fe78827f40728f05be2738b40d784bba65

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Mar  1 11:50:29 2011 +0100

winex11: Pass a window handle for keyboard hardware messages too.

---

 dlls/winex11.drv/event.c    |    2 +-
 dlls/winex11.drv/keyboard.c |   24 ++++++++++++------------
 dlls/winex11.drv/x11drv.h   |    2 +-
 3 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
index 8a69ecb..0a3977d 100644
--- a/dlls/winex11.drv/event.c
+++ b/dlls/winex11.drv/event.c
@@ -1568,7 +1568,7 @@ UINT CDECL X11DRV_SendInput( UINT count, LPINPUT inputs, int size )
                                      inputs->u.mi.dwExtraInfo, LLMHF_INJECTED );
             break;
         case INPUT_KEYBOARD:
-            X11DRV_send_keyboard_input( inputs->u.ki.wVk, inputs->u.ki.wScan, inputs->u.ki.dwFlags,
+            X11DRV_send_keyboard_input( 0, inputs->u.ki.wVk, inputs->u.ki.wScan, inputs->u.ki.dwFlags,
                                         inputs->u.ki.time, inputs->u.ki.dwExtraInfo, LLKHF_INJECTED );
             break;
         case INPUT_HARDWARE:
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
index 901cd71..d8ab4d2 100644
--- a/dlls/winex11.drv/keyboard.c
+++ b/dlls/winex11.drv/keyboard.c
@@ -1150,7 +1150,7 @@ static WORD EVENT_event_to_vkey( XIC xic, XKeyEvent *e)
 /***********************************************************************
  *           X11DRV_send_keyboard_input
  */
-void X11DRV_send_keyboard_input( WORD wVk, WORD wScan, DWORD event_flags, DWORD time,
+void X11DRV_send_keyboard_input( HWND hwnd, WORD wVk, WORD wScan, DWORD event_flags, DWORD time,
                                  DWORD dwExtraInfo, UINT injected_flags )
 {
     UINT message;
@@ -1268,7 +1268,7 @@ void X11DRV_send_keyboard_input( WORD wVk, WORD wScan, DWORD event_flags, DWORD
     SERVER_START_REQ( send_hardware_message )
     {
         req->id       = (injected_flags & LLKHF_INJECTED) ? 0 : GetCurrentThreadId();
-        req->win      = 0;
+        req->win      = wine_server_user_handle( hwnd );
         req->msg      = message;
         req->wparam   = wVk;
         req->lparam   = lParam;
@@ -1286,7 +1286,7 @@ void X11DRV_send_keyboard_input( WORD wVk, WORD wScan, DWORD event_flags, DWORD
  * Updates internal state for <vkey>, depending on key <state> under X
  *
  */
-static inline void KEYBOARD_UpdateOneState ( WORD vkey, WORD scan, int state, DWORD time )
+static inline void KEYBOARD_UpdateOneState ( HWND hwnd, WORD vkey, WORD scan, int state, DWORD time )
 {
     /* Do something if internal table state != X state for keycode */
     if (((key_state_table[vkey & 0xff] & 0x80)!=0) != state)
@@ -1299,7 +1299,7 @@ static inline void KEYBOARD_UpdateOneState ( WORD vkey, WORD scan, int state, DW
               vkey, key_state_table[vkey & 0xff]);
 
         /* Fake key being pressed inside wine */
-        X11DRV_send_keyboard_input( vkey & 0xff, scan & 0xff, flags, time, 0, 0 );
+        X11DRV_send_keyboard_input( hwnd, vkey & 0xff, scan & 0xff, flags, time, 0, 0 );
 
         TRACE("State after %#.2x\n", key_state_table[vkey & 0xff]);
     }
@@ -1338,21 +1338,21 @@ void X11DRV_KeymapNotify( HWND hwnd, XEvent *event )
             case VK_RCONTROL:
             case VK_LSHIFT:
             case VK_RSHIFT:
-                KEYBOARD_UpdateOneState( vkey, scan, state, time );
+                KEYBOARD_UpdateOneState( hwnd, vkey, scan, state, time );
                 break;
             }
         }
     }
 }
 
-static void update_lock_state(BYTE vkey, WORD scan, DWORD time)
+static void update_lock_state(HWND hwnd, BYTE vkey, WORD scan, DWORD time)
 {
     DWORD flags = vkey == VK_NUMLOCK ? KEYEVENTF_EXTENDEDKEY : 0;
 
     if (key_state_table[vkey] & 0x80) flags ^= KEYEVENTF_KEYUP;
 
-    X11DRV_send_keyboard_input( vkey, scan, flags, time, 0, 0 );
-    X11DRV_send_keyboard_input( vkey, scan, flags ^ KEYEVENTF_KEYUP, time, 0, 0 );
+    X11DRV_send_keyboard_input( hwnd, vkey, scan, flags, time, 0, 0 );
+    X11DRV_send_keyboard_input( hwnd, vkey, scan, flags ^ KEYEVENTF_KEYUP, time, 0, 0 );
 }
 
 /***********************************************************************
@@ -1461,7 +1461,7 @@ void X11DRV_KeyEvent( HWND hwnd, XEvent *xev )
         vkey != VK_CAPITAL)
     {
         TRACE("Adjusting CapsLock state (%#.2x)\n", key_state_table[VK_CAPITAL]);
-        update_lock_state(VK_CAPITAL, 0x3A, event_time);
+        update_lock_state( hwnd, VK_CAPITAL, 0x3A, event_time );
     }
 
     /* Adjust the NUMLOCK state if it has been changed outside wine */
@@ -1469,7 +1469,7 @@ void X11DRV_KeyEvent( HWND hwnd, XEvent *xev )
         (vkey & 0xff) != VK_NUMLOCK)
     {
         TRACE("Adjusting NumLock state (%#.2x)\n", key_state_table[VK_NUMLOCK]);
-        update_lock_state(VK_NUMLOCK, 0x45, event_time);
+        update_lock_state( hwnd, VK_NUMLOCK, 0x45, event_time );
     }
 
     /* Adjust the SCROLLLOCK state if it has been changed outside wine */
@@ -1477,13 +1477,13 @@ void X11DRV_KeyEvent( HWND hwnd, XEvent *xev )
         vkey != VK_SCROLL)
     {
         TRACE("Adjusting ScrLock state (%#.2x)\n", key_state_table[VK_SCROLL]);
-        update_lock_state(VK_SCROLL, 0x46, event_time);
+        update_lock_state( hwnd, VK_SCROLL, 0x46, event_time );
     }
 
     bScan = keyc2scan[event->keycode] & 0xFF;
     TRACE_(key)("bScan = 0x%02x.\n", bScan);
 
-    X11DRV_send_keyboard_input( vkey & 0xff, bScan, dwFlags, event_time, 0, 0 );
+    X11DRV_send_keyboard_input( hwnd, vkey & 0xff, bScan, dwFlags, event_time, 0, 0 );
 }
 
 /**********************************************************************
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 6166755..0728f87 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -804,7 +804,7 @@ extern void set_window_cursor( struct x11drv_win_data *data, HCURSOR handle );
 extern void sync_window_cursor( struct x11drv_win_data *data );
 extern BOOL CDECL X11DRV_ClipCursor( LPCRECT clip );
 extern void X11DRV_InitKeyboard( Display *display );
-extern void X11DRV_send_keyboard_input( WORD wVk, WORD wScan, DWORD dwFlags, DWORD time,
+extern void X11DRV_send_keyboard_input( HWND hwnd, WORD wVk, WORD wScan, DWORD dwFlags, DWORD time,
                                         DWORD dwExtraInfo, UINT injected_flags );
 extern void X11DRV_send_mouse_input( HWND hwnd, DWORD flags, DWORD x, DWORD y,
                                      DWORD data, DWORD time, DWORD extra_info, UINT injected_flags );




More information about the wine-cvs mailing list