[Xfce4-commits] [apps/xfce4-screensaver] 01/01: Enabled embedding in the Xfce Settings Manager

noreply at xfce.org noreply at xfce.org
Wed Oct 31 00:43:57 CET 2018


This is an automated email from the git hooks/post-receive script.

b   l   u   e   s   a   b   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository apps/xfce4-screensaver.

commit 85562d6e54508a27de6dce38af88aca0778e374d
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Tue Oct 30 19:43:52 2018 -0400

    Enabled embedding in the Xfce Settings Manager
---
 NEWS                                          |  1 +
 data/xfce4-screensaver-preferences.desktop.in |  2 +
 src/xfce4-screensaver-preferences.c           | 84 ++++++++++++++++++++++-----
 src/xfce4-screensaver-preferences.ui          |  4 +-
 4 files changed, 74 insertions(+), 17 deletions(-)

diff --git a/NEWS b/NEWS
index 02a4ca2..7bf4dd5 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,7 @@
   - Fallback to the Xfdesktop default color background (dark blue)
   - UI files are now compiled and included in the binaries
   - Root warning is now an InfoBar to make it more visible
+  - Enabled embedding in the Xfce Settings Manager
 - Bug Fixes:
   - Fix crash with no background placement, fix color settings (Xfce #14769)
   - Redraw the screensaver on monitor configuration events (Xfce #14796)
diff --git a/data/xfce4-screensaver-preferences.desktop.in b/data/xfce4-screensaver-preferences.desktop.in
index 24ca0f2..0aaf9be 100644
--- a/data/xfce4-screensaver-preferences.desktop.in
+++ b/data/xfce4-screensaver-preferences.desktop.in
@@ -11,3 +11,5 @@ StartupNotify=true
 X-XFCE-Bugzilla-Bugzilla=XFCE
 X-XFCE-Bugzilla-Product=xfce4-screensaver
 X-XFCE-Bugzilla-Component=general
+X-XfcePluggable=true
+X-XfceHelpPage=screensaver
\ No newline at end of file
diff --git a/src/xfce4-screensaver-preferences.c b/src/xfce4-screensaver-preferences.c
index 95557ce..6ba053d 100644
--- a/src/xfce4-screensaver-preferences.c
+++ b/src/xfce4-screensaver-preferences.c
@@ -33,6 +33,7 @@
 
 #include <gdk/gdkx.h>
 #include <gtk/gtk.h>
+#include <gtk/gtkx.h>
 
 #include <gio/gio.h>
 
@@ -79,6 +80,13 @@ static GSThemeManager *theme_manager = NULL;
 static GSJob          *job = NULL;
 static XfconfChannel  *screensaver_channel = NULL;
 
+static gint opt_socket_id = 0;
+static GOptionEntry entries[] =
+{
+    { "socket-id", 's', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_INT, &opt_socket_id, N_("Settings manager socket"), N_("SOCKET ID") },
+    { NULL }
+};
+
 static gint32
 config_get_activate_delay (gboolean *is_writable)
 {
@@ -1515,9 +1523,10 @@ is_program_in_path (const char *program)
 }
 
 static void
-init_capplet (void)
+configure_capplet (void)
 {
     GtkWidget *dialog;
+    GtkWidget *plug_child;
     GtkWidget *preview;
     GtkWidget *treeview;
     GtkWidget *list_scroller;
@@ -1567,6 +1576,7 @@ init_capplet (void)
 
     preview                     = GTK_WIDGET (gtk_builder_get_object (builder, "preview_area"));
     dialog                      = GTK_WIDGET (gtk_builder_get_object (builder, "prefs_dialog"));
+    plug_child                  = GTK_WIDGET (gtk_builder_get_object (builder, "plug-child"));
     treeview                    = GTK_WIDGET (gtk_builder_get_object (builder, "savers_treeview"));
     list_scroller               = GTK_WIDGET (gtk_builder_get_object (builder, "themes_scrolled_window"));
     activate_delay_hscale       = GTK_WIDGET (gtk_builder_get_object (builder, "activate_delay_hscale"));
@@ -1637,25 +1647,22 @@ init_capplet (void)
                       "draw", G_CALLBACK (preview_on_draw),
                       NULL);
 
-    gtk_drag_dest_set (dialog, GTK_DEST_DEFAULT_ALL,
+    gtk_drag_dest_set (plug_child, GTK_DEST_DEFAULT_ALL,
                        drop_types, G_N_ELEMENTS (drop_types),
                        GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_MOVE);
 
-    g_signal_connect (dialog, "drag-motion",
+    g_signal_connect (plug_child, "drag-motion",
                       G_CALLBACK (drag_motion_cb), NULL);
-    g_signal_connect (dialog, "drag-leave",
+    g_signal_connect (plug_child, "drag-leave",
                       G_CALLBACK (drag_leave_cb), NULL);
-    g_signal_connect (dialog, "drag-data-received",
+    g_signal_connect (plug_child, "drag-data-received",
                       G_CALLBACK (drag_data_received_cb), NULL);
 
-    gtk_widget_show_all (dialog);
-
     /* Update list of themes if using random screensaver */
     mode = xfconf_channel_get_int (screensaver_channel, KEY_MODE, DEFAULT_KEY_MODE);
     if (mode == GS_MODE_RANDOM) {
         gchar **list;
         list = get_all_theme_ids (theme_manager);
-        g_warning("instance b");
         xfconf_channel_set_string_list (screensaver_channel, KEY_THEMES, (const gchar * const*) list);
         g_strfreev (list);
     }
@@ -1673,9 +1680,6 @@ init_capplet (void)
     g_signal_connect (activate_delay_hscale, "value-changed",
                       G_CALLBACK (activate_delay_value_changed_cb), NULL);
 
-    g_signal_connect (dialog, "response",
-                      G_CALLBACK (response_cb), NULL);
-
     g_signal_connect (preview_button, "clicked",
                       G_CALLBACK (fullscreen_preview_start_cb),
                       treeview);
@@ -1700,7 +1704,9 @@ int
 main (int    argc,
       char **argv)
 {
-    GError *error = NULL;
+    GtkWidget *plug;
+    GObject   *plug_child;
+    GError    *error = NULL;
 
 #ifdef ENABLE_NLS
     bindtextdomain (GETTEXT_PACKAGE, XFCELOCALEDIR);
@@ -1710,7 +1716,21 @@ main (int    argc,
     textdomain (GETTEXT_PACKAGE);
 #endif
 
-    gtk_init (&argc, &argv);
+    if (!gtk_init_with_args (&argc, &argv, "", entries, NULL, &error))
+    {
+        if (G_LIKELY (error))
+        {
+            /* print error */
+            g_error ("%s\n", error->message);
+            g_error_free (error);
+        }
+        else
+        {
+            g_error ("Unable to open display.");
+        }
+
+        return EXIT_FAILURE;
+    }
 
     /* hook to make sure the libxfce4ui library is linked */
     if (xfce_titled_dialog_get_type() == 0)
@@ -1727,9 +1747,43 @@ main (int    argc,
     job = gs_job_new ();
     theme_manager = gs_theme_manager_new ();
 
-    init_capplet ();
+    configure_capplet ();
+
+    if (G_UNLIKELY(opt_socket_id == 0))
+    {
+        GtkWidget *dialog = GTK_WIDGET (gtk_builder_get_object (builder, "prefs_dialog"));
+
+        g_signal_connect(dialog, "response",
+                         G_CALLBACK(response_cb), NULL);
+
+        gtk_widget_show_all (dialog);
+
+        /* To prevent the settings dialog to be saved in the session */
+        gdk_x11_set_sm_client_id("FAKE ID");
+
+        gtk_main();
+    }
+    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);
+
+        /* Stop startup notification */
+        gdk_notify_startup_complete();
 
-    gtk_main ();
+        /* Get plug child widget */
+        plug_child = gtk_builder_get_object (builder, "plug-child");
+        xfce_widget_reparent (GTK_WIDGET(plug_child), plug);
+        gtk_widget_show_all (GTK_WIDGET(plug_child));
+
+        /* To prevent the settings dialog to be saved in the session */
+        gdk_x11_set_sm_client_id("FAKE ID");
+
+        /* Enter main loop */
+        gtk_main();
+    }
 
     finalize_capplet ();
 
diff --git a/src/xfce4-screensaver-preferences.ui b/src/xfce4-screensaver-preferences.ui
index 4a0b157..c758a0f 100644
--- a/src/xfce4-screensaver-preferences.ui
+++ b/src/xfce4-screensaver-preferences.ui
@@ -206,7 +206,6 @@ Simon Steinbeiß
     <property name="stock">gtk-fullscreen</property>
   </object>
   <object class="XfceTitledDialog" id="prefs_dialog">
-    <property name="visible">True</property>
     <property name="can_focus">False</property>
     <property name="title" translatable="yes">Screensaver Preferences</property>
     <property name="default_width">600</property>
@@ -298,7 +297,7 @@ Simon Steinbeiß
           </packing>
         </child>
         <child>
-          <object class="GtkBox" id="vbox1">
+          <object class="GtkBox" id="plug-child">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="border_width">6</property>
@@ -567,6 +566,7 @@ Simon Steinbeiß
                                 <property name="app_paintable">True</property>
                                 <property name="can_focus">False</property>
                                 <property name="hexpand">True</property>
+                                <property name="vexpand">True</property>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list