deskbar-applet r2361 - in trunk: . deskbar/core deskbar/ui
- From: sebp svn gnome org
- To: svn-commits-list gnome org
- Subject: deskbar-applet r2361 - in trunk: . deskbar/core deskbar/ui
- Date: Thu, 28 Aug 2008 10:21:20 +0000 (UTC)
Author: sebp
Date: Thu Aug 28 10:21:19 2008
New Revision: 2361
URL: http://svn.gnome.org/viewvc/deskbar-applet?rev=2361&view=rev
Log:
2008-08-28 Sebastian PÃlsterl <sebp cvs gnome org>
* deskbar/core/DeskbarHistory.py:
Added remove_index_and_save method
* deskbar/ui/DeskbarStatusIcon.py:
Create menu new each time the popup is requested.
Pressing the delete key will remove the selected item
from history
Modified:
trunk/ChangeLog
trunk/deskbar/core/DeskbarHistory.py
trunk/deskbar/ui/DeskbarStatusIcon.py
Modified: trunk/deskbar/core/DeskbarHistory.py
==============================================================================
--- trunk/deskbar/core/DeskbarHistory.py (original)
+++ trunk/deskbar/core/DeskbarHistory.py Thu Aug 28 10:21:19 2008
@@ -209,6 +209,10 @@
def remove_index(self, index):
self.remove (self.get_iter_from_string (str(index)))
+ def remove_index_and_save(self, index):
+ self.remove_index(index)
+ self.save()
+
def remove_and_save(self, aiter):
self.remove(aiter)
self.save()
Modified: trunk/deskbar/ui/DeskbarStatusIcon.py
==============================================================================
--- trunk/deskbar/ui/DeskbarStatusIcon.py (original)
+++ trunk/deskbar/ui/DeskbarStatusIcon.py Thu Aug 28 10:21:19 2008
@@ -13,7 +13,7 @@
class Item (gtk.ImageMenuItem):
- def __init__(self, label, stock_id=None, pixbuf=None):
+ def __init__(self, label=None, stock_id=None, pixbuf=None):
gtk.ImageMenuItem.__init__ (self)
self.box = gtk.HBox (False, 3)
@@ -22,64 +22,42 @@
self.image = gtk.Image ()
if stock_id != None:
- self.image.set_from_stock (stock_id, gtk.ICON_SIZE_MENU)
+ self.set_image_from_stock (stock_id)
elif isinstance(pixbuf, gtk.gdk.Pixbuf):
- self.image.set_from_pixbuf(pixbuf)
+ self.set_image_from_pixbuf(pixbuf)
self.image.show()
self.box.pack_start (self.image, False, False, 0)
self.label = gtk.Label ()
- self.label.set_markup(label)
+ self.set_markup(label)
self.label.show()
self.alignment = gtk.Alignment ()
self.alignment.add (self.label)
self.alignment.show()
self.box.pack_start (self.alignment)
-
- class HistoryMenu (gtk.Menu):
-
- def __init__(self, controller):
- gtk.Menu.__init__(self)
- self.__controller = controller
- self.__is_empty = True
- def add_action(self, text, action):
- if isinstance(action, EmptyHistoryAction):
- # TRANSLATORS: Below "Empty" is an adjective. As in
- # the state of being empty
- menuItem = DeskbarPopupMenu.Item (_("<i>Empty</i>"),
- pixbuf=CATEGORIES["history"]["icon"])
- self.__is_empty = True
- else:
- if self.__is_empty:
- self.clear()
-
- text = action.get_verb () % action.get_escaped_name(text)
- # We only want to display the first line of text
- # E.g. some beagle-live actions display a snippet in the second line
- text = text.split("\n")[0]
-
- menuItem = DeskbarPopupMenu.Item (text, pixbuf=action.get_pixbuf())
- menuItem.connect ("activate", self.__controller.on_history_match_selected, text, action)
-
- self.__is_empty = False
-
- self.append(menuItem)
+ def set_image_from_stock(self, stock_id):
+ if stock_id != None:
+ self.image.set_from_stock (stock_id, gtk.ICON_SIZE_MENU)
- def clear(self):
- for w in self:
- self.remove(w)
-
- def __init__(self, controller):
+ def set_image_from_pixbuf(self, pixbuf):
+ if pixbuf != None:
+ self.image.set_from_pixbuf(pixbuf)
+
+ def set_markup(self, text):
+ if text != None:
+ self.label.set_markup(text)
+
+ def __init__(self, controller, history):
gtk.Menu.__init__ (self)
menuItem = DeskbarPopupMenu.Item (_("History"),
pixbuf=CATEGORIES["history"]["icon"])
self.append(menuItem)
- self.historymenu = DeskbarPopupMenu.HistoryMenu(controller)
+ self.historymenu = HistoryMenu(controller, history)
menuItem.set_submenu(self.historymenu)
self.append(gtk.SeparatorMenuItem())
@@ -105,7 +83,73 @@
menuItem = DeskbarPopupMenu.Item (_("Quit"), gtk.STOCK_QUIT)
menuItem.connect ("activate", lambda w: gtk.main_quit())
self.append(menuItem)
+
+class HistoryMenu (gtk.Menu):
+
+ def __init__(self, controller, history):
+ gtk.Menu.__init__(self)
+ self.__controller = controller
+ self.__history = history
+ self.__is_empty = True
+ self.__selected_item = None
+
+ self.connect ("key-press-event", self.on_key_press_event)
+
+ for row in history:
+ text = row[history.COL_TEXT]
+ action = row[history.COL_ACTION]
+
+ menuItem = DeskbarPopupMenu.Item ()
+ menuItem.connect ("select", self.on_item_selected)
+ menuItem.connect ("activate",
+ self.__controller.on_history_match_selected,
+ text, action)
+
+ if isinstance(action, EmptyHistoryAction):
+ # TRANSLATORS: Below "Empty" is an adjective. As in
+ # the state of being empty
+ menuItem.set_markup(_("<i>Empty</i>"))
+ menuItem.set_image_from_pixbuf (CATEGORIES["history"]["icon"])
+
+ self.__is_empty = True
+ else:
+ text = action.get_verb () % action.get_escaped_name(text)
+ # We only want to display the first line of text
+ # E.g. some beagle-live actions display a snippet in the second line
+ text = text.split("\n")[0]
+
+ menuItem.set_markup(text)
+ menuItem.set_image_from_pixbuf(action.get_pixbuf())
+
+ self.__is_empty = False
+
+ self.append(menuItem)
+
+ def clear(self):
+ for w in self:
+ self.remove(w)
+ self.__selected_item = None
+ if not self.__is_empty:
+ self.append_empty_action()
+
+ def on_key_press_event(self, menu, event):
+ if event.keyval == gtk.keysyms.Delete:
+ if self.__selected_item != None:
+ # This is stupid put we need to get the
+ # position of the child somehow
+ for i, child in enumerate(self.get_children()):
+ if child == self.__selected_item:
+ break
+ self.__history.remove_index_and_save(i)
+ self.remove(self.__selected_item)
+ self.__selected_item = None
+ self.reposition()
+
+ def on_item_selected(self, item):
+ self.__selected_item = item
+
+
class DeskbarStatusIcon (gtk.StatusIcon, AbstractCuemiacDeskbarIcon):
def __init__(self):
@@ -120,11 +164,6 @@
self.connect ("popup-menu", self._on_popup_menu)
self._setup_mvc()
- self.setup_menu()
-
- history = self._core.get_history()
- history.connect("action-added", lambda w, t, a: self._menu.historymenu.add_action(t, a))
- history.connect("cleared", lambda w: self._menu.historymenu.clear())
self._on_size_changed(self, self.get_size())
@@ -140,8 +179,11 @@
AbstractCuemiacDeskbarIcon.set_active (self, not self.active, gtk.get_current_event_time())
def _on_popup_menu (self, status_icon, button, activate_time):
+ self.setup_menu()
self._menu.show_all()
- self._menu.popup(None, None, gtk.status_icon_position_menu, button, activate_time, self)
+ self._menu.popup(None, None,
+ gtk.status_icon_position_menu,
+ button, activate_time, self)
def _on_ui_name_changed(self, gconfstore, name):
if name != deskbar.WINDOW_UI_NAME:
@@ -159,5 +201,6 @@
raise NotImplementedError
def setup_menu(self):
- self._menu = DeskbarPopupMenu (self._controller)
-
+ self._menu = DeskbarPopupMenu (self._controller,
+ self._core.get_history())
+
\ No newline at end of file
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]