statusicon.py 文件源码

python
阅读 25 收藏 0 点赞 0 评论 0

项目:revolt 作者: aperezdc 项目源码 文件源码
def __init__(self, delegate, context_menu, app, failure_callback):
        super().__init__(delegate)

        import gi
        gi.require_version("StatusNotifier", "1.0")
        from gi.repository import StatusNotifier

        if hasattr(StatusNotifier.Icon, "ATTENTION_ICON"):
            self.SNI_ATTENTION_ICON = StatusNotifier.Icon.ATTENTION_ICON
            self.SNI_ACTIVE_ICON = StatusNotifier.Icon.ICON
        else:
            self.SNI_ATTENTION_ICON = StatusNotifier.Icon.STATUS_NOTIFIER_ATTENTION_ICON
            self.SNI_ACTIVE_ICON = StatusNotifier.Icon.STATUS_NOTIFIER_ICON
        self.SNI_ATTENTION = StatusNotifier.Status.NEEDS_ATTENTION
        self.SNI_ACTIVE = StatusNotifier.Status.ACTIVE

        theme = Gtk.IconTheme.get_default()
        self._offline_icon_pixbuf = theme.load_icon(app.get_application_id(),
                                                    self.ICON_PIXBUF_SIZE,
                                                    Gtk.IconLookupFlags.FORCE_SVG |
                                                    Gtk.IconLookupFlags.FORCE_SYMBOLIC)
        self._attention_icon_pixbuf = theme.load_icon(app.get_application_id() + "-status-blink",
                                                      self.ICON_PIXBUF_SIZE,
                                                      Gtk.IconLookupFlags.FORCE_SVG |
                                                      Gtk.IconLookupFlags.FORCE_SYMBOLIC)
        self._online_icon_pixbuf = theme.load_icon(app.get_application_id() + "-status-online",
                                                   self.ICON_PIXBUF_SIZE,
                                                   Gtk.IconLookupFlags.FORCE_SVG |
                                                   Gtk.IconLookupFlags.FORCE_SYMBOLIC)

        self._failure_callback = failure_callback
        self._sni = StatusNotifier.Item.new_from_pixbuf(app.get_application_id(),
                                                        StatusNotifier.Category.COMMUNICATIONS,
                                                        self._offline_icon_pixbuf)
        if not self._sni.set_context_menu(context_menu):
            # TODO: No DbusMenu support built into StatusIcon, we need to handle the
            #  "context-menu" signal ourselves. For now, fallback to use GtkStatusIcon
            raise RuntimeError("StatusNotifier does not support DbusMenu, falling back to GtkStatusIcon")

        self._sni.connect("registration-failed", self.__on_registration_failed)
        self._sni.connect("activate", self.__on_activate)
        self._sni.set_from_pixbuf(self.SNI_ATTENTION_ICON, self._attention_icon_pixbuf)
        self._sni.set_title("Revolt")
        self._sni.set_status(self.SNI_ACTIVE)
        self._sni.set_item_is_menu(False)
        self._sni.freeze_tooltip()
        self._sni.set_tooltip_title("Revolt")
        self._sni.thaw_tooltip()
        self._sni.register()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号