aboutsummaryrefslogtreecommitdiffstats
path: root/src/bookmarks
diff options
context:
space:
mode:
Diffstat (limited to 'src/bookmarks')
-rw-r--r--src/bookmarks/ephy-bookmarks-menu.c22
-rw-r--r--src/bookmarks/ephy-bookmarks.c4
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;
}