[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