Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AppIndicator port of blueberry-tray.py #120

Open
oniGino opened this issue Dec 13, 2021 · 4 comments
Open

AppIndicator port of blueberry-tray.py #120

oniGino opened this issue Dec 13, 2021 · 4 comments

Comments

@oniGino
Copy link

oniGino commented Dec 13, 2021

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]
@albsch
Copy link

albsch commented Dec 16, 2021

I applied the patch and it works well. Thank you! No problems so far.

@Crystal4276
Copy link

The nm-applet normally working with systray when loaded as nm-applet --indicator becomes usable with status.notifier.
@oniGino
Would you consider rewriting the code above to allow such feature and propose it as a pull request ?

@jthomaschewski
Copy link

jthomaschewski commented Apr 3, 2023

I can confirm that the patch works for me on Sway. Thanks!
I have created an AUR package for Arch Linux for easier installation until this is merged: https://aur.archlinux.org/packages/blueberry-wayland

@lucasew
Copy link

lucasew commented Oct 12, 2023

Just a little contribution:

This expression derives the nixpkgs blueberry using this patch:

pkgs.blueberry.overrideAttrs (old: {
  patches = (old.patches or []) ++ [ ./blueberry-tray-fix.patch ];
  buildInputs = old.buildInputs ++ [ pkgs.libappindicator-gtk3 ];
})

It works but doesn't show any icon by default, this appears in the logs just after blueberry is started.

out 11 21:44:05 riverwood blueberry-tray-start[711802]: /nix/store/m3s1hh7hgn5s514j3mgx27qjx8xxbb05-blueberry-1.4.8/lib/blueberry/.blueberry-tray.py-wrapped:81: Deprec>
out 11 21:44:05 riverwood blueberry-tray-start[711802]:   self.icon.set_icon(self.tray_icon)

Everything else works fine. I am running Hyprland on NixOS.

Edit 1: Thank you for the patch <3

lucasew added a commit to lucasew/nixcfg that referenced this issue Oct 12, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants