diff options
Diffstat (limited to 'src/bookmarks')
-rw-r--r-- | src/bookmarks/ephy-bookmarks-menu.c | 22 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmarks.c | 4 |
2 files changed, 23 insertions, 3 deletions
diff --git a/src/bookmarks/ephy-bookmarks-menu.c b/src/bookmarks/ephy-bookmarks-menu.c index 89348a5e8..4182f125e 100644 --- a/src/bookmarks/ephy-bookmarks-menu.c +++ b/src/bookmarks/ephy-bookmarks-menu.c @@ -42,6 +42,7 @@ struct _EphyBookmarksMenuPrivate EphyBookmarks *bookmarks; EggActionGroup *action_group; guint ui_id; + guint update_tag; }; /** @@ -322,7 +323,10 @@ ephy_bookmarks_menu_rebuild (EphyBookmarksMenu *menu) g_free (verb); } - add_bookmarks_menu (menu, not_categorized, xml); + if (ephy_node_get_n_children (not_categorized) > 0) + { + add_bookmarks_menu (menu, not_categorized, xml); + } g_string_append (xml, "</placeholder></submenu></menu></Root>"); @@ -392,10 +396,23 @@ ephy_bookmarks_menu_class_init (EphyBookmarksMenuClass *klass) G_PARAM_READWRITE)); } +static gboolean +do_updates (EphyBookmarksMenu *menu) +{ + ephy_bookmarks_menu_rebuild (menu); + + menu->priv->update_tag = 0; + + return FALSE; +} + static void bookmarks_tree_changed_cb (EphyBookmarks *bookmarks, EphyBookmarksMenu *menu) { - ephy_bookmarks_menu_rebuild (menu); + if (menu->priv->update_tag == 0) + { + menu->priv->update_tag = g_idle_add((GSourceFunc)do_updates, menu); + } } static void @@ -412,6 +429,7 @@ ephy_bookmarks_menu_init (EphyBookmarksMenu *menu) menu->priv->ui_id = -1; menu->priv->action_group = NULL; + menu->priv->update_tag = 0; } static void diff --git a/src/bookmarks/ephy-bookmarks.c b/src/bookmarks/ephy-bookmarks.c index 86a10d457..801aadc87 100644 --- a/src/bookmarks/ephy-bookmarks.c +++ b/src/bookmarks/ephy-bookmarks.c @@ -532,7 +532,6 @@ bookmarks_changed_cb (EphyNode *node, EphyBookmarks *eb) { ephy_bookmarks_emit_data_changed (eb); - g_signal_emit (G_OBJECT (eb), ephy_bookmarks_signals[TREE_CHANGED], 0); } static void @@ -624,6 +623,8 @@ topics_removed_cb (EphyNode *node, g_free (list); } ephy_node_thaw (child); + + g_signal_emit (G_OBJECT (eb), ephy_bookmarks_signals[TREE_CHANGED], 0); } static void @@ -795,6 +796,7 @@ ephy_bookmarks_add (EphyBookmarks *eb, ephy_node_add_child (eb->priv->notcategorized, bm); ephy_bookmarks_emit_data_changed (eb); + g_signal_emit (G_OBJECT (eb), ephy_bookmarks_signals[TREE_CHANGED], 0); return bm; } |