[Xfce4-commits] <xfce4-panel:master> Always use applications menu for default menu.

Nick Schermer noreply at xfce.org
Sat Dec 4 15:40:01 CET 2010


Updating branch refs/heads/master
         to 148ed036003bc5fef18e5c2f7090549e915f0476 (commit)
       from 85fa958a61c2320bd732ed1281cedf35de1a034f (commit)

commit 148ed036003bc5fef18e5c2f7090549e915f0476
Author: Nick Schermer <nick at xfce.org>
Date:   Sat Dec 4 15:37:34 2010 +0100

    Always use applications menu for default menu.
    
    Garcon respects the XDG_MENU_PREFIX variable, which is set
    the "xfce-" in xinitrc and used by alacarte too.

 .../applicationsmenu/applicationsmenu-dialog.glade |   23 +---
 plugins/applicationsmenu/applicationsmenu.c        |  118 +++++---------------
 2 files changed, 34 insertions(+), 107 deletions(-)

diff --git a/plugins/applicationsmenu/applicationsmenu-dialog.glade b/plugins/applicationsmenu/applicationsmenu-dialog.glade
index 06f4379..a95e359 100644
--- a/plugins/applicationsmenu/applicationsmenu-dialog.glade
+++ b/plugins/applicationsmenu/applicationsmenu-dialog.glade
@@ -195,20 +195,6 @@
                         <property name="orientation">vertical</property>
                         <property name="spacing">6</property>
                         <child>
-                          <object class="GtkRadioButton" id="use-xfce-menu">
-                            <property name="label" translatable="yes">Use the _Xfce menu</property>
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">False</property>
-                            <property name="use_underline">True</property>
-                            <property name="active">True</property>
-                            <property name="draw_indicator">True</property>
-                          </object>
-                          <packing>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
                           <object class="GtkHBox" id="hbox1">
                             <property name="visible">True</property>
                             <property name="spacing">12</property>
@@ -220,7 +206,6 @@
                                 <property name="receives_default">False</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_indicator">True</property>
-                                <property name="group">use-xfce-menu</property>
                               </object>
                               <packing>
                                 <property name="position">0</property>
@@ -242,7 +227,7 @@
                             </child>
                           </object>
                           <packing>
-                            <property name="position">1</property>
+                            <property name="position">0</property>
                           </packing>
                         </child>
                         <child>
@@ -254,10 +239,10 @@
                             <property name="use_underline">True</property>
                             <property name="active">True</property>
                             <property name="draw_indicator">True</property>
-                            <property name="group">use-xfce-menu</property>
+                            <property name="group">use-default-menu</property>
                           </object>
                           <packing>
-                            <property name="position">2</property>
+                            <property name="position">1</property>
                           </packing>
                         </child>
                         <child>
@@ -292,7 +277,7 @@
                             </child>
                           </object>
                           <packing>
-                            <property name="position">3</property>
+                            <property name="position">2</property>
                           </packing>
                         </child>
                       </object>
diff --git a/plugins/applicationsmenu/applicationsmenu.c b/plugins/applicationsmenu/applicationsmenu.c
index 79ac910..b0108ed 100644
--- a/plugins/applicationsmenu/applicationsmenu.c
+++ b/plugins/applicationsmenu/applicationsmenu.c
@@ -38,9 +38,6 @@
 #define DEFAULT_TITLE     _("Applications Menu")
 #define DEFAULT_ICON_NAME "xfce4-panel-menu"
 #define DEFAULT_ICON_SIZE (16)
-#define DEFAULT_MENU      "xfce-applications.menu"
-#define APPLICATIONS_MENU "applications.menu"
-#define CUSTOM_MENU       "custom"
 
 
 
@@ -65,7 +62,7 @@ struct _ApplicationsMenuPlugin
   guint            show_button_title : 1;
   gchar           *button_title;
   gchar           *button_icon;
-  gchar           *menu_file;
+  gboolean         custom_menu;
   gchar           *custom_menu_file;
 
   /* temp item we store here when the
@@ -82,7 +79,7 @@ enum
   PROP_SHOW_BUTTON_TITLE,
   PROP_BUTTON_TITLE,
   PROP_BUTTON_ICON,
-  PROP_MENU_FILE,
+  PROP_CUSTOM_MENU,
   PROP_CUSTOM_MENU_FILE
 };
 
@@ -185,10 +182,10 @@ applications_menu_plugin_class_init (ApplicationsMenuPluginClass *klass)
                                                         EXO_PARAM_READWRITE));
 
   g_object_class_install_property (gobject_class,
-                                   PROP_MENU_FILE,
-                                   g_param_spec_string ("menu-file",
+                                   PROP_CUSTOM_MENU,
+                                   g_param_spec_boolean ("custom-menu",
                                                          NULL, NULL,
-                                                         DEFAULT_MENU,
+                                                         FALSE,
                                                          EXO_PARAM_READWRITE));
 
   g_object_class_install_property (gobject_class,
@@ -212,7 +209,11 @@ applications_menu_plugin_init (ApplicationsMenuPlugin *plugin)
 {
   plugin->show_menu_icons = TRUE;
   plugin->show_button_title = TRUE;
-  plugin->menu_file = g_strdup (DEFAULT_MENU);
+  plugin->custom_menu = FALSE;
+
+  panel_debug (PANEL_DEBUG_DOMAIN_APPLICATIONMENU,
+               "XDG_MENU_PREFIX is set to \"%s\"",
+               g_getenv ("XDG_MENU_PREFIX"));
 
   garcon_set_environment ("XFCE");
 
@@ -276,8 +277,8 @@ applications_menu_plugin_get_property (GObject    *object,
           DEFAULT_ICON_NAME : plugin->button_icon);
       break;
 
-    case PROP_MENU_FILE:
-      g_value_set_string (value, plugin->menu_file);
+    case PROP_CUSTOM_MENU:
+      g_value_set_boolean (value, plugin->custom_menu);
       break;
 
     case PROP_CUSTOM_MENU_FILE:
@@ -340,9 +341,8 @@ applications_menu_plugin_set_property (GObject      *object,
           exo_str_is_empty (plugin->button_icon) ? DEFAULT_ICON_NAME : plugin->button_icon);
       return;
 
-    case PROP_MENU_FILE:
-      g_free (plugin->menu_file);
-      plugin->menu_file = g_value_dup_string (value);
+    case PROP_CUSTOM_MENU:
+      plugin->custom_menu = g_value_get_boolean (value);
       break;
 
     case PROP_CUSTOM_MENU_FILE:
@@ -372,7 +372,7 @@ applications_menu_plugin_construct (XfcePanelPlugin *panel_plugin)
     { "show-tooltips", G_TYPE_BOOLEAN },
     { "button-title", G_TYPE_STRING },
     { "button-icon", G_TYPE_STRING },
-    { "menu-file", G_TYPE_STRING },
+    { "custom-menu", G_TYPE_BOOLEAN },
     { "custom-menu-file", G_TYPE_STRING },
     { NULL }
   };
@@ -400,7 +400,6 @@ applications_menu_plugin_free_data (XfcePanelPlugin *panel_plugin)
   g_free (plugin->button_title);
   g_free (plugin->button_icon);
   g_free (plugin->custom_menu_file);
-  g_free (plugin->menu_file);
 }
 
 
@@ -519,33 +518,6 @@ applications_menu_plugin_configure_plugin_edit (GtkWidget              *button,
 
 
 static void
-applications_menu_plugin_configure_plugin_menu_toggled (GtkWidget              *button,
-                                                        ApplicationsMenuPlugin *plugin)
-{
-  const gchar *name;
-  const gchar *file;
-
-  panel_return_if_fail (XFCE_IS_APPLICATIONS_MENU_PLUGIN (plugin));
-  panel_return_if_fail (GTK_IS_RADIO_BUTTON (button));
-
-  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))
-    {
-      name = gtk_buildable_get_name (GTK_BUILDABLE (button));
-
-      if (exo_str_is_equal (name, "use-custom-menu"))
-        file = CUSTOM_MENU;
-      else if (exo_str_is_equal (name, "use-default-menu"))
-        file = APPLICATIONS_MENU;
-      else
-        file = DEFAULT_MENU;
-
-      g_object_set (G_OBJECT (plugin), "menu-file", file, NULL);
-    }
-}
-
-
-
-static void
 applications_menu_plugin_configure_plugin (XfcePanelPlugin *panel_plugin)
 {
   ApplicationsMenuPlugin *plugin = XFCE_APPLICATIONS_MENU_PLUGIN (panel_plugin);
@@ -588,42 +560,28 @@ applications_menu_plugin_configure_plugin (XfcePanelPlugin *panel_plugin)
   g_object_add_weak_pointer (G_OBJECT (plugin->dialog_icon), (gpointer) &plugin->dialog_icon);
   gtk_widget_show (plugin->dialog_icon);
 
-  object = gtk_builder_get_object (builder, "use-xfce-menu");
-  panel_return_if_fail (GTK_IS_RADIO_BUTTON (object));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (object),
-      exo_str_is_equal (plugin->menu_file, DEFAULT_MENU));
-  g_signal_connect (G_OBJECT (object), "toggled",
-      G_CALLBACK (applications_menu_plugin_configure_plugin_menu_toggled), plugin);
-
-  object = gtk_builder_get_object (builder, "use-default-menu");
-  panel_return_if_fail (GTK_IS_RADIO_BUTTON (object));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (object),
-      exo_str_is_equal (plugin->menu_file, APPLICATIONS_MENU));
-  g_signal_connect (G_OBJECT (object), "toggled",
-      G_CALLBACK (applications_menu_plugin_configure_plugin_menu_toggled), plugin);
-
   /* whether we show the edit menu button */
-  object2 = gtk_builder_get_object (builder, "edit-menu-button");
-  panel_return_if_fail (GTK_IS_BUTTON (object2));
+  object = gtk_builder_get_object (builder, "edit-menu-button");
+  panel_return_if_fail (GTK_IS_BUTTON (object));
   path = g_find_program_in_path ("alacarte");
   if (path != NULL)
     {
-      exo_binding_new (G_OBJECT (object), "active", G_OBJECT (object2), "sensitive");
-      g_signal_connect (G_OBJECT (object2), "clicked",
+      object2 = gtk_builder_get_object (builder, "use-default-menu");
+      panel_return_if_fail (GTK_IS_RADIO_BUTTON (object2));
+      exo_binding_new (G_OBJECT (object2), "active", G_OBJECT (object), "sensitive");
+      g_signal_connect (G_OBJECT (object), "clicked",
           G_CALLBACK (applications_menu_plugin_configure_plugin_edit), plugin);
     }
   else
     {
-      gtk_widget_hide (GTK_WIDGET (object2));
+      gtk_widget_hide (GTK_WIDGET (object));
     }
   g_free (path);
 
   object = gtk_builder_get_object (builder, "use-custom-menu");
   panel_return_if_fail (GTK_IS_RADIO_BUTTON (object));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (object),
-      exo_str_is_equal (plugin->menu_file, CUSTOM_MENU));
-  g_signal_connect (G_OBJECT (object), "toggled",
-      G_CALLBACK (applications_menu_plugin_configure_plugin_menu_toggled), plugin);
+  exo_mutual_binding_new (G_OBJECT (plugin), "custom-menu",
+                          G_OBJECT (object), "active");
 
   /* sensitivity of custom file selector */
   object2 = gtk_builder_get_object (builder, "custom-box");
@@ -1020,7 +978,6 @@ applications_menu_plugin_menu (GtkWidget              *button,
   GError     *error = NULL;
   gchar      *filename;
   GFile      *file;
-  gchar      *path;
 
   panel_return_if_fail (XFCE_IS_APPLICATIONS_MENU_PLUGIN (plugin));
   panel_return_if_fail (button == NULL || plugin->button == button);
@@ -1031,28 +988,13 @@ applications_menu_plugin_menu (GtkWidget              *button,
 
   if (plugin->menu == NULL)
     {
-      if (G_LIKELY (!exo_str_is_empty (plugin->menu_file)))
-        {
-          if (G_UNLIKELY (strcmp (plugin->menu_file, CUSTOM_MENU) == 0
-              && plugin->custom_menu_file != NULL))
-            {
-              menu = garcon_menu_new_for_path (plugin->custom_menu_file);
-            }
-          else if (g_str_has_suffix (plugin->menu_file, ".menu"))
-            {
-              /* lookup the menu by file */
-              filename = g_build_filename ("menus", plugin->menu_file, NULL);
-              path = xfce_resource_lookup (XFCE_RESOURCE_CONFIG, filename);
-              g_free (filename);
-
-              if (G_LIKELY (path != NULL))
-                menu = garcon_menu_new_for_path (path);
-              g_free (path);
-            }
-        }
+      if (G_UNLIKELY (plugin->custom_menu
+          && plugin->custom_menu_file != NULL))
+        menu = garcon_menu_new_for_path (plugin->custom_menu_file);
 
-      /* fallback to the default menu */
-      if (G_UNLIKELY (menu == NULL))
+      /* use the applications menu, this also respects the
+       * XDG_MENU_PREFIX environment variable */
+      if (G_LIKELY (menu == NULL))
         menu = garcon_menu_new_applications ();
 
       if (menu != NULL



More information about the Xfce4-commits mailing list