# https://github.com/linuxmint/blueberry/issues/120 --- /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,23 @@ 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_title(_("Bluetooth is disabled")) + self.icon.set_icon(self.tray_disabled_icon) + self.icon.set_menu(self.build_menu()) else: - self.icon.set_icon_name(self.tray_icon) + self.icon.set_icon(self.tray_icon) + self.icon.set_menu(self.build_menu()) 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_title(_("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_title(_("Bluetooth")) + self.icon.set_icon(self.tray_icon) def get_devices(self): self.connected_devices = [] @@ -117,13 +118,11 @@ 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, _ignored): + subprocess.Popen(["blueberry"]) - def on_statusicon_released(self, icon, x, y, button, time, position): - if button == 3: + def build_menu(self): menu = Gtk.Menu() 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]