[kupfer] Add application indicator support for Kupfer



commit ed7f0513e470e3784bfcf3cec6841b637c632918
Author: Francesco Marella <francesco marella gmail com>
Date:   Mon Jul 5 18:02:01 2010 +0200

    Add application indicator support for Kupfer
    
    Co-authored-by: Ulrik Sverdrup <ulrik sverdrup gmail com>
    Launchpad-bug: https://bugs.launchpad.net/kupfer/+bug/601861

 NEWS                 |    9 ++++++++
 README               |    1 +
 kupfer/ui/browser.py |   52 +++++++++++++++++++++++++++++++++++++++++++------
 3 files changed, 55 insertions(+), 7 deletions(-)
---
diff --git a/NEWS b/NEWS
index d7cf7e3..24722a7 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,15 @@
 NEWS for kupfer
 ===============
 
+kupfer's next release
+---------------------
+
+Not Released Yet
+
+* Use application indicators when available (Francesco Marella)
+  (:lp:`601861`)
+
+
 kupfer v201
 -----------
 
diff --git a/README b/README
index 6fe6cf4..ecc3230 100644
--- a/README
+++ b/README
@@ -58,6 +58,7 @@ Opportunistic dependencies
 * The deprecated 'gnome' module is used for session connection as
   fallback
 * If available, 'setproctitle' is used to set the process name
+* python-appindicator for ubuntu-style notification icon
 
 
 Some plugins might require additional python modules!
diff --git a/kupfer/ui/browser.py b/kupfer/ui/browser.py
index 1b64856..dcfe9dd 100644
--- a/kupfer/ui/browser.py
+++ b/kupfer/ui/browser.py
@@ -10,6 +10,11 @@ import time
 import pygtk
 pygtk.require('2.0')
 
+try:
+	import appindicator
+except ImportError:
+	appindicator = None
+
 import gtk
 import gio
 import gobject
@@ -1418,30 +1423,41 @@ class WindowController (pretty.OutputMixin):
 	def show_statusicon(self):
 		if not self._statusicon:
 			self._statusicon = self._setup_status_icon()
-		self._statusicon.set_visible(True)
+		try:
+			self._statusicon.set_visible(True)
+		except AttributeError:
+			pass
+
 	def hide_statusicon(self):
 		if self._statusicon:
-			self._statusicon.set_visible(False)
+			try:
+				self._statusicon.set_visible(False)
+			except AttributeError:
+				self._statusicon = None
 
 	def _settings_changed(self, setctl, section, key, value):
 		if section == "Kupfer" and key == "showstatusicon":
 			if value: self.show_statusicon()
 			else: self.hide_statusicon()
 
-	def _setup_status_icon(self):
-		status = gtk.status_icon_new_from_icon_name(version.ICON_NAME)
-		status.set_tooltip(version.PROGRAM_NAME)
+	def _setup_menu(self):
 		menu = gtk.Menu()
 
 		def menu_callback(menuitem, callback):
 			callback()
 			return True
 
-		def add_menu_item(icon, callback):
-			mitem = gtk.ImageMenuItem(icon)
+		def add_menu_item(icon, callback, label=None):
+			mitem = None
+			if label and not icon:
+				mitem = gtk.MenuItem(label=label)
+			else:
+				mitem = gtk.ImageMenuItem(icon)
 			mitem.connect("activate", menu_callback, callback)
 			menu.append(mitem)
 
+		add_menu_item(None, self.activate, _("Show Main Interface"))
+		menu.append(gtk.SeparatorMenuItem())
 		add_menu_item(gtk.STOCK_PREFERENCES, kupferui.show_preferences)
 		add_menu_item(gtk.STOCK_HELP, kupferui.show_help)
 		add_menu_item(gtk.STOCK_ABOUT, kupferui.show_about_dialog)
@@ -1449,10 +1465,32 @@ class WindowController (pretty.OutputMixin):
 		add_menu_item(gtk.STOCK_QUIT, self.quit)
 		menu.show_all()
 
+		return menu
+
+	def _setup_status_icon(self):
+		menu = self._setup_menu()
+		if appindicator:
+			return self._setup_appindicator(menu)
+		else:
+			return self._setup_gtk_status_icon(menu)
+
+	def _setup_gtk_status_icon(self, menu):
+		status = gtk.status_icon_new_from_icon_name(version.ICON_NAME)
+		status.set_tooltip(version.PROGRAM_NAME)
+
 		status.connect("popup-menu", self._popup_menu, menu)
 		status.connect("activate", self.show_hide)
 		return status
 
+	def _setup_appindicator(self, menu):
+		indicator = appindicator.Indicator(version.PROGRAM_NAME,
+			version.ICON_NAME,
+			appindicator.CATEGORY_APPLICATION_STATUS)
+		indicator.set_status(appindicator.STATUS_ACTIVE)
+
+		indicator.set_menu(menu)
+		return indicator
+
 	def _setup_window(self):
 		"""
 		Returns window



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]