mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Start work on DBUS menu exporter for Unity
This commit is contained in:
parent
cdcfc358e8
commit
23ed18f355
@ -167,6 +167,7 @@ class StatusNotifierItem(QObject):
|
|||||||
|
|
||||||
def setContextMenu(self, menu):
|
def setContextMenu(self, menu):
|
||||||
self.context_menu = menu
|
self.context_menu = menu
|
||||||
|
self.dbus.publish_new_menu()
|
||||||
|
|
||||||
def geometry(self):
|
def geometry(self):
|
||||||
return QRect()
|
return QRect()
|
||||||
@ -185,6 +186,20 @@ class StatusNotifierItem(QObject):
|
|||||||
def icon(self):
|
def icon(self):
|
||||||
return self._icon
|
return self._icon
|
||||||
|
|
||||||
|
class DBusMenu(Object):
|
||||||
|
|
||||||
|
IFACE = 'com.canonical.dbusmenu'
|
||||||
|
|
||||||
|
def __init__(self, notifier, object_path, **kw):
|
||||||
|
self.notifier = notifier
|
||||||
|
bus = kw.get('bus')
|
||||||
|
if bus is None:
|
||||||
|
bus = kw['bus'] = dbus.SessionBus()
|
||||||
|
Object.__init__(self, bus, object_path)
|
||||||
|
|
||||||
|
def publish_new_menu(self):
|
||||||
|
pass
|
||||||
|
|
||||||
class StatusNotifierItemAPI(Object):
|
class StatusNotifierItemAPI(Object):
|
||||||
|
|
||||||
'See http://www.notmart.org/misc/statusnotifieritem/statusnotifieritem.html'
|
'See http://www.notmart.org/misc/statusnotifieritem/statusnotifieritem.html'
|
||||||
@ -195,7 +210,7 @@ class StatusNotifierItemAPI(Object):
|
|||||||
self.notifier = notifier
|
self.notifier = notifier
|
||||||
bus = kw.get('bus')
|
bus = kw.get('bus')
|
||||||
if bus is None:
|
if bus is None:
|
||||||
bus = dbus.SessionBus()
|
bus = kw['bus'] = dbus.SessionBus()
|
||||||
self.name = '%s-%s-%s' % (self.IFACE, os.getpid(), kw.get('num', 1))
|
self.name = '%s-%s-%s' % (self.IFACE, os.getpid(), kw.get('num', 1))
|
||||||
self.dbus_name = BusName(self.name, bus=bus, do_not_queue=True)
|
self.dbus_name = BusName(self.name, bus=bus, do_not_queue=True)
|
||||||
self.app_id = kw.get('app_id', QApplication.instance().applicationName()) or 'unknown_application'
|
self.app_id = kw.get('app_id', QApplication.instance().applicationName()) or 'unknown_application'
|
||||||
@ -203,10 +218,14 @@ class StatusNotifierItemAPI(Object):
|
|||||||
self.title = kw.get('title', self.app_id)
|
self.title = kw.get('title', self.app_id)
|
||||||
self.icon_serialization = qicon_to_sni_image_list(notifier.icon())
|
self.icon_serialization = qicon_to_sni_image_list(notifier.icon())
|
||||||
Object.__init__(self, bus, '/' + self.IFACE.split('.')[-1])
|
Object.__init__(self, bus, '/' + self.IFACE.split('.')[-1])
|
||||||
|
self.dbus_menu = DBusMenu(notifier, '/StatusItemMenu', **kw)
|
||||||
for name, val in vars(self.__class__).iteritems():
|
for name, val in vars(self.__class__).iteritems():
|
||||||
if getattr(val, '_dbus_is_signal', False):
|
if getattr(val, '_dbus_is_signal', False):
|
||||||
getattr(notifier, name).connect(getattr(self, name))
|
getattr(notifier, name).connect(getattr(self, name))
|
||||||
|
|
||||||
|
def publish_new_menu(self):
|
||||||
|
self.dbus_menu.publish_new_menu()
|
||||||
|
|
||||||
@dbus_property(IFACE, signature='s')
|
@dbus_property(IFACE, signature='s')
|
||||||
def IconName(self):
|
def IconName(self):
|
||||||
return ''
|
return ''
|
||||||
@ -255,6 +274,10 @@ class StatusNotifierItemAPI(Object):
|
|||||||
def Status(self):
|
def Status(self):
|
||||||
return 'Active' if self.notifier.isVisible() else 'Passive'
|
return 'Active' if self.notifier.isVisible() else 'Passive'
|
||||||
|
|
||||||
|
@dbus_property(IFACE, signature='o')
|
||||||
|
def Menu(self):
|
||||||
|
return dbus.ObjectPath(self.dbus_menu._object_path)
|
||||||
|
|
||||||
@dbus_property(IFACE, signature='i')
|
@dbus_property(IFACE, signature='i')
|
||||||
def WindowId(self):
|
def WindowId(self):
|
||||||
return 0
|
return 0
|
||||||
@ -267,6 +290,11 @@ class StatusNotifierItemAPI(Object):
|
|||||||
def Activate(self, x, y):
|
def Activate(self, x, y):
|
||||||
self.notifier.activated.emit()
|
self.notifier.activated.emit()
|
||||||
|
|
||||||
|
@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()
|
||||||
|
|
||||||
@dbus_method(IFACE, in_signature='ii', out_signature='')
|
@dbus_method(IFACE, in_signature='ii', out_signature='')
|
||||||
def SecondaryActivate(self, x, y):
|
def SecondaryActivate(self, x, y):
|
||||||
self.notifier.activated.emit()
|
self.notifier.activated.emit()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user