From f57b75ac03c4c75909cad08bf57d7322023e0819 Mon Sep 17 00:00:00 2001 From: j Date: Sat, 9 Jan 2016 16:01:51 +0530 Subject: [PATCH] use appindicator to also show icon in unity --- oml/gtkstatus.py | 49 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/oml/gtkstatus.py b/oml/gtkstatus.py index 883266b..162de98 100644 --- a/oml/gtkstatus.py +++ b/oml/gtkstatus.py @@ -8,21 +8,37 @@ import _thread import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk, GLib +try: + gi.require_version('AppIndicator3', '0.1') + from gi.repository import AppIndicator3 as appindicator +except: + appindicator = None + base = dirname(dirname(dirname(abspath(__file__)))) icon = os.path.join(base, 'openmedialibrary/static/png/oml.png') title = "Open Media Library" ctl = base + '/ctl' + class OMLIcon: menu = None + icon = None + indicator = None def __init__(self): - self.icon = Gtk.StatusIcon() - self.icon.set_from_file(icon) - self.icon.set_title(title) - self.icon.connect("activate", self._click) - self.icon.connect("popup-menu", self._click) + if appindicator: + self.indicator = appindicator.Indicator.new("OML", icon, + appindicator.IndicatorCategory.APPLICATION_STATUS) + self.indicator.set_status(appindicator.IndicatorStatus.ACTIVE) + self.menu = self.get_menu() + self.indicator.set_menu(self.menu) + else: + self.icon = Gtk.StatusIcon() + self.icon.set_from_file(icon) + self.icon.set_title(title) + self.icon.connect("activate", self._click) + self.icon.connect("popup-menu", self._click) self._p = subprocess.Popen([ctl, 'start']) GLib.timeout_add_seconds(1, self._open, None) _thread.start_new_thread(self._wait, ()) @@ -31,23 +47,26 @@ class OMLIcon: self._p.wait() self._quit(None) + def get_menu(self): + menu = Gtk.Menu() + about = Gtk.MenuItem(label="Open") + about.connect("activate", self._open) + menu.append(about) + quit = Gtk.MenuItem(label="Quit") + quit.connect("activate", self._quit) + menu.append(quit) + menu.show_all() + return menu + def _click(self, icon, button=None, time=None): if self.menu: self.menu.destroy() self.menu = None else: + self.menu = self.get_menu() button = 1 time = Gtk.get_current_event_time() - menu = Gtk.Menu() - about = Gtk.MenuItem(label="Open") - about.connect("activate", self._open) - menu.append(about) - quit = Gtk.MenuItem(label="Quit") - quit.connect("activate", self._quit) - menu.append(quit) - menu.show_all() - menu.popup(None, None, self.icon.position_menu, icon, button, time) - self.menu = menu + self.menu.popup(None, None, self.icon.position_menu, icon, button, time) def _quit(self, q): Gtk.main_quit()