Re: [Deskbar] Google Live handler!



And the patch
Index: deskbar/aligned_window.py
===================================================================
RCS file: deskbar/aligned_window.py
diff -N deskbar/aligned_window.py
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ deskbar/aligned_window.py	17 Oct 2005 16:13:07 -0000
@@ -0,0 +1,93 @@
+#!/usr/bin/python
+import gtk
+import gnomeapplet
+
+class AlignedWindow(gtk.Window):
+
+    def __init__(self, widgetToAlignWith, orient_func):
+        gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
+        self.set_decorated(False)
+        
+        self.widgetToAlignWith = widgetToAlignWith
+        self.get_orient = orient_func
+
+    def positionWindow(self):
+        # Get our own dimensions & position
+        self.realize()
+        gtk.gdk.flush()
+        ourWidth  = (self.window.get_geometry())[2]
+        ourHeight = (self.window.get_geometry())[3]
+
+        # Skip the taskbar, and the pager, stick and stay on top
+        self.stick()
+        self.set_keep_above(True)
+        self.set_skip_pager_hint(True)
+        self.set_skip_taskbar_hint(True)
+        self.set_type_hint (gtk.gdk.WINDOW_TYPE_HINT_DOCK)
+
+        # Get the dimensions/position of the widgetToAlignWith
+        self.widgetToAlignWith.realize()
+        (x, y) = self.widgetToAlignWith.window.get_origin()
+
+        (w, h) = self.get_size()
+        (w, h) = self.size_request()
+
+        button_w = self.widgetToAlignWith.allocation.width
+        button_h = self.widgetToAlignWith.allocation.height
+
+        screen = self.get_screen()
+
+        found_monitor = False
+        n = screen.get_n_monitors()
+        for i in range(0, n):
+                monitor = screen.get_monitor_geometry(i)
+                if (x >= monitor.x and x <= monitor.x + monitor.width and \
+                    y >= monitor.y and y <= monitor.y + monitor.height):
+                        found_monitor = True
+                        break
+        
+        if not found_monitor:
+                monitor = gtk.gdk.Rectangle(0, 0, screen.get_width(), screen.get_width())
+        
+        orient = self.get_orient()
+        if orient == gnomeapplet.ORIENT_RIGHT:
+                x += button_w
+
+                if ((y + h) > monitor.y + monitor.height):
+                        y -= (y + h) - (monitor.y + monitor.height)
+                
+                if ((y + h) > (monitor.height / 2)):
+                        gravity = gtk.gdk.GRAVITY_SOUTH_WEST
+                else:
+                        gravity = gtk.gdk.GRAVITY_NORTH_WEST
+        elif orient == gnomeapplet.ORIENT_LEFT:
+                x -= w
+
+                if ((y + h) > monitor.y + monitor.height):
+                        y -= (y + h) - (monitor.y + monitor.height)
+                
+                if ((y + h) > (monitor.height / 2)):
+                        gravity = gtk.gdk.GRAVITY_SOUTH_EAST
+                else:
+                        gravity = gtk.gdk.GRAVITY_NORTH_EAST
+        elif orient == gnomeapplet.ORIENT_DOWN:
+                y += button_h
+
+                if ((x + w) > monitor.x + monitor.width):
+                        x -= (x + w) - (monitor.x + monitor.width)
+
+                gravity = gtk.gdk.GRAVITY_NORTH_WEST
+        elif orient == gnomeapplet.ORIENT_UP:
+                y -= h
+
+                if ((x + w) > monitor.x + monitor.width):
+                        x -= (x + w) - (monitor.x + monitor.width)
+
+                gravity = gtk.gdk.GRAVITY_SOUTH_WEST
+        
+        # -"Coordinates locked in captain."
+        # -"Engage."
+        self.move(x, y)
+        self.set_gravity(gravity)
+        self.show()
+
Index: deskbar/applet.py
===================================================================
RCS file: /cvs/gnome/deskbar-applet/deskbar/applet.py,v
retrieving revision 1.24
diff -u -p -r1.24 applet.py
--- deskbar/applet.py	16 Oct 2005 20:57:59 -0000	1.24
+++ deskbar/applet.py	17 Oct 2005 16:13:07 -0000
@@ -7,10 +7,11 @@ import deskbar, deskbar.deskbarentry, de
 from deskbar.module_list import ModuleLoader, ModuleList, ModuleLoader
 from deskbar.preferences import update_modules_priority
 
-class DeskbarApplet:
-	def __init__(self, applet):
-		self.applet = applet
-		
+class DeskbarApplet(gnomeapplet.Applet):
+	def __init__(self):
+		gnomeapplet.Applet.__init__(self)
+	
+	def init(self):
 		self._inited_modules = 0
 		self._loaded_modules = 0
 		
@@ -23,13 +24,13 @@ class DeskbarApplet:
 		self.loader.connect ("module-initialized", self.module_list.module_toggled_cb)
 		self.loader.connect ("module-initialized", self.on_module_initialized)
 		self.loader.connect ("module-stopped", self.module_list.module_toggled_cb)
