[kupfer] Add application indicator support for Kupfer
- From: Ulrik Sverdrup <usverdrup src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [kupfer] Add application indicator support for Kupfer
- Date: Mon, 5 Jul 2010 22:09:09 +0000 (UTC)
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]