[Xfce4-commits] <xfce4-settings:master> Make the display settings dialog pluggable (Bug #6524).

Jérôme Guelfucci noreply at xfce.org
Sun Aug 29 12:02:01 CEST 2010


Updating branch refs/heads/master
         to e062536bd06ad2d7f0258030c528845ce74d4bc9 (commit)
       from 03ab97102f8b277739e7d13ad35943ef734deb7f (commit)

commit e062536bd06ad2d7f0258030c528845ce74d4bc9
Author: Jérôme Guelfucci <jeromeg at xfce.org>
Date:   Sun Aug 29 11:59:07 2010 +0200

    Make the display settings dialog pluggable (Bug #6524).

 dialogs/display-settings/display-dialog.glade      |   11 +++++-
 dialogs/display-settings/main.c                    |   39 ++++++++++++++------
 .../xfce-display-settings.desktop.in               |    1 +
 3 files changed, 39 insertions(+), 12 deletions(-)

diff --git a/dialogs/display-settings/display-dialog.glade b/dialogs/display-settings/display-dialog.glade
index e0ddf8c..dcc0af4 100644
--- a/dialogs/display-settings/display-dialog.glade
+++ b/dialogs/display-settings/display-dialog.glade
@@ -18,7 +18,7 @@
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child>
-          <object class="GtkHBox" id="hbox1">
+          <object class="GtkHBox" id="plug-child">
             <property name="visible">True</property>
             <property name="border_width">12</property>
             <property name="spacing">12</property>
@@ -52,8 +52,14 @@
                 <child>
                   <object class="GtkCheckButton" id="output-on">
                     <property name="label" translatable="yes">_Use this output</property>
+                    <property name="can_focus">False</property>
+                    <property name="receives_default">False</property>
                     <property name="use_underline">True</property>
+                    <property name="draw_indicator">False</property>
                   </object>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
                 </child>
                 <child>
                   <object class="GtkTable" id="table1">
@@ -169,6 +175,9 @@
                   </packing>
                 </child>
               </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
             </child>
           </object>
           <packing>
diff --git a/dialogs/display-settings/main.c b/dialogs/display-settings/main.c
index 42ad2cd..06efeb8 100644
--- a/dialogs/display-settings/main.c
+++ b/dialogs/display-settings/main.c
@@ -94,16 +94,14 @@ typedef struct
 
 
 /* Option entries */
+static GdkNativeWindow opt_socket_id = 0;
 static gboolean opt_version = FALSE;
 static gboolean minimal = FALSE;
 static GOptionEntry option_entries[] =
 {
+    { "socket-id", 's', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_INT, &opt_socket_id, N_("Settings manager socket"), N_("SOCKET ID") },
     { "version", 'v', 0, G_OPTION_ARG_NONE, &opt_version, N_("Version information"), NULL },
-    {
-    "minimal", 'm', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &minimal,
-    N_("Minimal interface to set up an external output"),
-    NULL
-    },
+    { "minimal", 'm', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &minimal, N_("Minimal interface to set up an external output"), NULL},
     { NULL }
 };
 
@@ -1020,10 +1018,12 @@ display_settings_minimal_dialog_response (GtkDialog  *dialog,
 gint
 main (gint argc, gchar **argv)
 {
-    GtkWidget   *dialog;
     GtkBuilder  *builder;
-    GError      *error = NULL;
     GdkDisplay  *display;
+    GtkWidget   *dialog;
+    GtkWidget   *plug;
+    GObject     *plug_child;
+    GError      *error = NULL;
     gboolean     succeeded = TRUE;
     gint         event_base, error_base;
     guint        first, second;
@@ -1151,8 +1151,6 @@ main (gint argc, gchar **argv)
             {
                 /* Build the dialog */
                 dialog = display_settings_dialog_new (builder);
-                g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (display_settings_dialog_response), builder);
-
                 XFCE_RANDR_EVENT_BASE (xfce_randr) = event_base;
                 /* Set up notifications */
                 XRRSelectInput (gdk_x11_display_get_xdisplay (display),
@@ -1163,14 +1161,33 @@ main (gint argc, gchar **argv)
                                                       RRNotify + 1);
                 gdk_window_add_filter (gdk_get_default_root_window (), screen_on_event, builder);
 
-                /* Show the dialog */
-                gtk_widget_show (dialog);
+                if (G_UNLIKELY (opt_socket_id == 0))
+                {
+                    g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (display_settings_dialog_response), builder);
+
+                    /* Show the dialog */
+                    gtk_widget_show (dialog);
+                }
+                else
+                {
+                    /* Create plug widget */
+                    plug = gtk_plug_new (opt_socket_id);
+                    g_signal_connect (plug, "delete-event", G_CALLBACK (gtk_main_quit), NULL);
+                    gtk_widget_show (plug);
+
+                    /* Get plug child widget */
+                    plug_child = gtk_builder_get_object (builder, "plug-child");
+                    gtk_widget_reparent (GTK_WIDGET (plug_child), plug);
+                    gtk_widget_show (GTK_WIDGET (plug_child));
+                }
 
                 /* To prevent the settings dialog to be saved in the session */
                 gdk_set_sm_client_id ("FAKE ID");
 
                 /* Enter the main loop */
                 gtk_main ();
+
+                gtk_widget_destroy (dialog);
             }
             else
             {
diff --git a/dialogs/display-settings/xfce-display-settings.desktop.in b/dialogs/display-settings/xfce-display-settings.desktop.in
index d16b236..ccec807 100644
--- a/dialogs/display-settings/xfce-display-settings.desktop.in
+++ b/dialogs/display-settings/xfce-display-settings.desktop.in
@@ -9,4 +9,5 @@ Type=Application
 Categories=X-XFCE;Settings;DesktopSettings;X-XfceSettingsDialog;
 StartupNotify=true
 OnlyShowIn=XFCE;
+X-XfcePluggable=true
 X-XfceHelpFile=xfce4-settings.html



More information about the Xfce4-commits mailing list