[Xfce4-commits] [apps/xfce4-screensaver] 01/01: Integrate xfce4-screensaver-configure with screensaver preferences
noreply at xfce.org
noreply at xfce.org
Sat Jul 13 23:20:32 CEST 2019
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 28a6857f891cac6d73185f91d4ac99b547ecd4f6
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Sat Jul 13 17:20:27 2019 -0400
Integrate xfce4-screensaver-configure with screensaver preferences
---
src/Makefile.am | 4 ++
src/xfce4-screensaver-configure | 66 ++++++++++++++++++------
src/xfce4-screensaver-preferences.c | 61 ++++++++++++++++++++--
src/xfce4-screensaver-preferences.ui | 99 ++++++++++++++++++++++++++----------
4 files changed, 186 insertions(+), 44 deletions(-)
diff --git a/src/Makefile.am b/src/Makefile.am
index 0147413..8ee7b55 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -41,6 +41,10 @@ bin_PROGRAMS = \
xfce4-screensaver-preferences \
$(NULL)
+bin_SCRIPTS = \
+ xfce4-screensaver-configure \
+ $(NULL)
+
libexec_PROGRAMS = \
xfce4-screensaver-dialog \
xfce4-screensaver-gl-helper \
diff --git a/src/xfce4-screensaver-configure b/src/xfce4-screensaver-configure
index 4ebf33c..2a110f6 100755
--- a/src/xfce4-screensaver-configure
+++ b/src/xfce4-screensaver-configure
@@ -48,7 +48,7 @@ class XfconfChannel:
self.prefix = prefix
def _get_property(self, prop, default=""):
- prop = "%s%s" % (self.prefix, prop)
+ prop = "%s/%s" % (self.prefix, prop)
command = ["xfconf-query", "-c", self.channel, "-p", prop, "-l", "-v"]
response = subprocess.check_output(command).decode("utf-8")
if prop in response:
@@ -57,11 +57,15 @@ class XfconfChannel:
return default
def _set_property(self, prop_type, prop, value):
- prop = "%s%s" % (self.prefix, prop)
+ prop = "%s/%s" % (self.prefix, prop)
command = ["xfconf-query", "-c", self.channel, "-p",
prop, "-n", "-t", prop_type, "-s", str(value)]
return subprocess.call(command)
+ def restore_defaults(self):
+ command = ["xfconf-query", "-c", self.channel, "-p", self.prefix, "-r", "-R"]
+ return subprocess.call(command)
+
def get_boolean(self, prop, default):
value = self._get_property(prop, default)
if value in ["true", True]:
@@ -329,7 +333,7 @@ class ConfigurationWindow(Gtk.Window):
self.inner_margin = 12
self.screensaver_args = parsed["arguments"]
self.xfconf_channel = XfconfChannel(
- "xfce4-screensaver", "/screensavers/%s/" % parsed["name"])
+ "xfce4-screensaver", "/screensavers/%s" % parsed["name"])
self.notebook = Gtk.Notebook.new()
self.grid = Gtk.Grid.new()
@@ -556,6 +560,7 @@ class ConfigurationWindow(Gtk.Window):
color = self.defaults[widget_id]
widget.set_rgba(hex_to_rgba(color))
self.set_string(widget_id, color)
+ self.xfconf_channel.restore_defaults()
def write_arguments(self):
arguments = []
@@ -622,10 +627,30 @@ def get_key(dct, keyname, default=""):
def configure(parsed):
- win = ConfigurationWindow(parsed)
- win.connect("destroy", Gtk.main_quit)
- win.show_all()
- Gtk.main()
+ try:
+ win = ConfigurationWindow(parsed)
+ win.connect("destroy", Gtk.main_quit)
+ win.show_all()
+ Gtk.main()
+ except KeyboardInterrupt:
+ pass
+
+
+def show_fatal(primary, secondary):
+ if not graphical:
+ print("%s: %s" % (primary, secondary))
+ sys.exit(1)
+ try:
+ dlg = Gtk.MessageDialog(None, 0, Gtk.MessageType.ERROR,
+ Gtk.ButtonsType.OK, primary)
+ dlg.format_secondary_text(secondary)
+ dlg.connect("close", Gtk.main_quit)
+ dlg.connect("response", Gtk.main_quit)
+ dlg.show_all()
+ Gtk.main()
+ except KeyboardInterrupt:
+ pass
+ sys.exit(1)
if __name__ == "__main__":
@@ -638,32 +663,43 @@ if __name__ == "__main__":
help=_('check if screensaver is configurable'))
args = parser.parse_args()
- fname = get_filename(args.screensaver)
+ graphical = not args.check
+
+ saver = args.screensaver
+ if saver.startswith("screensavers-"):
+ saver = saver[13:]
+
+ primary = _("Unable to configure screensaver")
+
+ fname = get_filename(saver)
if fname is None:
- print(_("No file found for screensaver %s") % args.screensaver)
+ show_fatal(primary, _("File not found: %s") % saver)
sys.exit(1)
if fname.endswith(".xml"):
- obj = XmlScreensaverSettings(args.screensaver)
+ obj = XmlScreensaverSettings(saver)
elif fname.endswith(".desktop"):
- obj = DesktopScreensaverSettings(args.screensaver)
+ obj = DesktopScreensaverSettings(saver)
else:
locale.textdomain('xfce4-screensaver')
- print(_("Unrecognized file type for file %s") % fname)
+ show_fatal(primary, _("Unrecognized file type: %s") % fname)
sys.exit(1)
locale.textdomain('xfce4-screensaver')
if not obj.load_from_file(fname):
- print(_("Failed to load screensaver from %s") % fname)
+ show_fatal(primary, _("Failed to process file: %s") % fname)
sys.exit(1)
if args.check:
if obj.configurable:
- print(_("Screensaver %s is configurable.") % args.screensaver)
+ print(_("Screensaver %s is configurable.") % saver)
sys.exit(0)
else:
- print(_("Screensaver %s is not configurable.") % args.screensaver)
+ print(_("Screensaver %s is not configurable.") % saver)
sys.exit(1)
+ if not obj.configurable:
+ show_fatal(primary, _("Screensaver %s has no configuration options.") % saver)
+
configure(obj.to_dict())
diff --git a/src/xfce4-screensaver-preferences.c b/src/xfce4-screensaver-preferences.c
index 51391b5..af3a8a5 100644
--- a/src/xfce4-screensaver-preferences.c
+++ b/src/xfce4-screensaver-preferences.c
@@ -47,6 +47,7 @@
#include "xfce4-screensaver-preferences-ui.h"
#define GPM_COMMAND "xfce4-power-manager-settings"
+#define CONFIGURE_COMMAND "xfce4-screensaver-configure"
enum {
NAME_COLUMN = 0,
@@ -71,6 +72,7 @@ static gboolean lock_delay_writable;
static gboolean keyboard_command_writable;
static gboolean logout_command_writable;
static gboolean logout_delay_writable;
+static gchar *active_theme = NULL;
static gint opt_socket_id = 0;
static GOptionEntry entries[] = {
@@ -271,8 +273,11 @@ config_set_theme (const char *theme_id) {
/* set the themes key to contain all available screensavers */
strv = get_all_theme_ids (theme_manager);
} else {
+ GtkWidget *configure_button = GTK_WIDGET (gtk_builder_get_object (builder, "configure_button"));
mode = GS_MODE_SINGLE;
strv = g_strsplit (theme_id, "%%%", 1);
+ active_theme = g_strdup (theme_id);
+ gtk_widget_set_sensitive (configure_button, TRUE);
}
config_set_mode (mode);
@@ -757,6 +762,7 @@ tree_selection_next (GtkTreeSelection *selection) {
static void
tree_selection_changed_cb (GtkTreeSelection *selection,
GtkWidget *preview) {
+ GtkWidget *configure_button;
GtkTreeIter iter;
GtkTreeModel *model;
char *theme;
@@ -766,6 +772,14 @@ tree_selection_changed_cb (GtkTreeSelection *selection,
return;
}
+ if (active_theme != NULL) {
+ g_free (active_theme);
+ active_theme = NULL;
+
+ configure_button = GTK_WIDGET (gtk_builder_get_object (builder, "configure_button"));
+ gtk_widget_set_sensitive (configure_button, FALSE);
+ }
+
gtk_tree_model_get (model, &iter, ID_COLUMN, &theme, NAME_COLUMN, &name, -1);
if (theme == NULL) {
@@ -781,6 +795,26 @@ tree_selection_changed_cb (GtkTreeSelection *selection,
}
static void
+configure_button_clicked_cb (GtkToolButton *button,
+ gpointer user_data) {
+ gchar *configure_cmd;
+ GError *error = NULL;
+ gboolean res;
+
+ configure_cmd = g_strdup_printf ("%s %s", CONFIGURE_COMMAND, active_theme);
+
+ res = xfce_gdk_spawn_command_line_on_screen (gdk_screen_get_default (),
+ configure_cmd,
+ &error);
+ if (!res) {
+ g_warning ("Unable to start configure command: %s", error->message);
+ g_error_free (error);
+ }
+
+ g_free(configure_cmd);
+}
+
+static void
idle_delay_value_changed_cb (GtkSpinButton *spin,
gpointer user_data) {
gdouble value;
@@ -1758,6 +1792,8 @@ configure_capplet (void) {
GtkWidget *root_warning_infobar;
GtkWidget *preview_button;
GtkWidget *gpm_button;
+ GtkWidget *configure_toolbar;
+ GtkWidget *configure_button;
GtkWidget *fullscreen_preview_window;
GtkWidget *fullscreen_preview_area;
GtkWidget *fullscreen_preview_previous;
@@ -1802,6 +1838,8 @@ configure_capplet (void) {
root_warning_infobar = GTK_WIDGET (gtk_builder_get_object (builder, "root_warning_infobar"));
preview_button = GTK_WIDGET (gtk_builder_get_object (builder, "preview_button"));
gpm_button = GTK_WIDGET (gtk_builder_get_object (builder, "power_management_button"));
+ configure_button = GTK_WIDGET (gtk_builder_get_object (builder, "configure_button"));
+ configure_toolbar = GTK_WIDGET (gtk_builder_get_object (builder, "configure_toolbar"));
fullscreen_preview_window = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_window"));
fullscreen_preview_area = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_area"));
fullscreen_preview_close = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_close"));
@@ -1828,6 +1866,16 @@ configure_capplet (void) {
G_CALLBACK (key_changed_cb),
NULL);
+ if (!is_program_in_path (CONFIGURE_COMMAND)) {
+ gtk_widget_set_no_show_all (configure_toolbar, TRUE);
+ gtk_widget_hide (configure_toolbar);
+ } else {
+ g_signal_connect (configure_button,
+ "clicked",
+ G_CALLBACK (configure_button_clicked_cb),
+ screensaver_channel);
+ }
+
/* Idle delay */
widget = GTK_WIDGET (gtk_builder_get_object (builder, "saver_idle_activation_delay"));
delay = config_get_idle_delay (&idle_delay_writable);
@@ -1993,7 +2041,11 @@ configure_capplet (void) {
static void
finalize_capplet (void) {
- g_object_unref (screensaver_channel);
+ if (screensaver_channel)
+ g_object_unref (screensaver_channel);
+
+ if (active_theme)
+ g_free (active_theme);
}
int
@@ -2083,8 +2135,11 @@ main (int argc,
finalize_capplet ();
- g_object_unref (theme_manager);
- g_object_unref (job);
+ if (theme_manager)
+ g_object_unref (theme_manager);
+
+ if (job)
+ g_object_unref (job);
return 0;
}
diff --git a/src/xfce4-screensaver-preferences.ui b/src/xfce4-screensaver-preferences.ui
index 92712ae..e88118c 100644
--- a/src/xfce4-screensaver-preferences.ui
+++ b/src/xfce4-screensaver-preferences.ui
@@ -621,32 +621,6 @@ Simon Steinbeiß
</packing>
</child>
<child>
- <object class="GtkScrolledWindow" id="saver_themes_scrolled_window">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="vexpand">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="shadow_type">in</property>
- <child>
- <object class="GtkTreeView" id="saver_themes_treeview">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection"/>
- </child>
- <accessibility>
- <relation type="label-for" target="saver_themes_treeview"/>
- </accessibility>
- </object>
- </child>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
- <child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -671,6 +645,79 @@ Simon Steinbeiß
<property name="width">2</property>
</packing>
</child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkScrolledWindow" id="saver_themes_scrolled_window">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="saver_themes_treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection"/>
+ </child>
+ <accessibility>
+ <relation type="label-for" target="saver_themes_treeview"/>
+ </accessibility>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolbar" id="configure_toolbar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="toolbar_style">both-horiz</property>
+ <property name="icon_size">2</property>
+ <child>
+ <object class="GtkToolButton" id="configure_button">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Configure screensaver</property>
+ <property name="label" translatable="yes">Configure...</property>
+ <property name="use_underline">True</property>
+ <property name="icon_name">document-properties</property>
+ <style>
+ <class name="linked"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <style>
+ <class name="inline-toolbar"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="left_attach">0</property>
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list