Extensions: Experimental AppIndicator support
The way how we access the gPodder "GUI" object is very hack-ish. We should find a better way for that.
This commit is contained in:
parent
556cc0fab4
commit
c9c71d2f0c
|
@ -0,0 +1,59 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Ubuntu AppIndicator Icon
|
||||
# Thomas Perl <thp@gpodder.org>; 2012-02-24
|
||||
|
||||
import gpodder
|
||||
|
||||
_ = gpodder.gettext
|
||||
|
||||
__title__ = _('Ubuntu App Indicator')
|
||||
__description__ = _('Show a status indicator in the top bar.')
|
||||
__only_for__ = 'gtk'
|
||||
|
||||
import appindicator
|
||||
import gtk
|
||||
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class gPodderExtension:
|
||||
def __init__(self, container):
|
||||
self.container = container
|
||||
self.indicator = None
|
||||
self.gpodder = None
|
||||
|
||||
def on_load(self):
|
||||
self.indicator = appindicator.Indicator('gpodder', 'gpodder',
|
||||
appindicator.CATEGORY_APPLICATION_STATUS)
|
||||
self.indicator.set_status(appindicator.STATUS_ACTIVE)
|
||||
|
||||
def _rebuild_menu(self):
|
||||
menu = gtk.Menu()
|
||||
toggle_visible = gtk.CheckMenuItem(_('Show main window'))
|
||||
toggle_visible.set_active(True)
|
||||
def on_toggle_visible(menu_item):
|
||||
if menu_item.get_active():
|
||||
self.gpodder.main_window.show()
|
||||
else:
|
||||
self.gpodder.main_window.hide()
|
||||
toggle_visible.connect('activate', on_toggle_visible)
|
||||
menu.append(toggle_visible)
|
||||
menu.append(gtk.SeparatorMenuItem())
|
||||
quit_gpodder = gtk.MenuItem(_('Quit'))
|
||||
def on_quit(menu_item):
|
||||
self.gpodder.on_gPodder_delete_event(self.gpodder.main_window)
|
||||
quit_gpodder.connect('activate', on_quit)
|
||||
menu.append(quit_gpodder)
|
||||
menu.show_all()
|
||||
self.indicator.set_menu(menu)
|
||||
|
||||
def on_unload(self):
|
||||
self.indicator = None
|
||||
|
||||
def on_ui_object_available(self, name, ui_object):
|
||||
if name == 'gpodder-gtk':
|
||||
self.gpodder = ui_object
|
||||
self._rebuild_menu()
|
||||
|
|
@ -398,3 +398,15 @@ class ExtensionManager(object):
|
|||
"""
|
||||
pass
|
||||
|
||||
@call_extensions
|
||||
def on_ui_object_available(self, name, ui_object):
|
||||
"""Called when an UI-specific object becomes available
|
||||
|
||||
XXX: Experimental. This hook might go away without notice (and be
|
||||
replaced with something better). Only use for in-tree extensions.
|
||||
|
||||
@param name: The name/ID of the object
|
||||
@param ui_object: The object itself
|
||||
"""
|
||||
pass
|
||||
|
||||
|
|
|
@ -107,6 +107,7 @@ class gPodder(BuilderWidget, dbus.service.Object):
|
|||
BuilderWidget.__init__(self, None)
|
||||
|
||||
def new(self):
|
||||
gpodder.user_extensions.on_ui_object_available('gpodder-gtk', self)
|
||||
self.toolbar.set_property('visible', self.config.show_toolbar)
|
||||
|
||||
self.bluetooth_available = util.bluetooth_available()
|
||||
|
|
Loading…
Reference in New Issue