Alexandre Julliard : user32: Store the prev_unicode hook flag on the client side.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Oct 5 13:06:04 CDT 2006


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Oct  5 14:04:25 2006 +0200

user32: Store the prev_unicode hook flag on the client side.

---

 dlls/user/hook.c               |    7 +++++--
 dlls/user/user_private.h       |   28 +++++++++++++++-------------
 include/wine/server_protocol.h |    5 ++---
 server/hook.c                  |    3 +--
 server/protocol.def            |    3 +--
 server/trace.c                 |    3 +--
 6 files changed, 25 insertions(+), 24 deletions(-)

diff --git a/dlls/user/hook.c b/dlls/user/hook.c
index 4ba1d82..b8996aa 100644
--- a/dlls/user/hook.c
+++ b/dlls/user/hook.c
@@ -359,11 +359,14 @@ static LRESULT call_hook( struct hook_in
         {
             struct user_thread_info *thread_info = get_user_thread_info();
             HHOOK prev = thread_info->hook;
+            BOOL prev_unicode = thread_info->hook_unicode;
 
             thread_info->hook = info->handle;
+            thread_info->hook_unicode = info->next_unicode;
             ret = call_hook_proc( (HOOKPROC)info->proc, info->id, code, wparam, lparam,
                                   info->prev_unicode, info->next_unicode );
             thread_info->hook = prev;
+            thread_info->hook_unicode = prev_unicode;
         }
     }
     return ret;
@@ -537,12 +540,12 @@ LRESULT WINAPI CallNextHookEx( HHOOK hho
             info.pid          = reply->pid;
             info.tid          = reply->tid;
             info.proc         = reply->proc;
-            info.prev_unicode = reply->prev_unicode;
-            info.next_unicode = reply->next_unicode;
+            info.next_unicode = reply->unicode;
         }
     }
     SERVER_END_REQ;
 
+    info.prev_unicode = thread_info->hook_unicode;
     return call_hook( &info, code, wparam, lparam );
 }
 
diff --git a/dlls/user/user_private.h b/dlls/user/user_private.h
index 00e9b45..332e8f0 100644
--- a/dlls/user/user_private.h
+++ b/dlls/user/user_private.h
@@ -167,19 +167,21 @@ struct hook16_queue_info;
 /* no attempt is made to keep the layout compatible with the Windows one */
 struct user_thread_info
 {
-    HANDLE                        server_queue;           /* 00 Handle to server-side queue */
-    DWORD                         recursion_count;        /* 04 SendMessage recursion counter */
-    HHOOK                         hook;                   /* 08 Current hook */
-    struct received_message_info *receive_info;           /* 0c Message being currently received */
-    struct hook16_queue_info     *hook16_info;            /* 10 Opaque pointer for 16-bit hook support */
-    DWORD                         GetMessageTimeVal;      /* 14 Value for GetMessageTime */
-    DWORD                         GetMessagePosVal;       /* 18 Value for GetMessagePos */
-    ULONG_PTR                     GetMessageExtraInfoVal; /* 1c Value for GetMessageExtraInfo */
-    HCURSOR                       cursor;                 /* 20 Current cursor */
-    INT                           cursor_count;           /* 24 Cursor show count */
-    UINT                          active_hooks;           /* 28 Bitmap of active hooks */
-    HWND                          desktop;                /* 2c Desktop window */
-                                                          /* 30-7c Available for more data */
+    HANDLE                        server_queue;           /* Handle to server-side queue */
+    DWORD                         recursion_count;        /* SendMessage recursion counter */
+    BOOL                          hook_unicode;           /* Is current hook unicode? */
+    HHOOK                         hook;                   /* Current hook */
+    struct received_message_info *receive_info;           /* Message being currently received */
+    struct hook16_queue_info     *hook16_info;            /* Opaque pointer for 16-bit hook support */
+    DWORD                         GetMessageTimeVal;      /* Value for GetMessageTime */
+    DWORD                         GetMessagePosVal;       /* Value for GetMessagePos */
+    ULONG_PTR                     GetMessageExtraInfoVal; /* Value for GetMessageExtraInfo */
+    HCURSOR                       cursor;                 /* Current cursor */
+    INT                           cursor_count;           /* Cursor show count */
+    UINT                          active_hooks;           /* Bitmap of active hooks */
+    HWND                          desktop;                /* Desktop window */
+
+    ULONG                         pad[11];                /* Available for more data */
 };
 
 static inline struct user_thread_info *get_user_thread_info(void)
diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h
index f88f416..84ad984 100644
--- a/include/wine/server_protocol.h
+++ b/include/wine/server_protocol.h
@@ -3392,8 +3392,7 @@ struct get_next_hook_reply
     process_id_t   pid;
     thread_id_t    tid;
     void*          proc;
-    int            prev_unicode;
-    int            next_unicode;
+    int            unicode;
     /* VARARG(module,unicode_str); */
 };
 
@@ -4426,6 +4425,6 @@ union generic_reply
     struct query_symlink_reply query_symlink_reply;
 };
 
-#define SERVER_PROTOCOL_VERSION 252
+#define SERVER_PROTOCOL_VERSION 253
 
 #endif /* __WINE_WINE_SERVER_PROTOCOL_H */
diff --git a/server/hook.c b/server/hook.c
index b2cb0b8..14ad968 100644
--- a/server/hook.c
+++ b/server/hook.c
@@ -551,8 +551,7 @@ DECL_HANDLER(get_next_hook)
     {
         reply->next = next->handle;
         reply->id   = next->index + WH_MINHOOK;
-        reply->prev_unicode = hook->unicode;
-        reply->next_unicode = next->unicode;
+        reply->unicode = next->unicode;
         if (next->module) set_reply_data( next->module, next->module_size );
         if (run_hook_in_owner_thread( next ))
         {
diff --git a/server/protocol.def b/server/protocol.def
index 7934e48..583c757 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -2382,8 +2382,7 @@ #define SET_CARET_STATE      0x04  /* se
     process_id_t   pid;            /* process id for low-level keyboard/mouse hooks */
     thread_id_t    tid;            /* thread id for low-level keyboard/mouse hooks */
     void*          proc;           /* next hook procedure */
-    int            prev_unicode;   /* was the previous a unicode hook? */
-    int            next_unicode;   /* is the next a unicode hook? */
+    int            unicode;        /* is it a unicode hook? */
     VARARG(module,unicode_str);    /* module name */
 @END
 
diff --git a/server/trace.c b/server/trace.c
index f6aafcb..2c5b3e0 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -2967,8 +2967,7 @@ static void dump_get_next_hook_reply( co
     fprintf( stderr, " pid=%04x,", req->pid );
     fprintf( stderr, " tid=%04x,", req->tid );
     fprintf( stderr, " proc=%p,", req->proc );
-    fprintf( stderr, " prev_unicode=%d,", req->prev_unicode );
-    fprintf( stderr, " next_unicode=%d,", req->next_unicode );
+    fprintf( stderr, " unicode=%d,", req->unicode );
     fprintf( stderr, " module=" );
     dump_varargs_unicode_str( cur_size );
 }




More information about the wine-cvs mailing list