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:
parent
a8cb9d69ff
commit
f5411971c7
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue