From f5411971c71d7199713fa0fb67ca1a2b03d2c04b Mon Sep 17 00:00:00 2001 From: Nikos Kouremenos Date: Mon, 31 Oct 2005 18:06:36 +0000 Subject: [PATCH] if roster is in vd1, and we are in vd2 and we click systray, move roster from vd1 to vd2 --- src/gtkgui_helpers.py | 13 +++++++++++++ src/systray.py | 27 +++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/gtkgui_helpers.py b/src/gtkgui_helpers.py index 047e6e5ed..1f2973b2a 100644 --- a/src/gtkgui_helpers.py +++ b/src/gtkgui_helpers.py @@ -301,3 +301,16 @@ def get_invisible_cursor(): color = gtk.gdk.Color() cursor = gtk.gdk.Cursor(pixmap, pixmap, color, color, 0, 0) return cursor + +def get_current_desktop(window): + '''returns the current virtual desktop for given window + NOTE: window is GDK window''' + prop = window.property_get('_NET_CURRENT_DESKTOP') + if prop is None: # it means it's normal window (not root window) + # so we look for it's current virtual desktop in another property + prop = window.property_get('_NET_WM_DESKTOP') + + if prop is not None: + # f.e. prop is ('CARDINAL', 32, [0]) we want 0 or 1.. from [0] + current_virtual_desktop_no = prop[2][0] + return current_virtual_desktop_no diff --git a/src/systray.py b/src/systray.py index b9cb2c509..616313fb7 100644 --- a/src/systray.py +++ b/src/systray.py @@ -25,6 +25,7 @@ import dialogs import os import tooltips +import gtkgui_helpers from gajim import Contact from common import gajim @@ -261,8 +262,30 @@ class Systray: def on_left_click(self): win = gajim.interface.roster.window if len(self.jids) == 0: - if win.get_property('visible'): - win.hide() + # no pending events, so toggle visible/hidden for roster window + if win.get_property('visible'): # visible in ANY virtual desktop? + win.hide() # we hide it from VD that was visible in + # but we could be in another VD right now. eg vd2 + # and we want not only to hide it in vd1 but also show it in vd2 + + if os.name != 'nt': + root_window = gtk.gdk.screen_get_default().get_root_window() + # current user's vd + current_virtual_desktop_no = gtkgui_helpers.get_current_desktop( + root_window) + + # vd roster window is in + window_virtual_desktop = gtkgui_helpers.get_current_desktop( + win.window) + + # if one of those is None, something went wrong and we cannot know + # VD info, just hide it (default action) and not show it afterwards + if None not in (window_virtual_desktop, current_virtual_desktop_no): + if current_virtual_desktop_no != window_virtual_desktop: + # we are in another VD that the window was + # so show it in current VD + win.show() + else: win.present() else: