--- /usr/lib/deskbar-applet/handlers/files.py.orig	2007-08-30 00:22:06.000000000 +0200
+++ /usr/lib/deskbar-applet/handlers/files.py	2007-10-10 00:47:08.000000000 +0200
@@ -13,23 +13,59 @@
 from deskbar.Utils import spawn_async, url_show_file
 
 
+NETWORK_URIS = ["http", "ftp", "smb", "sftp"]
+AUDIO_URIS = ["cdda"]
+MONITOR = gnomevfs.VolumeMonitor()
+
+GTK_BOOKMARKS_FILE = expanduser("~/.gtk-bookmarks")
+
+GCONF_OTHERWORKDIR  = deskbar.GCONF_DIR+"/files/workdir"
+
+def _check_requirements():
+	return (deskbar.Handler.HANDLER_IS_CONFIGURABLE, _("You can configure a work directory."), _on_config_account)
+
 HANDLERS = {
 	"FileFolderHandler" : {
 		"name": _("Files, Folders and Places"),
 		"description": _("View your files, folders, bookmarks, drives, network places by name"),
+		"requirements" : _check_requirements,
 		"version": VERSION,
 	},
 }
 
-NETWORK_URIS = ["http", "ftp", "smb", "sftp"]
-AUDIO_URIS = ["cdda"]
-MONITOR = gnomevfs.VolumeMonitor()
-
-GTK_BOOKMARKS_FILE = expanduser("~/.gtk-bookmarks")
+def _on_config_account(dialog):
+	dialog = gtk.Dialog(_("Work direktory"), dialog,
+				gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+				(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
+				gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
+	
+	dialog.vbox.add(gtk.Label(_("Beside your home directory, you can here define another directory that will be looked in. ")))
+	
+	table = gtk.Table(rows=1, columns=2)
+	
+	user_entry = gtk.Entry()
+	t = deskbar.GCONF_CLIENT.get_string(GCONF_OTHERWORKDIR)
+	if t != None:
+		user_entry.set_text(t)
+	table.attach(gtk.Label(_("Work directory: ")), 0, 1, 0, 1)
+	table.attach(user_entry, 1, 2, 0, 1)
+	
+	dialog.vbox.add(table)
+	dialog.vbox.add(gtk.Label(_("The query has to start with a double-colon (:). ")))
+	
+	dialog.show_all()
+	response = dialog.run()
+	dialog.destroy()
+	
+	if response == gtk.RESPONSE_ACCEPT and user_entry.get_text() != "" and exists(user_entry.get_text()):
+		deskbar.GCONF_CLIENT.set_string(GCONF_OTHERWORKDIR, user_entry.get_text())
+	else:
+		deskbar.GCONF_CLIENT.set_string(GCONF_OTHERWORKDIR, None)
 
 class FileMatch(deskbar.Match.Match):
 	def __init__(self, backend, name=None, absname=None, **args):
-		deskbar.Match.Match.__init__(self, backend, name=name, **args)
+		otherhome = deskbar.GCONF_CLIENT.get_string(GCONF_OTHERWORKDIR)
+		deskbar.Match.Match.__init__(self, backend, name=my_nicename(name,otherhome), **args)
 		self._icon = deskbar.Utils.load_icon_for_file(absname)
 		
 		self.absname = absname
@@ -51,7 +87,8 @@
 
 class FolderMatch(deskbar.Match.Match):
 	def __init__(self, backend, name=None, absname=None, **args):
-		deskbar.Match.Match.__init__(self, backend, name=name, **args)
+		otherhome = deskbar.GCONF_CLIENT.get_string(GCONF_OTHERWORKDIR)
+		deskbar.Match.Match.__init__(self, backend, name=my_nicename(name, otherhome), **args)
 		self._icon = deskbar.Utils.load_icon_for_file(absname)
 		
 		self.absname = absname
@@ -205,25 +242,35 @@
 	"""
 	relative = False
 	# Path with no leading ~ or / are considered relative to ~
-	if not prefix.startswith("~") and not prefix.startswith("/"):
+	if not prefix.startswith("~") and not prefix.startswith("/") and not prefix.startswith(":"):
 		relative = True
 		prefix = join("~/", prefix)
 	# Path starting with ~test are considered in ~/test
 	if prefix.startswith("~") and not prefix.startswith("~/") and len(prefix) > 1:
 		prefix = join("~/", prefix[1:])
-	if prefix.endswith("/"):
-		prefix = prefix[:-1]
-		
+	#if prefix.endswith("/"):
+	#	prefix = prefix[:-1]
 	if prefix == "~":
 		return ([expanduser(prefix)], dirname(expanduser(prefix)), relative)
 
 	# Now we see if the typed name matches exactly a file/directory, or
 	# If we must take the parent directory and match the beginning of each file
 	start = None
-	path = normpath(abspath(expanduser(prefix)))		
+	
+	otherhome = deskbar.GCONF_CLIENT.get_string(GCONF_OTHERWORKDIR)
+	
+	if prefix.startswith(":") and exists(otherhome):
+		start = prefix[1:]
+		prefix = join(otherhome,start)
+		prefix, start = split(prefix)
+		path = normpath(abspath(prefix))
+		relative = False
+	else:
+		prefix, start = split(prefix)
+		path = normpath(abspath(expanduser(prefix)))		
 
-	prefix, start = split(prefix)
-	path = normpath(abspath(expanduser(prefix)))	
+	#prefix, start = split(prefix)
+	#path = normpath(abspath(expanduser(prefix)))	
 	if not exists(path):
 		# The parent dir wasn't a valid file, exit
 		return ([], prefix, relative)
@@ -240,7 +287,7 @@
 			return ([path], dirname(prefix), relative)
 		else:
 			return ([], prefix, relative)
-
+	
 	return ([f
 		for f in map(lambda x: join(path, x), os.listdir(path))
 		if my_isfile(f) == is_file and not basename(f).startswith(".") and (start == None or basename(f).startswith(start))
@@ -249,3 +296,10 @@
 #FIXME: gross hack to detect .savedSearches from nautilus as folders
 def my_isfile(path):
 	return isfile(path) and not path.endswith(".savedSearch")
+def my_nicename(f, path):
+	if(path != None and f.startswith(path)):
+		return ":" + f[len(path):]
+	else:
+		return f
+	
+
