deskbar-applet r2061 - in trunk: . deskbar deskbar/ui
- From: sebp svn gnome org
- To: svn-commits-list gnome org
- Subject: deskbar-applet r2061 - in trunk: . deskbar deskbar/ui
- Date: Thu, 3 Apr 2008 13:17:36 +0100 (BST)
Author: sebp
Date: Thu Apr 3 13:17:36 2008
New Revision: 2061
URL: http://svn.gnome.org/viewvc/deskbar-applet?rev=2061&view=rev
Log:
Added the possibility to run Deskbar as a tray icon instead of an applet with the -t option from the commandline. It only works with Window UI.
Added:
trunk/deskbar/ui/AbstractCuemiacDeskbarIcon.py
trunk/deskbar/ui/DeskbarStatusIcon.py
Modified:
trunk/ChangeLog
trunk/deskbar/deskbar-applet.py
trunk/deskbar/ui/DeskbarTray.py
trunk/deskbar/ui/Makefile.am
Modified: trunk/deskbar/deskbar-applet.py
==============================================================================
--- trunk/deskbar/deskbar-applet.py (original)
+++ trunk/deskbar/deskbar-applet.py Thu Apr 3 13:17:36 2008
@@ -4,7 +4,8 @@
import sys
from os.path import abspath, join, dirname, exists
import logging
-import gettext, locale
+import gettext
+import locale
from gettext import gettext as _
import gnomeapplet
from optparse import OptionParser
@@ -50,7 +51,6 @@
import deskbar
import deskbar.defs
import deskbar.gtkexcepthook
-from deskbar.ui.DeskbarTray import DeskbarTray
# Setup i18n
gettext.bindtextdomain('deskbar-applet', abspath(join(deskbar.defs.DATA_DIR, "locale")))
@@ -77,6 +77,7 @@
usage = "deskbar-applet [OPTIONS]"
parser = OptionParser(usage=usage)
parser.add_option("-w", "--window", dest="window", action="store_true", help="Launch the applet in a standalone window for test purposes (default=no)")
+parser.add_option("-t", "--tray", dest="tray", action="store_true", help="Run Deskbar as a tray icon instead of an applet")
parser.add_option("-v", "--version", dest="version", action="store_true", help="Print version")
parser.add_option("--oaf-activate-iid")
parser.add_option("--oaf-ior-fd")
@@ -86,14 +87,25 @@
print deskbar.defs.VERSION
sys.exit()
-if options.window:
+if options.tray:
+ from deskbar.ui.DeskbarStatusIcon import DeskbarStatusIcon
+
+ deskbar_status_icon = DeskbarStatusIcon ()
+ gtk.gdk.threads_enter()
+ gtk.main()
+ gtk.gdk.threads_leave()
+elif options.window:
import gnome
+ from deskbar.ui.DeskbarTray import DeskbarTray
+
gnome.init(deskbar.defs.PACKAGE, deskbar.defs.VERSION)
build_window()
gtk.gdk.threads_enter()
gtk.main()
gtk.gdk.threads_leave()
else:
+ from deskbar.ui.DeskbarTray import DeskbarTray
+
gnomeapplet.bonobo_factory(
"OAFIID:Deskbar_Applet_Factory",
gnomeapplet.Applet.__gtype__,
Added: trunk/deskbar/ui/AbstractCuemiacDeskbarIcon.py
==============================================================================
--- (empty file)
+++ trunk/deskbar/ui/AbstractCuemiacDeskbarIcon.py Thu Apr 3 13:17:36 2008
@@ -0,0 +1,80 @@
+from deskbar.core.CoreImpl import CoreImpl
+from deskbar.core.GconfStore import GconfStore
+from deskbar.ui.CuemiacAlignedView import CuemiacAlignedView
+from deskbar.ui.CuemiacWindowController import CuemiacWindowController
+from deskbar.ui.CuemiacWindowView import CuemiacWindowView
+import deskbar
+import gtk
+import gobject
+
+class AbstractCuemiacDeskbarIcon (object):
+
+ def __init__(self):
+ self.active = False
+
+ def get_active(self):
+ return self.active
+
+ def set_active(self, active, time):
+ changed = (self.active != active)
+ self.active = active
+
+ if changed:
+ self._show_toggle(self, time)
+
+ def create_button_ui(self):
+ self._view = CuemiacAlignedView(self._controller, self._core, self.image, self.applet)
+ self._active_view = deskbar.BUTTON_UI_NAME
+
+ def create_window_ui(self):
+ self._view = CuemiacWindowView(self._controller, self._core)
+ self._active_view = deskbar.WINDOW_UI_NAME
+
+ def _setup_mvc(self):
+ self._core = CoreImpl(deskbar.MODULES_DIRS)
+ self._core.connect("loaded", self.on_loaded)
+
+ self._controller = CuemiacWindowController(self._core)
+
+ # Select the view based on user choice. CuemiacWindowView is
+ # the new style UI,
+ # CuemiacAlignedView is the older UI as seen in the
+ # Deskbar gnome-2-18 branch.
+ if self._core.get_ui_name() == deskbar.WINDOW_UI_NAME:
+ self.create_window_ui()
+ else:
+ # We need to use an AlignedWindow, which needs a Widget (self.image
+ # in this case) and the applet (self.applet)
+ self.create_button_ui()
+
+ self._view.set_sensitive(False)
+
+ GconfStore.get_instance().connect("ui-name-changed", self._on_ui_name_changed)
+
+ self._core.run()
+
+ def _show_toggle(self, widget, time):
+ self._controller.on_keybinding_activated(widget, time, False)
+
+ def _on_ui_name_changed(self, gconfstore, name):
+ if name != self._active_view:
+ self._view.destroy()
+ if name == deskbar.WINDOW_UI_NAME:
+ self.create_window_ui()
+ else:
+ self.create_button_ui()
+ self._active_view = name
+
+ def on_loaded(self, sender):
+ """
+ Called when all modules have been loaded and
+ initialized. You should mark you UI
+ sensitive here
+ """
+ self._view.set_sensitive(True)
+
+ def setup_menu(self):
+ """
+ Setup popup menu
+ """
+ raise NotImplementedError
Added: trunk/deskbar/ui/DeskbarStatusIcon.py
==============================================================================
--- (empty file)
+++ trunk/deskbar/ui/DeskbarStatusIcon.py Thu Apr 3 13:17:36 2008
@@ -0,0 +1,113 @@
+import deskbar
+import gtk
+from deskbar.ui.AbstractCuemiacDeskbarIcon import AbstractCuemiacDeskbarIcon
+from gettext import gettext as _
+from os.path import join
+
+class DeskbarPopupMenu (gtk.Menu):
+
+ class Item (gtk.ImageMenuItem):
+
+ def __init__(self, label, stock_id):
+ gtk.ImageMenuItem.__init__ (self)
+
+ self.box = gtk.HBox (False, 3)
+ self.box.show()
+ self.add(self.box)
+
+ self.image = gtk.Image ()
+ self.image.set_from_stock (stock_id, gtk.ICON_SIZE_MENU)
+ self.image.show()
+ self.box.pack_start (self.image, False, False, 0)
+
+ self.label = gtk.Label (label)
+ self.label.show()
+
+ self.alignment = gtk.Alignment ()
+ self.alignment.add (self.label)
+ self.alignment.show()
+ self.box.pack_start (self.alignment)
+
+ def __init__(self, controller):
+ gtk.Menu.__init__ (self)
+
+ menuItem = DeskbarPopupMenu.Item (_("Clear History"), gtk.STOCK_DELETE)
+ menuItem.connect ("activate", controller.on_clear_history)
+ self.append(menuItem)
+
+ menuItem = DeskbarPopupMenu.Item (_("Preferences"), gtk.STOCK_PROPERTIES)
+ menuItem.connect ("activate", controller.on_show_preferences)
+ self.append(menuItem)
+
+ menuItem = DeskbarPopupMenu.Item (_("Help"), gtk.STOCK_HELP)
+ menuItem.connect ("activate", controller.on_show_help)
+ self.append(menuItem)
+
+ menuItem = DeskbarPopupMenu.Item (_("About"), gtk.STOCK_ABOUT)
+ menuItem.connect ("activate", controller.on_show_about)
+ self.append(menuItem)
+
+ self.append(gtk.MenuItem())
+
+ menuItem = DeskbarPopupMenu.Item (_("Quit"), gtk.STOCK_QUIT)
+ menuItem.connect ("activate", lambda w: gtk.main_quit())
+ self.append(menuItem)
+
+class DeskbarStatusIcon (gtk.StatusIcon, AbstractCuemiacDeskbarIcon):
+
+ def __init__(self):
+ gtk.StatusIcon.__init__(self)
+ AbstractCuemiacDeskbarIcon.__init__(self)
+
+ self.set_visible (False)
+ self.set_tooltip (_("Show search entry"))
+ #self.connect ("notify::orientation", self._on_orientation_changed)
+ self.connect ("size-changed", self._on_size_changed)
+ self.connect ("activate", self._on_activate)
+ self.connect ("popup-menu", self._on_popup_menu)
+
+ self._setup_mvc()
+ self.setup_menu()
+
+ self._on_size_changed(self, self.get_size())
+
+ def on_loaded(self, sender):
+ AbstractCuemiacDeskbarIcon.on_loaded (self, sender)
+ self.set_visible (True)
+
+ def set_button_image_from_file (self, filename, size):
+ # We use an intermediate pixbuf to scale the image
+ if gtk.StatusIcon.get_property(self, "orientation") == gtk.ORIENTATION_HORIZONTAL:
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size (filename, -1, size)
+ else:
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size (filename, size, -1)
+ gtk.StatusIcon.set_from_pixbuf (self, pixbuf)
+
+ def _on_size_changed (self, status_icon, size):
+ image_name = "deskbar-applet-panel"
+ if self.get_property("orientation") == gtk.ORIENTATION_HORIZONTAL:
+ image_name += "-h"
+ else:
+ image_name += "-v"
+
+ if size <= 36:
+ image_name += ".png"
+ s = -1
+ else:
+ image_name += ".svg"
+ s = size-12
+
+ self.set_button_image_from_file (join(deskbar.ART_DATA_DIR, image_name), s)
+
+ def _on_activate (self, status_icon):
+ AbstractCuemiacDeskbarIcon.set_active (self, not self.active, gtk.get_current_event_time())
+
+ def _on_popup_menu (self, status_icon, button, activate_time):
+ self._menu.show_all()
+ self._menu.popup(None, None, None, button, activate_time)
+
+ def create_button_ui(self):
+ raise NotImplementedError
+
+ def setup_menu(self):
+ self._menu = DeskbarPopupMenu (self._controller)
\ No newline at end of file
Modified: trunk/deskbar/ui/DeskbarTray.py
==============================================================================
--- trunk/deskbar/ui/DeskbarTray.py (original)
+++ trunk/deskbar/ui/DeskbarTray.py Thu Apr 3 13:17:36 2008
@@ -1,34 +1,23 @@
-import gtk
-import gnomeapplet
-import gobject
+from deskbar.ui.AbstractCuemiacDeskbarIcon import AbstractCuemiacDeskbarIcon
from gettext import gettext as _
-import deskbar
from os.path import join
-from deskbar.core.CoreImpl import CoreImpl
-from deskbar.ui.CuemiacWindowView import CuemiacWindowView
-from deskbar.ui.CuemiacAlignedView import CuemiacAlignedView
-from deskbar.ui.CuemiacWindowController import CuemiacWindowController
-from deskbar.core.GconfStore import GconfStore
+import deskbar
+import gnomeapplet
+import gobject
+import gtk
-class DeskbarTray (gtk.EventBox):
+class DeskbarTray (gtk.EventBox, AbstractCuemiacDeskbarIcon):
"""
- Button consisting of a image.
-
It automatically arranges itself according to one of
gnomeapplet.ORIENT_UP,gnomeapplet.ORIENT_{UP,DOWN,LEFT,RIGHT}.
-
- Signals:
- toggled-main: The main button has been toggle
"""
- __gsignals__ = {
- "toggled-main" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [gobject.TYPE_PYOBJECT]),
- }
def __init__ (self, applet):
gtk.EventBox.__init__ (self)
- self.active = False
- self.set_visible_window(False)
- self.set_sensitive(False)
+ AbstractCuemiacDeskbarIcon.__init__(self)
+
+ gtk.EventBox.set_visible_window(self, False)
+ gtk.EventBox.set_sensitive(self, False)
self.applet = applet
self.applet.set_background_widget(applet)
@@ -37,90 +26,26 @@
self.popup_dir = applet.get_orient()
self.image = gtk.Image ()
- self.add(self.image)
- self.connect('button-press-event', self.on_button_press)
+ gtk.EventBox.add(self, self.image)
+ gtk.EventBox.connect(self, 'button-press-event', self.on_button_press)
self.tooltips = gtk.Tooltips()
self.tooltips.set_tip(self, _("Show search entry"))
- self.__setup_applet_menu()
- self.__setup_mvc()
+ self.setup_menu()
+ self._setup_mvc()
self.on_change_size(self.applet, self.applet.get_size())
def on_button_press(self, widget, event):
if event.button == 1: # left mouse button
- self.set_active(not self.active, event.time)
+ AbstractCuemiacDeskbarIcon.set_active (self, not self.active, event.time)
return True
-
- def get_active(self):
- return self.active
-
- def set_active(self, active, time):
- changed = (self.active != active)
- self.active = active
-
- if changed:
- self.__show_toggle(self, time)
- self.emit ("toggled-main", self)
-
- def __setup_mvc(self):
- self.__core = CoreImpl(deskbar.MODULES_DIRS)
- self.__core.connect("loaded", self.__on_loaded)
+
+ def on_loaded(self, sender):
+ AbstractCuemiacDeskbarIcon.on_loaded (self, sender)
+ gtk.EventBox.set_sensitive(self, True)
- self.__controller = CuemiacWindowController(self.__core)
-
- # Select the view based on user choice. CuemiacWindowView is
- # the new style UI,
- # CuemiacAlignedView is the older UI as seen in the
- # Deskbar gnome-2-18 branch.
- if self.__core.get_ui_name() == deskbar.WINDOW_UI_NAME:
- self.__create_window_ui()
- else:
- # We need to use an AlignedWindow, which needs a Widget (self.image
- # in this case) and the applet (self.applet)
- self.__create_button_ui()
-
- self.__view.set_sensitive(False)
-
- GconfStore.get_instance().connect("ui-name-changed", self.__on_ui_name_changed)
-
- self.__core.run()
-
- def __create_button_ui(self):
- self.__view = CuemiacAlignedView(self.__controller, self.__core, self.image, self.applet)
- self._active_view = deskbar.BUTTON_UI_NAME
-
- def __create_window_ui(self):
- self.__view = CuemiacWindowView(self.__controller, self.__core)
- self._active_view = deskbar.WINDOW_UI_NAME
-
- def __setup_applet_menu(self):
- self.applet.setup_menu_from_file (
- deskbar.SHARED_DATA_DIR, "Deskbar_Applet.xml",
- None, [
- ("About", lambda a,b: self.__controller.on_show_about(a)),
- ("Prefs", lambda a,b: self.__controller.on_show_preferences(a)),
- ("Clear", lambda a,b: self.__controller.on_clear_history(a),),
- ("Help", lambda a,b: self.__controller.on_show_help(a),)
- ])
-
- def __on_loaded(self, sender):
- self.set_sensitive(True)
- self.__view.set_sensitive(True)
-
- def __show_toggle(self, widget, time):
- self.__controller.on_keybinding_activated(widget, time, False)
-
- def __on_ui_name_changed(self, gconfstore, name):
- if name != self._active_view:
- self.__view.destroy()
- if name == deskbar.WINDOW_UI_NAME:
- self.__create_window_ui()
- else:
- self.__create_button_ui()
- self._active_view = name
-
def set_button_image_from_file (self, filename, size):
# We use an intermediate pixbuf to scale the image
if self.popup_dir in [gnomeapplet.ORIENT_DOWN, gnomeapplet.ORIENT_UP]:
@@ -146,7 +71,17 @@
self.set_button_image_from_file (join(deskbar.ART_DATA_DIR, image_name), s)
- self.set_size_request( size, size )
-
+ self.set_size_request (size, size)
+
+ def setup_menu(self):
+ self.applet.setup_menu_from_file (
+ deskbar.SHARED_DATA_DIR, "Deskbar_Applet.xml",
+ None, [
+ ("About", lambda a,b: self._controller.on_show_about(a)),
+ ("Prefs", lambda a,b: self._controller.on_show_preferences(a)),
+ ("Clear", lambda a,b: self._controller.on_clear_history(a),),
+ ("Help", lambda a,b: self._controller.on_show_help(a),)
+ ])
+
if gtk.pygtk_version < (2,8,0):
gobject.type_register(DeskbarTray)
\ No newline at end of file
Modified: trunk/deskbar/ui/Makefile.am
==============================================================================
--- trunk/deskbar/ui/Makefile.am (original)
+++ trunk/deskbar/ui/Makefile.am Thu Apr 3 13:17:36 2008
@@ -4,7 +4,9 @@
deskbar_ui_PYTHON = \
__init__.py \
About.py \
+ AbstractCuemiacDeskbarIcon.py \
CuemiacWindowController.py \
CuemiacWindowView.py \
CuemiacAlignedView.py \
+ DeskbarStatusIcon.py \
DeskbarTray.py
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]