[Xfce4-commits] <xfdesktop:master> Simplefy the menu reloading.

Nick Schermer noreply at xfce.org
Sat Apr 14 09:56:01 CEST 2012


Updating branch refs/heads/master
         to b049c60daa57ff71afc5ea2730c33e56b59b5e1a (commit)
       from 382e13d79a9f1fe2276c07cc6a69ccd083985dc7 (commit)

commit b049c60daa57ff71afc5ea2730c33e56b59b5e1a
Author: Nick Schermer <nick at xfce.org>
Date:   Sat Apr 14 01:14:38 2012 +0200

    Simplefy the menu reloading.
    
    I think a limitation is that when the menu file is moved,
    this is not picked up, but it improves the reload time of
    a menu alot and avoids possible looping.

 src/xfce-desktop-menu.c |   35 ++++++++---------------------------
 1 files changed, 8 insertions(+), 27 deletions(-)

diff --git a/src/xfce-desktop-menu.c b/src/xfce-desktop-menu.c
index 2e3b1de..6837195 100644
--- a/src/xfce-desktop-menu.c
+++ b/src/xfce-desktop-menu.c
@@ -75,11 +75,10 @@ struct _XfceDesktopMenu
 
     gboolean use_menu_icons;  /* show menu icons? */
 
-    gint idle_id;  /* source id for idled generation */
+    guint idle_id;  /* source id for idled generation */
 };
 
 
-static void _xfce_desktop_menu_free_menudata(XfceDesktopMenu *desktop_menu);
 static GtkIconTheme *_deskmenu_icon_theme = NULL;
 
 static gboolean _generate_menu_idled(gpointer data);
@@ -184,38 +183,19 @@ desktop_menu_add_items(XfceDesktopMenu *desktop_menu,
 static gboolean
 _generate_menu(XfceDesktopMenu *desktop_menu)
 {
-    gboolean ret = TRUE;
     GError *error = NULL;
 
-    _xfce_desktop_menu_free_menudata(desktop_menu);
-
-    /* allocate a menu for the ${XDG_MENU_PREFIX}applications.menu file */
-    desktop_menu->garcon_menu = garcon_menu_new_applications();
-
-    /* make sure the member variable is set to NULL when the object is destroyed */
-    g_object_add_weak_pointer (G_OBJECT (desktop_menu->garcon_menu), 
-                               (gpointer) &desktop_menu->garcon_menu);
+    DBG("Load menu");
 
     if(!garcon_menu_load (desktop_menu->garcon_menu, NULL, &error)) {
         g_warning("Unable to load menu: %s", error->message);
         g_error_free(error);
-        _xfce_desktop_menu_free_menudata(desktop_menu);
         return FALSE;
     }
 
-    g_signal_connect_swapped(desktop_menu->garcon_menu, "reload-required",
-                             G_CALLBACK(xfce_desktop_menu_reload), desktop_menu);
-
-    return ret;
+    return TRUE;
 }
 
-static void
-_xfce_desktop_menu_free_menudata(XfceDesktopMenu *desktop_menu)
-{
-    if(desktop_menu->garcon_menu) {
-        g_object_unref(G_OBJECT(desktop_menu->garcon_menu));
-    }
-}
 
 static gboolean
 _generate_menu_idled(gpointer data)
@@ -235,10 +215,13 @@ xfce_desktop_menu_new(gboolean deferred)
 {
     XfceDesktopMenu *desktop_menu = g_new0(XfceDesktopMenu, 1);
 
-    desktop_menu->use_menu_icons = TRUE;
-
     garcon_set_environment("XFCE");
 
+    desktop_menu->use_menu_icons = TRUE;
+    desktop_menu->garcon_menu = garcon_menu_new_applications();
+    g_signal_connect_swapped(desktop_menu->garcon_menu, "reload-required",
+                             G_CALLBACK(xfce_desktop_menu_reload), desktop_menu);
+
     if(deferred)
         desktop_menu->idle_id = g_idle_add(_generate_menu_idled, desktop_menu);
     else {
@@ -340,8 +323,6 @@ xfce_desktop_menu_destroy(XfceDesktopMenu *desktop_menu)
                                          G_CALLBACK(xfce_desktop_menu_reload),
                                          desktop_menu);
 
-    _xfce_desktop_menu_free_menudata(desktop_menu);
-
     if(desktop_menu->garcon_menu) {
         g_signal_handlers_disconnect_by_func(desktop_menu->garcon_menu,
             G_CALLBACK(xfce_desktop_menu_reload), desktop_menu);


More information about the Xfce4-commits mailing list