From b679db73ed1031830553c3efeb7946b6144e6a8a Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 29 Oct 2014 21:34:55 +0530 Subject: [PATCH] Make activated() signal compatible with Qt. Allow setting app_id via the factory() function --- src/calibre/gui2/dbus_export/demo.py | 2 +- src/calibre/gui2/dbus_export/tray.py | 15 +++++++++------ src/calibre/gui2/dbus_export/widgets.py | 4 ++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/calibre/gui2/dbus_export/demo.py b/src/calibre/gui2/dbus_export/demo.py index d3f34f3ffc..45677f8d63 100644 --- a/src/calibre/gui2/dbus_export/demo.py +++ b/src/calibre/gui2/dbus_export/demo.py @@ -125,7 +125,7 @@ class MainWindow(QMainWindow): self.update_tray_toggle_action() return QMainWindow.showEvent(self, ev) - def tray_activated(self): + def tray_activated(self, reason): self.setVisible(not self.isVisible()) def action_triggered(self, checked=False): diff --git a/src/calibre/gui2/dbus_export/tray.py b/src/calibre/gui2/dbus_export/tray.py index 3718427101..b0610c358c 100644 --- a/src/calibre/gui2/dbus_export/tray.py +++ b/src/calibre/gui2/dbus_export/tray.py @@ -16,7 +16,7 @@ import os import dbus from PyQt5.Qt import ( - QApplication, QObject, pyqtSignal, Qt, QPoint, QRect, QMenu) + QApplication, QObject, pyqtSignal, Qt, QPoint, QRect, QMenu, QSystemTrayIcon) from calibre.gui2.dbus_export.menu import DBusMenu from calibre.gui2.dbus_export.utils import icon_cache @@ -28,7 +28,7 @@ _sni_count = 0 class StatusNotifierItem(QObject): IFACE = 'org.kde.StatusNotifierItem' - activated = pyqtSignal() + activated = pyqtSignal(object) show_menu = pyqtSignal(int, int) def __init__(self, **kw): @@ -93,6 +93,9 @@ class StatusNotifierItem(QObject): def supportsMessages(cls): return False + def emit_activated(self): + self.activated.emit(QSystemTrayIcon.Trigger) + _status_item_menu_count = 0 class StatusNotifierItemAPI(Object): @@ -121,7 +124,7 @@ class StatusNotifierItemAPI(Object): if menu is None: menu = QMenu() if len(menu.actions()) == 0: - menu.addAction(self.notifier.icon(), _('Show/hide %s') % self.title, self.notifier.activated.emit) + menu.addAction(self.notifier.icon(), _('Show/hide %s') % self.title, self.notifier.emit_activated) # The menu must have at least one entry, namely the show/hide entry. # This is necessary as Canonical in their infinite wisdom decided to # force all tray icons to show their popup menus when clicked. @@ -191,16 +194,16 @@ class StatusNotifierItemAPI(Object): @dbus_method(IFACE, in_signature='ii', out_signature='') def Activate(self, x, y): - self.notifier.activated.emit() + self.notifier.activated.emit(QSystemTrayIcon.Trigger) @dbus_method(IFACE, in_signature='u', out_signature='') def XAyatanaSecondaryActivate(self, timestamp): # This is called when the user middle clicks the icon in Unity - self.notifier.activated.emit() + self.notifier.activated.emit(QSystemTrayIcon.MiddleClick) @dbus_method(IFACE, in_signature='ii', out_signature='') def SecondaryActivate(self, x, y): - self.notifier.activated.emit() + self.notifier.activated.emit(QSystemTrayIcon.MiddleClick) @dbus_method(IFACE, in_signature='is', out_signature='') def Scroll(self, delta, orientation): diff --git a/src/calibre/gui2/dbus_export/widgets.py b/src/calibre/gui2/dbus_export/widgets.py index aad8e2b2eb..827454e346 100644 --- a/src/calibre/gui2/dbus_export/widgets.py +++ b/src/calibre/gui2/dbus_export/widgets.py @@ -178,8 +178,8 @@ class Factory(QObject): # TODO: have the created widgets also handle bus disconnection _factory = None -def factory(): +def factory(app_id=None): global _factory if _factory is None: - _factory = Factory() + _factory = Factory(app_id=app_id) return _factory