Alexandre Julliard : winex11: Re-dock icons when the system tray owner has changed.

Alexandre Julliard julliard at winehq.org
Tue Nov 2 11:10:53 CDT 2010


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Nov  1 19:57:12 2010 +0100

winex11: Re-dock icons when the system tray owner has changed.

---

 dlls/winex11.drv/event.c       |   12 ++++++++++++
 dlls/winex11.drv/systray.c     |   15 ++++++++++++++-
 dlls/winex11.drv/x11drv.h      |    3 +++
 dlls/winex11.drv/x11drv_main.c |    1 +
 4 files changed, 30 insertions(+), 1 deletions(-)

diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
index 89d3a93..662b068 100644
--- a/dlls/winex11.drv/event.c
+++ b/dlls/winex11.drv/event.c
@@ -513,6 +513,17 @@ static void set_focus( Display *display, HWND hwnd, Time time )
 
 
 /**********************************************************************
+ *              handle_manager_message
+ */
+static void handle_manager_message( HWND hwnd, XClientMessageEvent *event )
+{
+    if (hwnd != GetDesktopWindow()) return;
+    if (systray_atom && event->data.l[1] == systray_atom)
+        change_systray_owner( event->display, event->data.l[2] );
+}
+
+
+/**********************************************************************
  *              handle_wm_protocols
  */
 static void handle_wm_protocols( HWND hwnd, XClientMessageEvent *event )
@@ -1428,6 +1439,7 @@ struct client_message_handler
 
 static const struct client_message_handler client_messages[] =
 {
+    { XATOM_MANAGER,      handle_manager_message },
     { XATOM_WM_PROTOCOLS, handle_wm_protocols },
     { XATOM__XEMBED,      handle_xembed_protocol },
     { XATOM_DndProtocol,  handle_dnd_protocol },
diff --git a/dlls/winex11.drv/systray.c b/dlls/winex11.drv/systray.c
index 9d15396..fbbe8c2 100644
--- a/dlls/winex11.drv/systray.c
+++ b/dlls/winex11.drv/systray.c
@@ -73,7 +73,7 @@ static BOOL delete_icon( struct tray_icon *icon );
 #define SYSTEM_TRAY_BEGIN_MESSAGE   1
 #define SYSTEM_TRAY_CANCEL_MESSAGE  2
 
-static Atom systray_atom;
+Atom systray_atom = 0;
 
 #define MIN_DISPLAYED 8
 #define ICON_BORDER 2
@@ -427,6 +427,19 @@ static void dock_systray_icon( Display *display, struct tray_icon *icon, Window
     wine_tsx11_unlock();
 }
 
+/* dock systray windows again with the new owner */
+void change_systray_owner( Display *display, Window systray_window )
+{
+    struct tray_icon *icon;
+
+    ERR( "new owner %lx\n", systray_window );
+    LIST_FOR_EACH_ENTRY( icon, &icon_list, struct tray_icon, entry )
+    {
+        if (icon->display == -1) continue;
+        hide_icon( icon );
+        dock_systray_icon( display, icon, systray_window );
+    }
+}
 
 /* hide a tray icon */
 static BOOL hide_icon( struct tray_icon *icon )
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 4308823..d6fdbf0 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -619,6 +619,7 @@ enum x11drv_atoms
     XATOM_CLIPBOARD = FIRST_XATOM,
     XATOM_COMPOUND_TEXT,
     XATOM_INCR,
+    XATOM_MANAGER,
     XATOM_MULTIPLE,
     XATOM_SELECTION_DATA,
     XATOM_TARGETS,
@@ -691,6 +692,7 @@ enum x11drv_atoms
 };
 
 extern Atom X11DRV_Atoms[NB_XATOMS - FIRST_XATOM];
+extern Atom systray_atom;
 
 #define x11drv_atom(name) (X11DRV_Atoms[XATOM_##name - FIRST_XATOM])
 
@@ -780,6 +782,7 @@ extern void wait_for_withdrawn_state( Display *display, struct x11drv_win_data *
 extern void update_user_time( Time time );
 extern void update_net_wm_states( Display *display, struct x11drv_win_data *data );
 extern void make_window_embedded( Display *display, struct x11drv_win_data *data );
+extern void change_systray_owner( Display *display, Window systray_window );
 
 static inline void mirror_rect( const RECT *window_rect, RECT *rect )
 {
diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c
index fe4a88c..0d1a7da 100644
--- a/dlls/winex11.drv/x11drv_main.c
+++ b/dlls/winex11.drv/x11drv_main.c
@@ -119,6 +119,7 @@ static const char * const atom_names[NB_XATOMS - FIRST_XATOM] =
     "CLIPBOARD",
     "COMPOUND_TEXT",
     "INCR",
+    "MANAGER",
     "MULTIPLE",
     "SELECTION_DATA",
     "TARGETS",




More information about the wine-cvs mailing list