if roster is in vd1, and we are in vd2 and we click systray, move roster from vd1 to vd2

This commit is contained in:
Nikos Kouremenos 2005-10-31 18:06:36 +00:00
parent a8cb9d69ff
commit f5411971c7
2 changed files with 38 additions and 2 deletions

View File

@ -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

View File

@ -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: