[Xfce4-commits] <xfce4-settings:master> Restore the --dialog option.

Nick Schermer noreply at xfce.org
Thu Jan 26 23:02:06 CET 2012


Updating branch refs/heads/master
         to 8820f1a8b71a722490edf3db555930efda1579ee (commit)
       from b4d377399ba6fbe322876ebe308bc2743bc21f41 (commit)

commit 8820f1a8b71a722490edf3db555930efda1579ee
Author: Nick Schermer <nick at xfce.org>
Date:   Wed Jan 25 21:31:47 2012 +0100

    Restore the --dialog option.

 xfce4-settings-manager/main.c                      |    7 +-
 .../xfce-settings-manager-dialog.c                 |  180 ++++++++++++--------
 .../xfce-settings-manager-dialog.h                 |    2 +-
 3 files changed, 118 insertions(+), 71 deletions(-)

diff --git a/xfce4-settings-manager/main.c b/xfce4-settings-manager/main.c
index 1e29a31..9ebab31 100644
--- a/xfce4-settings-manager/main.c
+++ b/xfce4-settings-manager/main.c
@@ -91,8 +91,11 @@ main(int argc,
     gtk_widget_show(dialog);
 
     if(opt_dialog != NULL) {
-        xfce_settings_manager_dialog_show_dialog(XFCE_SETTINGS_MANAGER_DIALOG(dialog),
-                                                 opt_dialog);
+        if (!xfce_settings_manager_dialog_show_dialog(XFCE_SETTINGS_MANAGER_DIALOG(dialog),
+                                                 opt_dialog))
+        {
+            g_message ("Dialog \"%s\" not found.", opt_dialog);
+        }
     }
 
     /* To prevent the settings dialog to be saved in the session */
diff --git a/xfce4-settings-manager/xfce-settings-manager-dialog.c b/xfce4-settings-manager/xfce-settings-manager-dialog.c
index 65c399d..5f6a8d6 100644
--- a/xfce4-settings-manager/xfce-settings-manager-dialog.c
+++ b/xfce4-settings-manager/xfce-settings-manager-dialog.c
@@ -574,13 +574,9 @@ xfce_settings_manager_dialog_plug_removed (GtkWidget                 *socket,
 
 
 static void
-xfce_settings_manager_dialog_item_activated (ExoIconView               *iconview,
-                                             GtkTreePath               *path,
-                                             XfceSettingsManagerDialog *dialog)
+xfce_settings_manager_dialog_spawn (XfceSettingsManagerDialog *dialog,
+                                    GarconMenuItem            *item)
 {
-    GtkTreeModel   *model;
-    GtkTreeIter     iter;
-    GarconMenuItem *item;
     const gchar    *command;
     gboolean        snotify;
     GdkScreen      *screen;
@@ -593,83 +589,99 @@ xfce_settings_manager_dialog_item_activated (ExoIconView               *iconview
     GtkWidget      *socket;
     GdkCursor      *cursor;
 
-    model = exo_icon_view_get_model (iconview);
-    if (gtk_tree_model_get_iter (model, &iter, path))
-    {
-        gtk_tree_model_get (model, &iter, COLUMN_MENU_ITEM, &item, -1);
-        g_assert (GARCON_IS_MENU_ITEM (item));
+    g_return_if_fail (GARCON_IS_MENU_ITEM (item));
 
-        screen = gtk_window_get_screen (GTK_WINDOW (dialog));
-        command = garcon_menu_item_get_command (item);
+    screen = gtk_window_get_screen (GTK_WINDOW (dialog));
+    command = garcon_menu_item_get_command (item);
 
-        /* we need to read some more info from the desktop
-         *  file that is not supported by garcon */
-        desktop_file = garcon_menu_item_get_file (item);
-        filename = g_file_get_path (desktop_file);
-        g_object_unref (desktop_file);
+    /* we need to read some more info from the desktop
+     *  file that is not supported by garcon */
+    desktop_file = garcon_menu_item_get_file (item);
+    filename = g_file_get_path (desktop_file);
+    g_object_unref (desktop_file);
 
-        rc = xfce_rc_simple_open (filename, TRUE);
-        g_free (filename);
-        if (G_LIKELY (rc != NULL))
+    rc = xfce_rc_simple_open (filename, TRUE);
+    g_free (filename);
+    if (G_LIKELY (rc != NULL))
+    {
+        pluggable = xfce_rc_read_bool_entry (rc, "X-XfcePluggable", FALSE);
+        if (pluggable)
         {
-            pluggable = xfce_rc_read_bool_entry (rc, "X-XfcePluggable", FALSE);
-            if (pluggable)
-            {
-                dialog->help_page = g_strdup (xfce_rc_read_entry (rc, "X-XfceHelpPage", NULL));
-                dialog->help_component = g_strdup (xfce_rc_read_entry (rc, "X-XfceHelpComponent", NULL));
-            }
-
-            xfce_rc_close (rc);
+            dialog->help_page = g_strdup (xfce_rc_read_entry (rc, "X-XfceHelpPage", NULL));
+            dialog->help_component = g_strdup (xfce_rc_read_entry (rc, "X-XfceHelpComponent", NULL));
         }
 
-        if (pluggable)
+        xfce_rc_close (rc);
+    }
+
+    if (pluggable)
+    {
+        /* fake startup notification */
+        cursor = gdk_cursor_new (GDK_WATCH);
+        gdk_window_set_cursor (GTK_WIDGET (dialog)->window, cursor);
+        gdk_cursor_unref (cursor);
+
+        /* create fresh socket */
+        socket = gtk_socket_new ();
+        gtk_container_add (GTK_CONTAINER (dialog->socket_viewport), socket);
+        g_signal_connect (G_OBJECT (socket), "plug-added",
+            G_CALLBACK (xfce_settings_manager_dialog_plug_added), dialog);
+        g_signal_connect (G_OBJECT (socket), "plug-removed",
+            G_CALLBACK (xfce_settings_manager_dialog_plug_removed), dialog);
+        gtk_widget_show (socket);
+
+        /* for info when the plug is attached */
+        dialog->socket_item = g_object_ref (item);
+
+        /* spawn dialog with socket argument */
+        cmd = g_strdup_printf ("%s --socket-id=%d", command, gtk_socket_get_id (GTK_SOCKET (socket)));
+        if (!xfce_spawn_command_line_on_screen (screen, cmd, FALSE, FALSE, &error))
         {
-            /* fake startup notification */
-            cursor = gdk_cursor_new (GDK_WATCH);
-            gdk_window_set_cursor (GTK_WIDGET (dialog)->window, cursor);
-            gdk_cursor_unref (cursor);
-
-            /* create fresh socket */
-            socket = gtk_socket_new ();
-            gtk_container_add (GTK_CONTAINER (dialog->socket_viewport), socket);
-            g_signal_connect (G_OBJECT (socket), "plug-added",
-                G_CALLBACK (xfce_settings_manager_dialog_plug_added), dialog);
-            g_signal_connect (G_OBJECT (socket), "plug-removed",
-                G_CALLBACK (xfce_settings_manager_dialog_plug_removed), dialog);
-            gtk_widget_show (socket);
-
-            /* for info when the plug is attached */
-            dialog->socket_item = g_object_ref (item);
-
-            /* spawn dialog with socket argument */
-            cmd = g_strdup_printf ("%s --socket-id=%d", command, gtk_socket_get_id (GTK_SOCKET (socket)));
-            if (!xfce_spawn_command_line_on_screen (screen, cmd, FALSE, FALSE, &error))
-            {
-                gdk_window_set_cursor (GTK_WIDGET (dialog)->window, NULL);
+            gdk_window_set_cursor (GTK_WIDGET (dialog)->window, NULL);
 
-                xfce_dialog_show_error (GTK_WINDOW (dialog), error,
-                                        _("Unable to start \"%s\""), command);
-                g_error_free (error);
-            }
-            g_free (cmd);
+            xfce_dialog_show_error (GTK_WINDOW (dialog), error,
+                                    _("Unable to start \"%s\""), command);
+            g_error_free (error);
         }
-        else
+        g_free (cmd);
+    }
+    else
+    {
+        snotify = garcon_menu_item_supports_startup_notification (item);
+        if (!xfce_spawn_command_line_on_screen (screen, command, FALSE, snotify, &error))
         {
-            snotify = garcon_menu_item_supports_startup_notification (item);
-            if (!xfce_spawn_command_line_on_screen (screen, command, FALSE, snotify, &error))
-            {
-                xfce_dialog_show_error (GTK_WINDOW (dialog), error,
-                                        _("Unable to start \"%s\""), command);
-                g_error_free (error);
-            }
-
-            g_object_unref (G_OBJECT (item));
+            xfce_dialog_show_error (GTK_WINDOW (dialog), error,
+                                    _("Unable to start \"%s\""), command);
+            g_error_free (error);
         }
     }
 }
 
 
 
+static void
+xfce_settings_manager_dialog_item_activated (ExoIconView               *iconview,
+                                             GtkTreePath               *path,
+                                             XfceSettingsManagerDialog *dialog)
+{
+    GtkTreeModel   *model;
+    GtkTreeIter     iter;
+    GarconMenuItem *item;
+
+    model = exo_icon_view_get_model (iconview);
+    if (gtk_tree_model_get_iter (model, &iter, path))
+    {
+        gtk_tree_model_get (model, &iter, COLUMN_MENU_ITEM, &item, -1);
+        g_assert (GARCON_IS_MENU_ITEM (item));
+
+        xfce_settings_manager_dialog_spawn (dialog, item);
+
+        g_object_unref (G_OBJECT (item));
+    }
+}
+
+
+
 static gboolean
 xfce_settings_manager_dialog_filter_category (GtkTreeModel *model,
                                               GtkTreeIter  *iter,
@@ -888,9 +900,41 @@ xfce_settings_manager_dialog_new (void)
 
 
 
-void
+gboolean
 xfce_settings_manager_dialog_show_dialog (XfceSettingsManagerDialog *dialog,
                                           const gchar               *dialog_name)
 {
+    GtkTreeModel   *model = GTK_TREE_MODEL (dialog->store);
+    GtkTreeIter     iter;
+    GarconMenuItem *item;
+    const gchar    *desktop_id;
+    gchar          *name;
+    gboolean        found = FALSE;
+
+    g_return_val_if_fail (XFCE_IS_SETTINGS_MANAGER_DIALOG (dialog), FALSE);
+
+    name = g_strdup_printf ("%s.desktop", dialog_name);
+
+    if (gtk_tree_model_get_iter_first (model, &iter))
+    {
+        do
+        {
+             gtk_tree_model_get (model, &iter, COLUMN_MENU_ITEM, &item, -1);
+             g_assert (GARCON_IS_MENU_ITEM (item));
+
+             desktop_id = garcon_menu_item_get_desktop_id (item);
+             if (g_strcmp0 (desktop_id, name) == 0)
+             {
+                  xfce_settings_manager_dialog_spawn (dialog, item);
+                  found = TRUE;
+             }
+
+             g_object_unref (G_OBJECT (item));
+        }
+        while (!found && gtk_tree_model_iter_next (model, &iter));
+    }
+
+    g_free (name);
 
+    return found;
 }
diff --git a/xfce4-settings-manager/xfce-settings-manager-dialog.h b/xfce4-settings-manager/xfce-settings-manager-dialog.h
index 7757f74..2fcae51 100644
--- a/xfce4-settings-manager/xfce-settings-manager-dialog.h
+++ b/xfce4-settings-manager/xfce-settings-manager-dialog.h
@@ -38,7 +38,7 @@ GType      xfce_settings_manager_dialog_get_type    (void) G_GNUC_CONST;
 
 GtkWidget *xfce_settings_manager_dialog_new         (void);
 
-void       xfce_settings_manager_dialog_show_dialog (XfceSettingsManagerDialog *dialog,
+gboolean   xfce_settings_manager_dialog_show_dialog (XfceSettingsManagerDialog *dialog,
                                                      const gchar               *dialog_name);
 
 G_END_DECLS


More information about the Xfce4-commits mailing list