-		
-		self.entry = deskbar.deskbarentry.DeskbarEntry(self.module_list)
+				
+		self.entry = deskbar.deskbarentry.DeskbarEntry(self, self.module_list)
 		self.entry.get_evbox().connect("button-press-event", self.on_icon_button_press)
 		self.entry.get_entry().connect("button-press-event", self.on_entry_button_press)
 		self.loader.connect ("module-initialized", self.entry._connect_if_async)
 		self.on_applet_sensivity_update(False)
-
+				
 		self.keybinder = deskbar.applet_keybinder.AppletKeybinder(self)
 
 		# Set and retreive entry width from gconf
@@ -42,15 +43,15 @@ class DeskbarApplet:
 			self.config_expand = False
 		deskbar.GCONF_CLIENT.notify_add(deskbar.GCONF_EXPAND, lambda x, y, z, a: self.on_config_expand(z.value))
 				
-		self.applet.set_flags(gtk.CAN_FOCUS)
-		self.applet.add(self.entry)
-		self.applet.connect("button-press-event", self.on_applet_button_press)
-		self.applet.connect('destroy', lambda x: self.keybinder.unbind())
-		self.applet.setup_menu_from_file (
+		self.set_flags(gtk.CAN_FOCUS)
+		self.add(self.entry)
+		self.connect("button-press-event", self.on_applet_button_press)
+		self.connect('destroy', lambda x: self.keybinder.unbind())
+		self.setup_menu_from_file (
 			None, os.path.join(deskbar.SHARED_DATA_DIR, "Deskbar_Applet.xml"),
 			None, [("About", self.on_about), ("Prefs", self.on_preferences)])
 
-		self.applet.show_all()
+		self.show_all()
 		self.sync_applet_size()
 		
 		self.entry.get_entry().grab_focus()
@@ -73,9 +74,9 @@ class DeskbarApplet:
 	
 	def sync_applet_size(self):
 		if self.config_expand:
-			self.applet.set_applet_flags(gnomeapplet.EXPAND_MINOR | gnomeapplet.EXPAND_MAJOR)
+			self.set_applet_flags(gnomeapplet.EXPAND_MINOR | gnomeapplet.EXPAND_MAJOR)
 		else:
-			self.applet.set_applet_flags(0)
+			self.set_applet_flags(0)
 			
 			# Set the new size of the entry
 			self.entry.get_entry().set_width_chars(self.config_width)
@@ -112,7 +113,7 @@ class DeskbarApplet:
 			
 		try:
 			# GNOME 2.12
-			self.applet.request_focus(long(event.time))
+			self.request_focus(long(event.time))
 		except AttributeError:
 			pass
 			
@@ -131,7 +132,7 @@ class DeskbarApplet:
 			return False
 			
 		if event.button == 3:
-			self.applet.emit("button-press-event", event)
+			self.emit("button-press-event", event)
 			return True
 		elif event.button == 1:
 			self.build_history_menu(event)
@@ -142,7 +143,7 @@ class DeskbarApplet:
 	def on_entry_button_press(self, widget, event):
 		try:
 			# GNOME 2.12
-			self.applet.request_focus(long(event.time))
+			self.request_focus(long(event.time))
 		except AttributeError:
 			pass
 			
@@ -193,3 +194,5 @@ class DeskbarApplet:
 
 		menu.show_all()
 		menu.popup(None, None, None, event.button, event.time)
+
+gobject.type_register(DeskbarApplet)
Index: deskbar/deskbar-applet
===================================================================
RCS file: /cvs/gnome/deskbar-applet/deskbar/deskbar-applet,v
retrieving revision 1.10
diff -u -p -r1.10 deskbar-applet
--- deskbar/deskbar-applet	16 Oct 2005 20:57:59 -0000	1.10
+++ deskbar/deskbar-applet	17 Oct 2005 16:13:07 -0000
@@ -5,7 +5,6 @@
 
 import gtk
 gtk.threads_init()
-
 import gnomeapplet
 
 import getopt, sys
@@ -23,11 +22,11 @@ else:
 	print "Running installed deskbar, using normal PYTHONPATH"
 
 # Now the path is set, import our applet
-import deskbar.applet	
+import deskbar, deskbar.applet	
+import gettext
 
-def applet_factory(applet, iid):
-	deskbar.applet.DeskbarApplet(applet)
-	return True
+gettext.bindtextdomain('deskbar-applet', join(deskbar.DATA_DIR, "locale"))
+gettext.textdomain('deskbar-applet')
 
 # Return a standalone window that holds the applet
 def build_window():
@@ -36,8 +35,8 @@ def build_window():
 	app.connect("destroy", gtk.main_quit)
 	app.set_property('resizable', False)
 	
-	applet = gnomeapplet.Applet()
-	applet_factory(applet, None)
+	applet = deskbar.applet.DeskbarApplet()
+	applet.init()
 	applet.reparent(app)
 		
 	app.show_all()
@@ -79,9 +78,13 @@ if __name__ == "__main__":	
 		build_window()
 		gtk.main()
 	else:
+		def applet_factory(applet, iid):
+			applet.init()
+			return True
+	
 		gnomeapplet.bonobo_factory(
 			"OAFIID:Deskbar_Applet_Factory",
-			gnomeapplet.Applet.__gtype__,
+			deskbar.applet.DeskbarApplet.__gtype__,
 			"deskbar-applet",
 			"0",
 			applet_factory)
Index: deskbar/deskbarentry.py
===================================================================
RCS file: /cvs/gnome/deskbar-applet/deskbar/deskbarentry.py,v
retrieving revision 1.17
diff -u -p -r1.17 deskbarentry.py
--- deskbar/deskbarentry.py	16 Oct 2005 20:57:59 -0000	1.17
+++ deskbar/deskbarentry.py	17 Oct 2005 16:13:07 -0000
@@ -6,6 +6,7 @@ import gtk, gobject
 import deskbar, deskbar.iconentry
 from deskbar.module_list import ModuleList
 from deskbar.handler import *
+import aligned_window
 
 # The liststore columns
 HANDLER_PRIO_COL = 0
@@ -27,7 +28,7 @@ MOVE_UP   = -1
 MOVE_DOWN = +1
 
 class DeskbarEntry(deskbar.iconentry.IconEntry):
-	def __init__(self, module_list):
+	def __init__(self, applet, module_list):
 		deskbar.iconentry.IconEntry.__init__(self)
 		
 		# Set up the Handlers
@@ -67,33 +68,37 @@ class DeskbarEntry(deskbar.iconentry.Ico
 		self._completion_model.set_sort_func(SORT_BY_HANDLER_MATCH_ACTION, self._on_sort_matches)
 		
 		# Create the completion model
-		completion = gtk.EntryCompletion()
-		try:
-			# PyGTK >= 2.8
-			completion.set_popup_set_width(False)
-			completion.set_property("text-column", ACTION_COL)
-		except AttributeError:
-			pass
-			
-		try:
-			# PyGTK >= 2.4
-			completion.set_match_func(lambda x, y, z: True)
-			completion.set_model(self._completion_model)
-		except AttributeError:
-			pass
-			
-		completion.connect("match-selected", self._on_completion_selected)
-		entry.set_completion(completion)
+		self.completion_view = gtk.TreeView(self._completion_model)
+		self.completion_view.set_property('enable-search', False)
+		self.completion_view.set_property('headers-visible', False)
+		self.completion_view.set_property('rules-hint', True)
+		self.completion_view.connect("row-activated", self._on_completion_selected)
 		
-		# Paint  it accordingly		
+		# Paint it
 		renderer = gtk.CellRendererPixbuf()
-		completion.pack_start(renderer)
-		completion.add_attribute(renderer, "pixbuf", ICON_COL)
+		column_icon = gtk.TreeViewColumn ("Icon", renderer)
+		column_icon.set_attributes (renderer, pixbuf=ICON_COL)
+		
+		renderer = gtk.CellRendererText ()
+		column_description = gtk.TreeViewColumn ("Description", renderer)
+		column_description.set_attributes (renderer, markup=ACTION_COL)
+		
+		self.completion_view.append_column(column_icon)
+		self.completion_view.append_column(column_description)
+
+		self.dropdown = aligned_window.AlignedWindow(self, applet.get_orient)
+		
+		scroll = gtk.ScrolledWindow()
+		scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER)
+		scroll.set_property("hscrollbar-policy", gtk.POLICY_NEVER)
+		scroll.set_property("vscrollbar-policy", gtk.POLICY_AUTOMATIC)
+		scroll.set_property('shadow-type', gtk.SHADOW_IN)
+		scroll.set_property('window-placement', gtk.CORNER_TOP_LEFT)
+		scroll.add(self.completion_view)
+		scroll.show_all()
+		
+		self.dropdown.add(scroll)
 		
-		renderer = gtk.CellRendererText()
-		completion.pack_start(renderer)
-		completion.add_attribute(renderer, "markup", ACTION_COL)
-	
 	def get_evbox(self):
 		return self._evbox
 	
@@ -126,8 +131,8 @@ class DeskbarEntry(deskbar.iconentry.Ico
 		else:
 			return 0
 			
-	def _on_completion_selected(self, completion, model, iterator):
-		match = model[iterator][MATCH_COL]
+	def _on_completion_selected(self, treeview, path, column):
+		match = model[treeview.get_model().get_iter(path)][MATCH_COL]
 		text = self.get_entry().get_text().strip()
 		
 		# Do the action, match will be either a regular selected manually match
@@ -235,6 +240,10 @@ class DeskbarEntry(deskbar.iconentry.Ico
 			self._append_matches (result)
 		else:
 			self._append_matches (matches)
+		
+		self.get_entry().grab_focus()
+		self.dropdown.show()
+		self.get_entry().grab_focus()
 	
 	def _append_matches (self, matches):
 		"""

Attachment: signature.asc
Description: This is a digitally signed message part



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