mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Links to documentation of the SNI pseudo-spec
This commit is contained in:
parent
1e4c552771
commit
f875b50bcf
@ -19,16 +19,20 @@ def log(*args, **kw):
|
|||||||
print('StatusNotifier:', *args, **kw)
|
print('StatusNotifier:', *args, **kw)
|
||||||
kw['file'].flush()
|
kw['file'].flush()
|
||||||
|
|
||||||
def qicon_to_dbus_image_list(qicon):
|
def qicon_to_sni_image_list(qicon):
|
||||||
|
'See http://www.notmart.org/misc/statusnotifieritem/icons.html'
|
||||||
ans = dbus.Array(signature='(iiay)')
|
ans = dbus.Array(signature='(iiay)')
|
||||||
if not qicon.isNull():
|
if not qicon.isNull():
|
||||||
sizes = qicon.availableSizes() or (QSize(x, x) for x in (32, 64, 128, 256))
|
sizes = qicon.availableSizes() or (QSize(x, x) for x in (32, 64, 128, 256))
|
||||||
tc = b'L' if array.array(b'I') < 4 else b'I'
|
tc = b'L' if array.array(b'I').itemsize < 4 else b'I'
|
||||||
for size in sizes:
|
for size in sizes:
|
||||||
|
# Convert to DBUS struct of width, height, and image data in ARGB32
|
||||||
|
# in network endianness
|
||||||
i = qicon.pixmap(size).toImage().convertToFormat(QImage.Format_ARGB32)
|
i = qicon.pixmap(size).toImage().convertToFormat(QImage.Format_ARGB32)
|
||||||
w, h = i.width(), i.height()
|
w, h = i.width(), i.height()
|
||||||
data = i.constBits().asstring(4 * w * h)
|
data = i.constBits().asstring(4 * w * h)
|
||||||
if socket.htonl(1) != 1:
|
if socket.htonl(1) != 1:
|
||||||
|
# Host endianness != Network Endiannes
|
||||||
data = array.array(tc, i.constBits().asstring(4 * i.width() * i.height()))
|
data = array.array(tc, i.constBits().asstring(4 * i.width() * i.height()))
|
||||||
data.byteswap()
|
data.byteswap()
|
||||||
data = data.tostring()
|
data = data.tostring()
|
||||||
@ -37,6 +41,8 @@ def qicon_to_dbus_image_list(qicon):
|
|||||||
|
|
||||||
class Factory(QObject):
|
class Factory(QObject):
|
||||||
|
|
||||||
|
'See http://www.notmart.org/misc/statusnotifieritem/statusnotifierwatcher.html'
|
||||||
|
|
||||||
SERVICE = "org.kde.StatusNotifierWatcher"
|
SERVICE = "org.kde.StatusNotifierWatcher"
|
||||||
PATH = "/StatusNotifierWatcher"
|
PATH = "/StatusNotifierWatcher"
|
||||||
IFACE = "org.kde.StatusNotifierWatcher"
|
IFACE = "org.kde.StatusNotifierWatcher"
|
||||||
@ -181,6 +187,8 @@ class StatusNotifierItem(QObject):
|
|||||||
|
|
||||||
class StatusNotifierItemAPI(Object):
|
class StatusNotifierItemAPI(Object):
|
||||||
|
|
||||||
|
'See http://www.notmart.org/misc/statusnotifieritem/statusnotifieritem.html'
|
||||||
|
|
||||||
IFACE = 'org.kde.StatusNotifierItem'
|
IFACE = 'org.kde.StatusNotifierItem'
|
||||||
|
|
||||||
def __init__(self, notifier, **kw):
|
def __init__(self, notifier, **kw):
|
||||||
@ -193,7 +201,7 @@ class StatusNotifierItemAPI(Object):
|
|||||||
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'
|
||||||
self.category = kw.get('category', 'ApplicationStatus')
|
self.category = kw.get('category', 'ApplicationStatus')
|
||||||
self.title = kw.get('title', self.app_id)
|
self.title = kw.get('title', self.app_id)
|
||||||
self.icon_serialization = qicon_to_dbus_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])
|
||||||
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):
|
||||||
@ -273,7 +281,7 @@ class StatusNotifierItemAPI(Object):
|
|||||||
|
|
||||||
@dbus_signal(IFACE, '')
|
@dbus_signal(IFACE, '')
|
||||||
def NewIcon(self):
|
def NewIcon(self):
|
||||||
self.icon_serialization = qicon_to_dbus_image_list(self.notifier.icon())
|
self.icon_serialization = qicon_to_sni_image_list(self.notifier.icon())
|
||||||
|
|
||||||
@dbus_signal(IFACE, '')
|
@dbus_signal(IFACE, '')
|
||||||
def NewAttentionIcon(self):
|
def NewAttentionIcon(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user