[Xfce4-commits] <garcon:master> Merge multiple reload-required signals.
Nick Schermer
noreply at xfce.org
Sat Jun 25 17:12:02 CEST 2011
Updating branch refs/heads/master
to 3ffd9b2a021e730fbca82f2b8085c80815b4f738 (commit)
from afc4f4b3a844cbdc8e036363e033caed4e17b9a7 (commit)
commit 3ffd9b2a021e730fbca82f2b8085c80815b4f738
Author: Nick Schermer <nick at xfce.org>
Date: Sat Jun 25 17:09:03 2011 +0200
Merge multiple reload-required signals.
The signal is triggered up to 5 times when the menu is
changed. Use and idle to combine those events in 1
signal emit.
garcon/garcon-menu.c | 36 +++++++++++++++++++++++++++++++++---
1 files changed, 33 insertions(+), 3 deletions(-)
diff --git a/garcon/garcon-menu.c b/garcon/garcon-menu.c
index e7c8871..0bd1d6b 100644
--- a/garcon/garcon-menu.c
+++ b/garcon/garcon-menu.c
@@ -216,6 +216,9 @@ struct _GarconMenuPrivate
/* Flag for marking custom path menus */
guint uses_custom_path : 1;
+
+ /* idle reload-required to group events */
+ guint idle_reload_required_id;
};
@@ -330,6 +333,7 @@ garcon_menu_init (GarconMenu *menu)
menu->priv->pool = garcon_menu_item_pool_new ();
menu->priv->uses_custom_path = TRUE;
menu->priv->changed_files = NULL;
+ menu->priv->idle_reload_required_id = 0;
/* Take reference on the menu item cache */
menu->priv->cache = garcon_menu_item_cache_get_default ();
@@ -377,6 +381,13 @@ garcon_menu_clear (GarconMenu *menu)
/* Clear the item pool */
garcon_menu_item_pool_clear (menu->priv->pool);
+
+ /* Stop reload-required emit */
+ if (menu->priv->idle_reload_required_id != 0)
+ {
+ g_source_remove (menu->priv->idle_reload_required_id);
+ menu->priv->idle_reload_required_id = 0;
+ }
}
@@ -2030,6 +2041,22 @@ garcon_menu_monitor_directory_dirs (GarconMenu *menu)
+static gboolean
+garcon_menu_file_emit_reload_required (gpointer data)
+{
+ GarconMenu *menu = GARCON_MENU (data);
+
+ g_return_val_if_fail (GARCON_IS_MENU (menu), FALSE);
+
+ menu->priv->idle_reload_required_id = 0;
+
+ g_signal_emit (menu, menu_signals[RELOAD_REQUIRED], 0);
+
+ return FALSE;
+}
+
+
+
static void
garcon_menu_file_changed (GarconMenu *menu,
GFile *file,
@@ -2051,7 +2078,8 @@ garcon_menu_file_changed (GarconMenu *menu,
/* Quick check: reloading is needed if the menu file being used has changed */
if (g_file_equal (menu->priv->file, file))
{
- g_signal_emit (menu, menu_signals[RELOAD_REQUIRED], 0);
+ if (menu->priv->idle_reload_required_id == 0)
+ menu->priv->idle_reload_required_id = g_idle_add (garcon_menu_file_emit_reload_required, menu);
return;
}
@@ -2089,8 +2117,10 @@ garcon_menu_file_changed (GarconMenu *menu,
g_free (relative_filename);
/* If the event file has higher priority, a menu reload is needed */
- if (!lower_priority && higher_priority)
- g_signal_emit (menu, menu_signals[RELOAD_REQUIRED], 0);
+ if (!lower_priority
+ && higher_priority
+ && menu->priv->idle_reload_required_id == 0)
+ menu->priv->idle_reload_required_id = g_idle_add (garcon_menu_file_emit_reload_required, menu);
}
More information about the Xfce4-commits
mailing list