diff --git a/src/calibre/gui2/dbus_export/demo.py b/src/calibre/gui2/dbus_export/demo.py index 2509c5b623..d3f34f3ffc 100644 --- a/src/calibre/gui2/dbus_export/demo.py +++ b/src/calibre/gui2/dbus_export/demo.py @@ -6,9 +6,11 @@ from __future__ import (unicode_literals, division, absolute_import, __license__ = 'GPL v3' __copyright__ = '2014, Kovid Goyal ' +import time + from PyQt5.Qt import ( QApplication, QMainWindow, QVBoxLayout, Qt, QKeySequence, QAction, - QActionGroup, QMenu, QPushButton, QWidget) + QActionGroup, QMenu, QPushButton, QWidget, QTimer) from calibre.gui2.dbus_export.utils import setup_for_cli_run from calibre.gui2.dbus_export.widgets import factory @@ -76,12 +78,17 @@ class MainWindow(QMainWindow): l.addWidget(b), b.clicked.connect(self.change_icon) self.hib = b = QPushButton('Show/Hide system tray icon') l.addWidget(b), b.clicked.connect(self.systray.toggle) + self.update_tooltip_timer = t = QTimer(self) + t.setInterval(1000), t.timeout.connect(self.update_tooltip), t.start() self.ab = b = QPushButton('Add a new menu') b.clicked.connect(self.add_menu), l.addWidget(b) self.rb = b = QPushButton('Remove a created menu') b.clicked.connect(self.remove_menu), l.addWidget(b) print ('DBUS connection unique name:', f.bus.get_unique_name()) + def update_tooltip(self): + self.systray.setToolTip(time.strftime('A dynamically updated tooltip [%H:%M:%S]')) + def add_menu(self): mb = self.menuBar() m = mb.addMenu('Created menu %d' % len(mb.actions())) @@ -137,6 +144,7 @@ class MainWindow(QMainWindow): self.menu_two.addAction('Action added by about to show') app=QApplication([]) +app.setAttribute(Qt.AA_DontUseNativeMenuBar, False) app.setApplicationName('com.calibre-ebook.DBusExportDemo') mw=MainWindow() mw.show() diff --git a/src/calibre/gui2/dbus_export/tray.py b/src/calibre/gui2/dbus_export/tray.py index 16f356e293..3718427101 100644 --- a/src/calibre/gui2/dbus_export/tray.py +++ b/src/calibre/gui2/dbus_export/tray.py @@ -89,6 +89,10 @@ class StatusNotifierItem(QObject): def icon(self): return self._icon + @classmethod + def supportsMessages(cls): + return False + _status_item_menu_count = 0 class StatusNotifierItemAPI(Object): @@ -141,6 +145,8 @@ class StatusNotifierItemAPI(Object): @dbus_property(IFACE, signature='(sa(iiay)ss)') def ToolTip(self): + # This is ignored on Unity, Canonical believes in user interfaces + # that are so functionality free that they dont need tooltips return self.IconName, self.IconPixmap, self.Title, self.notifier.toolTip() @dbus_property(IFACE, signature='a(iiay)') diff --git a/src/calibre/gui2/dbus_export/widgets.py b/src/calibre/gui2/dbus_export/widgets.py index 2cc6b270be..aad8e2b2eb 100644 --- a/src/calibre/gui2/dbus_export/widgets.py +++ b/src/calibre/gui2/dbus_export/widgets.py @@ -8,7 +8,8 @@ __copyright__ = '2014, Kovid Goyal ' import time, sys -from PyQt5.Qt import QObject, QMenuBar, QAction, QEvent, QSystemTrayIcon, QApplication +from PyQt5.Qt import ( + QObject, QMenuBar, QAction, QEvent, QSystemTrayIcon, QApplication, Qt) from calibre.constants import iswindows, isosx @@ -149,7 +150,7 @@ class Factory(QObject): self.status_notifier = bool(self.bus.call_blocking(*args, timeout=0.1)) def create_window_menubar(self, parent): - if self.has_global_menu: + if not QApplication.instance().testAttribute(Qt.AA_DontUseNativeMenuBar) and self.has_global_menu: return ExportedMenuBar(parent, self.menu_registrar, self.bus) return QMenuBar(parent)