diff --git a/python/applet/applet.py b/python/applet/applet.py
index 6487d23..c25e050 100755
--- a/python/applet/applet.py
+++ b/python/applet/applet.py
@@ -1,27 +1,63 @@
+#!/usr/bin/env python
+
import os
import gtk
import dbus
+import gobject
+
+POPUP_TIMEOUT_MILLIS = 3000
+POLL_MILLIS = 5000
+
+class Popup (gtk.Window):
+ def __init__ (self, status, widget):
+ gtk.Window.__init__ (self)
+ self.set_decorated (False)
+ self.set_skip_taskbar_hint (True)
+ self.set_skip_pager_hint (True)
+ self.set_keep_above (True)
+ self.set_resizable (False)
+ label = gtk.Label ("MetaTracker is " + status)
+ label.show ()
+ ebox = gtk.EventBox ()
+ ebox.set_visible_window (True)
+ ebox.set_above_child (True)
+ ebox.add (label)
+ ebox.modify_bg (gtk.STATE_NORMAL, gtk.gdk.Color (65535, 65535, 56576))
+ ebox.set_border_width (1)
+ ebox.show ()
+ self.add (ebox)
+ self.show ()
+ scr, rect, orient = widget.get_geometry ()
+ wdir = (rect.x > scr.get_width () / 2) and -1 or 1
+ hdir = (rect.y > scr.get_height () / 2) and -1 or 1
+ width, height = self.get_size ()
+ self.modify_bg (gtk.STATE_NORMAL, gtk.gdk.Color (0,0,0))
+ self.move (rect.x + (width / 2) * wdir, rect.y + (height / 2) * hdir)
+ #self.style.paint_flat_box(self.window, gtk.STATE_NORMAL, gtk.SHADOW_OUT, None, self, 'tooltip', 0, 0, width, height)
class TrackerStatusIcon(gtk.StatusIcon):
def __init__(self):
gtk.StatusIcon.__init__(self)
menu = '''
-
-
-
-
-
+
+
+
+
+
'''
actions = [
- ('Menu', None, 'Menu'),
+ ('Menu', None, 'Menu'),
('Search', None, '_Search...', None, 'Search files with MetaTracker', self.on_activate),
('Preferences', gtk.STOCK_PREFERENCES, '_Preferences...', None, 'Change MetaTracker preferences', self.on_preferences),
- ('About', gtk.STOCK_ABOUT, '_About...', None, 'About MetaTracker', self.on_about)]
+ ('About', gtk.STOCK_ABOUT, '_About...', None, 'About MetaTracker', self.on_about),
+ ('Quit', gtk.STOCK_QUIT, '_Quit...', None, 'Quit Status Applet', gtk.main_quit)]
ag = gtk.ActionGroup('Actions')
ag.add_actions(actions)
self.manager = gtk.UIManager()
@@ -39,22 +75,53 @@ class TrackerStatusIcon(gtk.StatusIcon):
self.set_visible(True)
self.connect('activate', self.on_activate)
self.connect('popup-menu', self.on_popup_menu)
+ self.old_status = ""
+ self.connectToDBus ()
+ gobject.timeout_add (0, self.check_tracker_state)
+
+ def connectToDBus (self):
+ self.bus = dbus.SessionBus ()
+ self.connectToTracker ()
+
+ def connectToTracker (self):
+ self.obj = self.bus.get_object('org.freedesktop.Tracker','/org/freedesktop/tracker')
+ self.tracker = dbus.Interface(self.obj, 'org.freedesktop.Tracker')
+
+ def getTrackerStatus (self):
+ st = ""
+ try: st = str (self.tracker.GetStatus ())
+ except:
+ st = "Unreachable!"
+ try: self.connectToTracker ()
+ except: pass
+ return st
+
+ def check_tracker_state (self):
+ stat = self.getTrackerStatus ()
+ if stat != self.old_status:
+ p = Popup (stat, self)
+ gobject.timeout_add (POPUP_TIMEOUT_MILLIS, p.destroy)
+ self.old_status = stat
+ self.set_tooltip ("MetaTracker is " + stat)
+ gobject.timeout_add (POLL_MILLIS, self.check_tracker_state)
def on_activate(self, data):
- os.spawnlpe(os.P_NOWAIT, 'tracker-search-tool', os.environ)
+ tst="tracker-search-tool"
+ os.spawnlp (os.P_NOWAIT, tst, tst)
def on_popup_menu(self, status, button, time):
self.menu.popup(None, None, None, button, time)
def on_preferences(self, data):
- os.spawnlpe(os.P_NOWAIT, 'tracker-preferences',os.environ)
+ tp="tracker-preferences"
+ os.spawnlp (os.P_NOWAIT, tp, tp)
def on_about(self, data):
dialog = gtk.AboutDialog()
dialog.set_name('MetaTracker')
dialog.set_version('0.6.0')
dialog.set_comments('A desktop indexing and search tool')
- dialog.set_website('www.freedesktop.org/Tracker')
+ dialog.set_website('http://www.tracker-project.org/')
dialog.set_logo(gtk.gdk.pixbuf_new_from_file_at_size('applet.svg', 64, 64))
dialog.run()
dialog.destroy()