--- ./browser-bookmarks-menu.py 2005/12/14 02:18:27 1.1 +++ ./browser-bookmarks-menu.py 2005/12/14 03:54:22 @@ -7,6 +7,7 @@ import fileinput import gconf +import gnomevfs import gnome import gnomeapplet import gnome.ui @@ -429,27 +430,27 @@ def get_http_handler(): def get_bookmarks(): hh = get_http_handler() if hh.find("firefox") != -1: - return (MozillaFormatBookmarksParser(get_firefox_bookmarks_file_name()).root_menu,\ + return (get_firefox_bookmarks_file_name(), lambda x: MozillaFormatBookmarksParser(x).root_menu,\ "Manage Bookmarks...", None, None) # I would love to let the above line end with: # "firefox -chrome chrome://browser/content/bookmarks/bookmarksManager.xul") # but see mozilla bug 276422 # https://bugzilla.mozilla.org/show_bug.cgi?id=276422 elif hh.startswith("mozilla"): - return (MozillaFormatBookmarksParser(get_mozilla_bookmarks_file_name()).root_menu,\ + return (get_mozilla_bookmarks_file_name(), lambda x: MozillaFormatBookmarksParser(x).root_menu,\ None, None, None) elif hh.startswith("epiphany"): - return (EpiphanyFormatBookmarksParser(get_epiphany_bookmarks_file_name()).root_menu,\ + return (get_epiphany_bookmarks_file_name(), lambda x: EpiphanyFormatBookmarksParser(x).root_menu,\ "Edit Bookmarks", "epiphany --bookmarks-editor", - EpiphanyFormatFaviconsParser(*get_epiphany_favicon_paths()).favicons) + lambda: EpiphanyFormatFaviconsParser(*get_epiphany_favicon_paths()).favicons) elif hh.startswith("galeon"): - return (XbelFormatBookmarksParser(get_galeon_bookmarks_file_name()).root_menu,\ + return (get_galeon_bookmarks_file_name(), lambda x: XbelFormatBookmarksParser(x).root_menu,\ None, None, None) elif hh.startswith("konqueror"): - return (XbelFormatBookmarksParser(get_konqueror_bookmarks_file_name()).root_menu,\ + return (get_konqueror_bookmarks_file_name(), lambda x: XbelFormatBookmarksParser(x).root_menu,\ None, None, None) else: - return ([], None, None, None) + return (None, None, None, None, None) def applet_factory(applet, iid): @@ -463,8 +464,10 @@ def applet_factory(applet, iid): widget "*.browser-bookmarks-menu" style "browser-bookmarks-menubar-style"''') root_menu = gtk.Menu() - root_menu.connect("hide", on_menu_hidden) - root_menu.connect("show", on_menu_shown) + + bookmarks_info = get_bookmarks() + handle = gnomevfs.monitor_add(bookmarks_info[0], gnomevfs.MONITOR_FILE, on_bookmarks_file_changed, (root_menu, bookmarks_info)) + gobject.idle_add(on_bookmarks_file_changed, None, None, gnomevfs.MONITOR_EVENT_CHANGED, (root_menu, bookmarks_info)) root_menu_item = gtk.MenuItem("Bookmarks") root_menu_item.set_name("browser-bookmarks-menu") @@ -497,10 +500,10 @@ def applet_factory(applet, iid): return True -def fill_root_menu(menu): +def fill_root_menu(menu, info): tooltips = gtk.Tooltips() tooltips.enable() - (bookmarks_tree, bookmarks_editor_text, bookmarks_editor_cmd, favicons) = get_bookmarks() + (bookmarks_file, bookmarks_func, bookmarks_editor_text, bookmarks_editor_cmd, favicons_call) = info if bookmarks_editor_cmd is not None: menu_item = gtk.ImageMenuItem(bookmarks_editor_text) # little hack to scale the PNG file to the menu item height - there @@ -515,6 +518,14 @@ def fill_root_menu(menu): menu_item.connect("activate", run_command, bookmarks_editor_cmd) menu.append(menu_item) menu.append(gtk.SeparatorMenuItem()) + if bookmarks_func and bookmarks_file: + bookmarks_tree = bookmarks_func(bookmarks_file) + else: + bookmarks_tree = [] + if favicons_call: + favicons = favicons_call() + else: + favicons = {} fill_menu(menu, tooltips, bookmarks_tree, favicons) @@ -625,12 +636,12 @@ def on_menubar_click(widget, event): return False -def on_menu_hidden(menu): +def on_bookmarks_file_changed(monitorUri, infoUri, eventType, data): + if eventType != gnomevfs.MONITOR_EVENT_CHANGED: + return + menu, info = data menu.foreach(lambda x: menu.remove(x)) - - -def on_menu_shown(menu): - fill_root_menu(menu) + fill_root_menu(menu, info) menu.show_all() @@ -665,7 +676,8 @@ def printBookmarkList(bookmarks, level): if __name__ == "__main__": if len(sys.argv) == 2: if sys.argv[1] == "-print": - printBookmarkList(get_bookmarks()[0], 0) + (bookmarks_file, bookmarks_func, _, _, _) = get_bookmarks() + printBookmarkList(bookmarks_func(bookmarks_file), 0) elif sys.argv[1] == "-window": main_window = gtk.Window(gtk.WINDOW_TOPLEVEL)