Support recognizing current DE with $XDG_CURRENT_DESKTOP and make new released.
authorHong Jen Yee (PCMan) <pcman.tw@gmail.com>
Thu, 10 Dec 2009 18:51:29 +0000 (18:51 +0000)
committerHong Jen Yee (PCMan) <pcman.tw@gmail.com>
Thu, 10 Dec 2009 18:51:29 +0000 (18:51 +0000)
configure.ac
src/menu-policy.c
src/menu-policy.h
src/panel.c
src/plugins/launchbar.c
src/plugins/menu.c

index a35c600..460ba2c 100644 (file)
@@ -1,5 +1,5 @@
 AC_PREREQ(2.53)
-AC_INIT(lxpanel, 0.5.3, http://lxde.org/)
+AC_INIT(lxpanel, 0.5.4, http://lxde.org/)
 AM_INIT_AUTOMAKE
 AC_CONFIG_SRCDIR([src/bg.c])
 AC_CONFIG_HEADER([config.h])
index 43bbccf..654055c 100644 (file)
 #include "menu-policy.h"
 #include "panel.h"
 
+guint32 visibility_flags = 0;
+
 /* Allocate a menu cache. */
-MenuCache * panel_menu_cache_new(void)
+MenuCache * panel_menu_cache_new(guint32* visibility_flags)
 {
+    MenuCache* cache;
     if (g_getenv("XDG_MENU_PREFIX") == NULL)
         g_setenv("XDG_MENU_PREFIX", "lxde-", TRUE);
-    return menu_cache_lookup("applications.menu");
+    cache = menu_cache_lookup("applications.menu");
+    if(visibility_flags)
+    {
+        if(is_in_lxde)
+            *visibility_flags = SHOW_IN_LXDE;
+        else
+        {
+            const char* de_name = g_getenv("XDG_CURRENT_DESKTOP");
+            if(de_name)
+                *visibility_flags = menu_cache_get_desktop_env_flag(cache, de_name);
+            else
+                *visibility_flags = SHOW_IN_LXDE|SHOW_IN_GNOME|SHOW_IN_KDE|SHOW_IN_XFCE;
+        }
+    }
+    return cache;
 }
 
 /* Evaluate the visibility of a menu item. */
-gboolean panel_menu_item_evaluate_visibility(MenuCacheItem * item)
+gboolean panel_menu_item_evaluate_visibility(MenuCacheItem * item, guint32 visibility_flags)
 {
-    return menu_cache_app_get_is_visible(
-        MENU_CACHE_APP(item),
-        ((is_in_lxde) ? SHOW_IN_LXDE : SHOW_IN_LXDE | SHOW_IN_GNOME | SHOW_IN_KDE | SHOW_IN_XFCE));
+    g_debug("flags: %d\n", visibility_flags);
+    return menu_cache_app_get_is_visible(MENU_CACHE_APP(item), visibility_flags);
 }
index 996643d..60e1a6e 100644 (file)
@@ -21,7 +21,7 @@
 
 #include <menu-cache.h>
 
-extern MenuCache * panel_menu_cache_new(void);                                 /* Allocate a menu cache */
-extern gboolean panel_menu_item_evaluate_visibility(MenuCacheItem * item);     /* Evaluate the visibility of a menu item */
+extern MenuCache * panel_menu_cache_new(guint32* visibility_flags); /* Allocate a menu cache */
+extern gboolean panel_menu_item_evaluate_visibility(MenuCacheItem * item, guint32 visibility_flags); /* Evaluate the visibility of a menu item */
 
 #endif
index 2b45774..8b37a9a 100644 (file)
@@ -1530,7 +1530,7 @@ void free_global_config();
 int main(int argc, char *argv[], char *env[])
 {
     int i;
-    const char* session_name;
+    const char* desktop_name;
 
     setlocale(LC_CTYPE, "");
 
@@ -1550,8 +1550,8 @@ int main(int argc, char *argv[], char *env[])
 
     resolve_atoms();
 
-    session_name = g_getenv("DESKTOP_SESSION");
-    is_in_lxde = session_name && (0 == strcmp(session_name, "LXDE"));
+    desktop_name = g_getenv("XDG_CURRENT_DESKTOP");
+    is_in_lxde = desktop_name && (0 == strcmp(desktop_name, "LXDE"));
 
     for (i = 1; i < argc; i++) {
         if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) {
index c63a809..da4586b 100644 (file)
@@ -700,7 +700,8 @@ static void launchbar_configure_initialize_list(Plugin * p, GtkWidget * dlg, Gtk
     {
         GtkTreeStore* tree = GTK_TREE_STORE(gtk_tree_view_get_model(view));
         /* Initialize from all menu items. */
-        MenuCache * menu_cache = panel_menu_cache_new();
+        guint32 flags;
+        MenuCache *menu_cache = panel_menu_cache_new(&flags);
         if (menu_cache != NULL)
         {
             MenuCacheDir * dir = menu_cache_get_root_dir(menu_cache);
index 221f3bf..95212cf 100644 (file)
@@ -60,6 +60,7 @@ typedef struct {
     char *config_start, *config_end;
 
     MenuCache* menu_cache;
+    guint visibility_flags;
     gpointer reload_notify;
 } menup;
 
@@ -419,14 +420,14 @@ static GtkWidget* create_item( MenuCacheItem* item )
     return mi;
 }
 
-static void load_menu(MenuCacheDir* dir, GtkWidget* menu, int pos )
+static void load_menu(menup* m, MenuCacheDir* dir, GtkWidget* menu, int pos )
 {
     GSList * l;
     for( l = menu_cache_dir_get_children(dir); l; l = l->next )
     {
         MenuCacheItem* item = MENU_CACHE_ITEM(l->data);
         if ((menu_cache_item_get_type(item) != MENU_CACHE_TYPE_APP)
-        || (panel_menu_item_evaluate_visibility(item)))
+        || (panel_menu_item_evaluate_visibility(item, m->visibility_flags)))
         {
             GtkWidget * mi = create_item(item);
             if (mi != NULL)
@@ -437,7 +438,7 @@ static void load_menu(MenuCacheDir* dir, GtkWidget* menu, int pos )
                 if (menu_cache_item_get_type(item) == MENU_CACHE_TYPE_DIR)
                 {
                     GtkWidget* sub = gtk_menu_new();
-                    load_menu( MENU_CACHE_DIR(item), sub, -1 );    /* always pass -1 for position */
+                    load_menu( m, MENU_CACHE_DIR(item), sub, -1 );    /* always pass -1 for position */
                     gtk_menu_item_set_submenu( GTK_MENU_ITEM(mi), sub );
                 }
             }
@@ -503,7 +504,7 @@ static void sys_menu_insert_items( menup* m, GtkMenu* menu, int position )
         SYS_MENU_ITEM_ID = g_quark_from_static_string( "SysMenuItem" );
 
     dir = menu_cache_get_root_dir( m->menu_cache );
-    load_menu( dir, GTK_WIDGET(menu), position );
+    load_menu( m, dir, GTK_WIDGET(menu), position );
 
     change_handler = g_signal_connect_swapped( gtk_icon_theme_get_default(), "changed", G_CALLBACK(unload_old_icons), menu );
     g_object_weak_ref( G_OBJECT(menu), remove_change_handler, GINT_TO_POINTER(change_handler) );
@@ -726,12 +727,14 @@ read_system_menu(GtkMenu* menu, Plugin *p, char** fp)
 
     if (m->menu_cache == NULL)
     {
-        m->menu_cache = panel_menu_cache_new();
+        guint32 flags;
+        m->menu_cache = panel_menu_cache_new(&flags);
         if (m->menu_cache == NULL)
         {
             ERR("error loading applications menu");
             return;
         }
+        m->visibility_flags = flags;
         m->reload_notify = menu_cache_add_reload_notify(m->menu_cache, (GFunc) on_reload_menu, m);
     }