mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Implement the AboutToShow callbacks
This commit is contained in:
parent
999bdb0bca
commit
d5a24b5165
@ -28,7 +28,8 @@ class MainWindow(QMainWindow):
|
|||||||
self.l = QVBoxLayout(w)
|
self.l = QVBoxLayout(w)
|
||||||
mb = f.create_window_menubar(self)
|
mb = f.create_window_menubar(self)
|
||||||
self.setMenuBar(mb)
|
self.setMenuBar(mb)
|
||||||
m = mb.addMenu('&One')
|
m = self.menu_one = mb.addMenu('&One')
|
||||||
|
m.aboutToShow.connect(self.about_to_show_one)
|
||||||
s = self.style()
|
s = self.style()
|
||||||
for i, icon in zip(xrange(3), map(s.standardIcon, (s.SP_DialogOkButton, s.SP_DialogCancelButton, s.SP_ArrowUp))):
|
for i, icon in zip(xrange(3), map(s.standardIcon, (s.SP_DialogOkButton, s.SP_DialogCancelButton, s.SP_ArrowUp))):
|
||||||
ac = m.addAction('One - &%d' % (i + 1))
|
ac = m.addAction('One - &%d' % (i + 1))
|
||||||
@ -41,6 +42,9 @@ class MainWindow(QMainWindow):
|
|||||||
g = QActionGroup(self)
|
g = QActionGroup(self)
|
||||||
make_checkable(g.addAction(m.addAction('Exclusive 1')))
|
make_checkable(g.addAction(m.addAction('Exclusive 1')))
|
||||||
make_checkable(g.addAction(m.addAction('Exclusive 2')), False)
|
make_checkable(g.addAction(m.addAction('Exclusive 2')), False)
|
||||||
|
m.addSeparator()
|
||||||
|
self.about_to_show_sentinel = m.addAction('This action\'s text should change before menu is shown')
|
||||||
|
self.as_count = 0
|
||||||
for ac in mb.findChildren(QAction):
|
for ac in mb.findChildren(QAction):
|
||||||
ac.triggered.connect(self.action_triggered)
|
ac.triggered.connect(self.action_triggered)
|
||||||
|
|
||||||
@ -49,6 +53,10 @@ class MainWindow(QMainWindow):
|
|||||||
text = 'Action triggered: %s' % ac.text()
|
text = 'Action triggered: %s' % ac.text()
|
||||||
self.statusBar().showMessage(text)
|
self.statusBar().showMessage(text)
|
||||||
|
|
||||||
|
def about_to_show_one(self):
|
||||||
|
self.as_count += 1
|
||||||
|
self.about_to_show_sentinel.setText('About to show handled: %d' % self.as_count)
|
||||||
|
|
||||||
app = QApplication([])
|
app = QApplication([])
|
||||||
f = factory()
|
f = factory()
|
||||||
mw = MainWindow()
|
mw = MainWindow()
|
||||||
|
@ -228,6 +228,15 @@ class DBusMenu(QObject):
|
|||||||
ac.toggle()
|
ac.toggle()
|
||||||
ac.triggered.emit(ac.isCheckable() and ac.isChecked())
|
ac.triggered.emit(ac.isCheckable() and ac.isChecked())
|
||||||
|
|
||||||
|
def handle_about_to_show(self, ac):
|
||||||
|
child_ids = {self.action_to_id(x) for x in ac.menu().actions()}
|
||||||
|
child_ids.discard(None)
|
||||||
|
ac_id = self.action_to_id(ac)
|
||||||
|
ac.menu().aboutToShow.emit()
|
||||||
|
if ac_id in self.layout_changes or child_ids.intersection(self.action_changes):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
class DBusMenuAPI(Object):
|
class DBusMenuAPI(Object):
|
||||||
|
|
||||||
IFACE = 'com.canonical.dbusmenu'
|
IFACE = 'com.canonical.dbusmenu'
|
||||||
@ -302,11 +311,23 @@ class DBusMenuAPI(Object):
|
|||||||
|
|
||||||
@dbus_method(IFACE, in_signature='i', out_signature='b')
|
@dbus_method(IFACE, in_signature='i', out_signature='b')
|
||||||
def AboutToShow(self, id):
|
def AboutToShow(self, id):
|
||||||
pass
|
ac = self.menu.id_to_action(id)
|
||||||
|
if ac is not None and ac.menu() is not None:
|
||||||
|
return self.menu.handle_about_to_show(ac)
|
||||||
|
return False
|
||||||
|
|
||||||
@dbus_method(IFACE, in_signature='ai', out_signature='aiai')
|
@dbus_method(IFACE, in_signature='ai', out_signature='aiai')
|
||||||
def AboutToShowGroup(self, ids):
|
def AboutToShowGroup(self, ids):
|
||||||
pass
|
updates_needed = dbus.Array(signature='i')
|
||||||
|
id_errors = dbus.Array(signature='i')
|
||||||
|
for ac_id in ids:
|
||||||
|
ac = self.menu.id_to_action(id)
|
||||||
|
if ac is not None and ac.menu() is not None:
|
||||||
|
if self.menu.handle_about_to_show(ac):
|
||||||
|
updates_needed.append(ac_id)
|
||||||
|
else:
|
||||||
|
id_errors.append(ac_id)
|
||||||
|
return updates_needed, id_errors
|
||||||
|
|
||||||
@dbus_signal(IFACE, 'a(ia{sv})a(ias)')
|
@dbus_signal(IFACE, 'a(ia{sv})a(ias)')
|
||||||
def ItemsPropertiesUpdated(self, updatedProps, removedProps):
|
def ItemsPropertiesUpdated(self, updatedProps, removedProps):
|
||||||
|
@ -14,7 +14,7 @@ from PyQt5.Qt import QSize, QImage, Qt, QKeySequence, QBuffer, QByteArray
|
|||||||
|
|
||||||
def log(*args, **kw):
|
def log(*args, **kw):
|
||||||
kw['file'] = sys.stderr
|
kw['file'] = sys.stderr
|
||||||
print('StatusNotifier:', *args, **kw)
|
print('DBusExport:', *args, **kw)
|
||||||
kw['file'].flush()
|
kw['file'].flush()
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,12 +6,17 @@ 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
|
import time, sys
|
||||||
|
|
||||||
from PyQt5.Qt import QObject, QMenuBar, QAction, QEvent
|
from PyQt5.Qt import QObject, QMenuBar, QAction, QEvent
|
||||||
|
|
||||||
UNITY_WINDOW_REGISTRAR = ('com.canonical.AppMenu.Registrar', '/com/canonical/AppMenu/Registrar', 'com.canonical.AppMenu.Registrar')
|
UNITY_WINDOW_REGISTRAR = ('com.canonical.AppMenu.Registrar', '/com/canonical/AppMenu/Registrar', 'com.canonical.AppMenu.Registrar')
|
||||||
|
|
||||||
|
def log(*args, **kw):
|
||||||
|
kw['file'] = sys.stderr
|
||||||
|
print('DBusExport:', *args, **kw)
|
||||||
|
kw['file'].flush()
|
||||||
|
|
||||||
class MenuBarAction(QAction):
|
class MenuBarAction(QAction):
|
||||||
|
|
||||||
def __init__(self, mb):
|
def __init__(self, mb):
|
||||||
@ -92,7 +97,7 @@ class Factory(QObject):
|
|||||||
self._bus = self.dbus.SessionBus()
|
self._bus = self.dbus.SessionBus()
|
||||||
self._bus.call_on_disconnection(self.bus_disconnected)
|
self._bus.call_on_disconnection(self.bus_disconnected)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
print ('Failed to connect to DBUS session bus, with error:', str(err))
|
log('Failed to connect to DBUS session bus, with error:', str(err))
|
||||||
self._bus = False
|
self._bus = False
|
||||||
return self._bus or None
|
return self._bus or None
|
||||||
|
|
||||||
@ -106,7 +111,7 @@ class Factory(QObject):
|
|||||||
self.detect_menu_registrar()
|
self.detect_menu_registrar()
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
self.menu_registrar = False
|
self.menu_registrar = False
|
||||||
print ('Failed to detect window menu registrar, with error:', str(err))
|
log('Failed to detect window menu registrar, with error:', str(err))
|
||||||
return bool(self.menu_registrar)
|
return bool(self.menu_registrar)
|
||||||
|
|
||||||
def detect_menu_registrar(self):
|
def detect_menu_registrar(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user