diff --git a/src/gajim.py b/src/gajim.py index b6547a0c6..6bdb56455 100755 --- a/src/gajim.py +++ b/src/gajim.py @@ -1133,15 +1133,14 @@ class Interface: self.systray_enabled = False self.systray_capabilities = False - if False: #os.name == 'nt': - pass - #try: - # import systraywin32 - #except: # user doesn't have trayicon capabilities - # pass - #else: - # self.systray_capabilities = True - # self.systray = systraywin32.SystrayWin32(self) + if os.name == 'nt': + try: + import systraywin32 + except: # user doesn't have trayicon capabilities + pass + else: + self.systray_capabilities = True + self.systray = systraywin32.SystrayWin32(self) else: try: import egg.trayicon # use gnomepythonextras trayicon diff --git a/src/systraywin32.py b/src/systraywin32.py index de6a250f6..b0f438fff 100644 --- a/src/systraywin32.py +++ b/src/systraywin32.py @@ -8,6 +8,7 @@ ## ## code initially based on ## http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/334779 +## with some ideas/help from pysystray.sf.net ## ## Copyright (C) 2003-2005 Gajim Team ## @@ -52,8 +53,6 @@ class SystrayWINAPI: self._oldwndproc = win32gui.SetWindowLong(self._hwnd, win32con.GWL_WNDPROC, self._wndproc) - gtk_window.connect('unrealize', self.remove) - def add_notify_icon(self, menu, hicon=None, tooltip=None): """ Creates a notify icon for the gtk window. """ @@ -152,9 +151,7 @@ class NotifyIcon: def _get_nid(self): """ Function to initialise & retrieve the NOTIFYICONDATA Structure. """ - nid = (self._hwnd, self._id, self._flags, self._callbackmessage, - self._hicon) - nid = list(nid) + nid = [self._hwnd, self._id, self._flags, self._callbackmessage, self._hicon] if not hasattr(self, '_tip'): self._tip = '' nid.append(self._tip) @@ -172,7 +169,6 @@ class NotifyIcon: nid.append(self._infoflags) return tuple(nid) - def remove(self): """ Removes the tray icon. """ @@ -200,7 +196,7 @@ class NotifyIcon: def _redraw(self, *args): """ Redraws the tray icon. """ - self.remove + self.remove() win32gui.Shell_NotifyIcon(win32gui.NIM_ADD, self._get_nid()) @@ -216,7 +212,15 @@ class SystrayWin32(systray.Systray): self.tray_ico_imgs = self.load_icos() - self.systray_winapi = SystrayWINAPI(self.plugin.roster.window) + #self.plugin.roster.window.realize() + #self.plugin.roster.window.show_all() + w = gtk.Window() # just a window to pass + w.realize() # realize it so gtk window exists + self.systray_winapi = SystrayWINAPI(w) + + # this fails if you move the window + #self.systray_winapi = SystrayWINAPI(self.plugin.roster.window) + self.xml.signal_autoconnect(self) @@ -233,7 +237,7 @@ class SystrayWin32(systray.Systray): self.set_img() def hide_icon(self): - self.systray_winapi.remove_notify_icon() + self.systray_winapi.remove() def on_clicked(self, hwnd, message, wparam, lparam): if lparam == win32con.WM_RBUTTONUP: # Right click