Skip to content

AppIndicator port of blueberry-tray.py #120

@oniGino

Description

@oniGino

For those like me running Wayland based DE, here is a patch of blueberry-tray.py to use libappindicator instead of xapp

If someone is willing to do some additional testing it might be worth getting merged.

--- /usr/lib/blueberry/blueberry-tray.py.org	2021-12-13 01:02:56.923349069 -0800
+++ /usr/lib/blueberry/blueberry-tray.py	2021-12-13 02:21:23.253300141 -0800
@@ -5,8 +5,8 @@
 import gi
 gi.require_version('Gtk', '3.0')
 gi.require_version('GnomeBluetooth', '1.0')
-gi.require_version('XApp', '1.0')
-from gi.repository import Gtk, Gdk, GnomeBluetooth, Gio, XApp
+gi.require_version('AppIndicator3', '0.1')
+from gi.repository import AppIndicator3, Gtk, Gdk, GnomeBluetooth, Gio
 import rfkillMagic
 import setproctitle
 import subprocess
@@ -53,12 +53,16 @@
         self.model.connect('row-deleted', self.update_icon_callback)
         self.model.connect('row-inserted', self.update_icon_callback)

-        self.icon = XApp.StatusIcon()
-        self.icon.set_name("blueberry")
-        self.icon.set_tooltip_text(_("Bluetooth"))
-        self.icon.connect("activate", self.on_statusicon_activated)
-        self.icon.connect("button-release-event", self.on_statusicon_released)
-
+        self.paired_devices = {}
+
+        self.icon = AppIndicator3.Indicator.new(
+            'BlueBerry',
+            'blueberry',
+            AppIndicator3.IndicatorCategory.SYSTEM_SERVICES
+        )
+        self.icon.set_status(AppIndicator3.IndicatorStatus.ACTIVE)
+        self.icon.set_menu(self.build_menu())
+
         self.update_icon_callback(None, None, None)

     def on_settings_changed_cb(self, setting, key, data=None):
@@ -71,21 +75,18 @@
             return

         if self.rfkill.hard_block or self.rfkill.soft_block:
-            self.icon.set_icon_name(self.tray_disabled_icon)
-            self.icon.set_tooltip_text(_("Bluetooth is disabled"))
+            self.icon.set_icon(self.tray_disabled_icon)
         else:
-            self.icon.set_icon_name(self.tray_icon)
+            self.icon.set_icon(self.tray_icon)
             self.update_connected_state()

     def update_connected_state(self):
         self.get_devices()

         if len(self.connected_devices) > 0:
-            self.icon.set_icon_name(self.tray_active_icon)
-            self.icon.set_tooltip_text(_("Bluetooth: Connected to %s") % (", ".join(self.connected_devices)))
+            self.icon.set_icon(self.tray_active_icon)
         else:
-            self.icon.set_icon_name(self.tray_icon)
-            self.icon.set_tooltip_text(_("Bluetooth"))
+            self.icon.set_icon(self.tray_icon)

     def get_devices(self):
         self.connected_devices = []
@@ -117,13 +118,14 @@

                 iter = self.model.iter_next(iter)

-    def on_statusicon_activated(self, icon, button, time):
-        if button == Gdk.BUTTON_PRIMARY:
-            subprocess.Popen(["blueberry"])
+    def start_blueberry(self):
+        subprocess.Popen(["blueberry"])

-    def on_statusicon_released(self, icon, x, y, button, time, position):
-        if button == 3:
+    def build_menu(self):
             menu = Gtk.Menu()
+            blueberry_exec = Gtk.MenuItem(label=_("BlueBerry"))
+            blueberry_exec.connect("activate", self.start_blueberry)
+            menu.append(blueberry_exec)

             if not self.rfkill.hard_block:
                 if self.rfkill.soft_block:
@@ -168,7 +170,7 @@
             menu.append(item)

             menu.show_all()
-            icon.popup_menu(menu, x, y, button, time, position)
+            return menu

     def toggle_connect_cb(self, item, data = None):
         proxy = self.paired_devices[data]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions