Add systray tooltip to demo and honor the DontUseNativeToolbars application attribute

This commit is contained in:
Kovid Goyal 2014-10-29 18:23:55 +05:30
parent c0e585960a
commit 23dce4673d
3 changed files with 18 additions and 3 deletions

View File

@ -6,9 +6,11 @@ from __future__ import (unicode_literals, division, absolute_import,
__license__ = 'GPL v3' __license__ = 'GPL v3'
__copyright__ = '2014, Kovid Goyal <kovid at kovidgoyal.net>' __copyright__ = '2014, Kovid Goyal <kovid at kovidgoyal.net>'
import time
from PyQt5.Qt import ( from PyQt5.Qt import (
QApplication, QMainWindow, QVBoxLayout, Qt, QKeySequence, QAction, 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.utils import setup_for_cli_run
from calibre.gui2.dbus_export.widgets import factory from calibre.gui2.dbus_export.widgets import factory
@ -76,12 +78,17 @@ class MainWindow(QMainWindow):
l.addWidget(b), b.clicked.connect(self.change_icon) l.addWidget(b), b.clicked.connect(self.change_icon)
self.hib = b = QPushButton('Show/Hide system tray icon') self.hib = b = QPushButton('Show/Hide system tray icon')
l.addWidget(b), b.clicked.connect(self.systray.toggle) 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') self.ab = b = QPushButton('Add a new menu')
b.clicked.connect(self.add_menu), l.addWidget(b) b.clicked.connect(self.add_menu), l.addWidget(b)
self.rb = b = QPushButton('Remove a created menu') self.rb = b = QPushButton('Remove a created menu')
b.clicked.connect(self.remove_menu), l.addWidget(b) b.clicked.connect(self.remove_menu), l.addWidget(b)
print ('DBUS connection unique name:', f.bus.get_unique_name()) 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): def add_menu(self):
mb = self.menuBar() mb = self.menuBar()
m = mb.addMenu('Created menu %d' % len(mb.actions())) 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') self.menu_two.addAction('Action added by about to show')
app=QApplication([]) app=QApplication([])
app.setAttribute(Qt.AA_DontUseNativeMenuBar, False)
app.setApplicationName('com.calibre-ebook.DBusExportDemo') app.setApplicationName('com.calibre-ebook.DBusExportDemo')
mw=MainWindow() mw=MainWindow()
mw.show() mw.show()

View File

@ -89,6 +89,10 @@ class StatusNotifierItem(QObject):
def icon(self): def icon(self):
return self._icon return self._icon
@classmethod
def supportsMessages(cls):
return False
_status_item_menu_count = 0 _status_item_menu_count = 0
class StatusNotifierItemAPI(Object): class StatusNotifierItemAPI(Object):
@ -141,6 +145,8 @@ class StatusNotifierItemAPI(Object):
@dbus_property(IFACE, signature='(sa(iiay)ss)') @dbus_property(IFACE, signature='(sa(iiay)ss)')
def ToolTip(self): 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() return self.IconName, self.IconPixmap, self.Title, self.notifier.toolTip()
@dbus_property(IFACE, signature='a(iiay)') @dbus_property(IFACE, signature='a(iiay)')

View File

@ -8,7 +8,8 @@ __copyright__ = '2014, Kovid Goyal <kovid at kovidgoyal.net>'
import time, sys 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 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)) self.status_notifier = bool(self.bus.call_blocking(*args, timeout=0.1))
def create_window_menubar(self, parent): 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 ExportedMenuBar(parent, self.menu_registrar, self.bus)
return QMenuBar(parent) return QMenuBar(parent)