Add support for --get and --set to cap_options (gnome_capplet_init): Add
2000-08-16 Bradford Hovinen <hovinen@helixcode.com> * capplet-widget.c: Add support for --get and --set to cap_options (gnome_capplet_init): Add return values 3 for --get and 4 for --set 2000-08-16 Bradford Hovinen <hovinen@helixcode.com> * rc-parse.c (write_screensaver_list): Don't try to write string if the screensaver has no command line * main.c (main): Register Popt table containing get and set options; call do_get_xml and do_set_xml when necessary (do_get_xml): (do_set_xml): Implement
This commit is contained in:
parent
a92e2e6423
commit
d24a6c7b67
5 changed files with 274 additions and 3 deletions
|
@ -1,5 +1,28 @@
|
||||||
2000-08-16 Bradford Hovinen <hovinen@helixcode.com>
|
2000-08-16 Bradford Hovinen <hovinen@helixcode.com>
|
||||||
|
|
||||||
|
* rc-parse.c (write_screensaver_list): Don't try to write string
|
||||||
|
if the screensaver has no command line
|
||||||
|
|
||||||
|
* main.c (main): Register Popt table containing get and set
|
||||||
|
options; call do_get_xml and do_set_xml when necessary
|
||||||
|
(do_get_xml):
|
||||||
|
(do_set_xml): Implement
|
||||||
|
|
||||||
|
* preferences.c (xml_get_number): Implement. Interpret the XML
|
||||||
|
content of a node as a number and return it
|
||||||
|
(xml_get_programs_list): Implement. Iterate through a programs
|
||||||
|
node and form a list of screensavers
|
||||||
|
(preferences_read_xml): Implement. Read an XML description of the
|
||||||
|
screensaver's state and put it in a preferences object
|
||||||
|
(xml_write_programs_list): Implement. Write out an XML node
|
||||||
|
corresponding to a list of screensavers
|
||||||
|
(preferences_write_xml): Implement. Write out an XML document with
|
||||||
|
the state of the screensaver system
|
||||||
|
(screensaver_read_xml): Implement. Read an XML node describing a
|
||||||
|
screensaver
|
||||||
|
(screensaver_write_xml): Implement. Write an XML node describing a
|
||||||
|
screensaver
|
||||||
|
|
||||||
* screensaver-prefs-dialog.c (get_select_widget): Remove
|
* screensaver-prefs-dialog.c (get_select_widget): Remove
|
||||||
extraneous precondition check
|
extraneous precondition check
|
||||||
(read_command_line): Rewrote to support quoted strings in the
|
(read_command_line): Rewrote to support quoted strings in the
|
||||||
|
|
|
@ -28,6 +28,9 @@
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <gnome.h>
|
#include <gnome.h>
|
||||||
#include <libgnomeui/gnome-window-icon.h>
|
#include <libgnomeui/gnome-window-icon.h>
|
||||||
|
#include <tree.h>
|
||||||
|
#include <parser.h>
|
||||||
|
#include <xmlIO.h>
|
||||||
|
|
||||||
#include <glade/glade.h>
|
#include <glade/glade.h>
|
||||||
|
|
||||||
|
@ -45,6 +48,8 @@ static PrefsWidget *prefs_widget;
|
||||||
|
|
||||||
static CappletWidget *capplet;
|
static CappletWidget *capplet;
|
||||||
|
|
||||||
|
static gboolean do_get, do_set;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
state_changed_cb (GtkWidget *widget)
|
state_changed_cb (GtkWidget *widget)
|
||||||
{
|
{
|
||||||
|
@ -179,6 +184,50 @@ setup_capplet_widget (void)
|
||||||
prefs->frozen = FALSE;
|
prefs->frozen = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
do_get_xml (void)
|
||||||
|
{
|
||||||
|
Preferences *prefs;
|
||||||
|
xmlDocPtr doc;
|
||||||
|
|
||||||
|
prefs = preferences_new ();
|
||||||
|
preferences_load (prefs);
|
||||||
|
doc = preferences_write_xml (prefs);
|
||||||
|
xmlDocDump (stdout, doc);
|
||||||
|
preferences_destroy (prefs);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
do_set_xml (void)
|
||||||
|
{
|
||||||
|
Preferences *prefs;
|
||||||
|
xmlDocPtr doc;
|
||||||
|
Preferences *old_prefs, *new_prefs;
|
||||||
|
char *buffer;
|
||||||
|
int len = 0;
|
||||||
|
|
||||||
|
while (!feof (stdin)) {
|
||||||
|
if (!len) buffer = g_new (char, 16384);
|
||||||
|
else buffer = g_renew (char, buffer, len + 16384);
|
||||||
|
fread (buffer + len, 1, 16384, stdin);
|
||||||
|
len += 16384;
|
||||||
|
}
|
||||||
|
|
||||||
|
doc = xmlParseMemory (buffer, strlen (buffer));
|
||||||
|
|
||||||
|
old_prefs = preferences_new ();
|
||||||
|
preferences_load (old_prefs);
|
||||||
|
|
||||||
|
new_prefs = preferences_read_xml (doc);
|
||||||
|
|
||||||
|
if (new_prefs) {
|
||||||
|
new_prefs->config_db = old_prefs->config_db;
|
||||||
|
preferences_save (new_prefs);
|
||||||
|
} else {
|
||||||
|
g_warning ("Error while reading the screensaver config file");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
@ -197,6 +246,14 @@ main (int argc, char **argv)
|
||||||
if (res < 0) {
|
if (res < 0) {
|
||||||
g_error ("Could not initialize the capplet.");
|
g_error ("Could not initialize the capplet.");
|
||||||
}
|
}
|
||||||
|
else if (res == 3) {
|
||||||
|
do_get_xml ();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else if (res == 4) {
|
||||||
|
do_set_xml ();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
client = gnome_master_client ();
|
client = gnome_master_client ();
|
||||||
flags = gnome_client_get_flags (client);
|
flags = gnome_client_get_flags (client);
|
||||||
|
|
|
@ -217,6 +217,145 @@ preferences_save (Preferences *prefs)
|
||||||
gnome_config_sync ();
|
gnome_config_sync ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gint
|
||||||
|
xml_get_number (xmlNodePtr node)
|
||||||
|
{
|
||||||
|
return atoi (xmlNodeGetContent (node));
|
||||||
|
}
|
||||||
|
|
||||||
|
static GList *
|
||||||
|
xml_get_programs_list (xmlNodePtr programs_node)
|
||||||
|
{
|
||||||
|
GList *list_head = NULL, *list_tail = NULL;
|
||||||
|
xmlNodePtr node;
|
||||||
|
Screensaver *saver;
|
||||||
|
gint id = 0;
|
||||||
|
|
||||||
|
for (node = programs_node->childs; node; node = node->next) {
|
||||||
|
saver = screensaver_read_xml (node);
|
||||||
|
if (!saver) continue;
|
||||||
|
saver->id = id++;
|
||||||
|
list_tail = g_list_append (list_tail, saver);
|
||||||
|
if (list_head)
|
||||||
|
list_tail = list_tail->next;
|
||||||
|
else
|
||||||
|
list_head = list_tail;
|
||||||
|
}
|
||||||
|
|
||||||
|
return list_head;
|
||||||
|
}
|
||||||
|
|
||||||
|
Preferences *
|
||||||
|
preferences_read_xml (xmlDocPtr xml_doc)
|
||||||
|
{
|
||||||
|
Preferences *prefs;
|
||||||
|
xmlNodePtr root_node, node;
|
||||||
|
|
||||||
|
prefs = preferences_new ();
|
||||||
|
|
||||||
|
root_node = xmlDocGetRootElement (xml_doc);
|
||||||
|
|
||||||
|
if (strcmp (root_node->name, "screensaver-prefs"))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
for (node = root_node->childs; node; node = node->next) {
|
||||||
|
if (!strcmp (node->name, "verbose"))
|
||||||
|
prefs->verbose = TRUE;
|
||||||
|
else if (!strcmp (node->name, "lock"))
|
||||||
|
prefs->lock = TRUE;
|
||||||
|
else if (!strcmp (node->name, "fade"))
|
||||||
|
prefs->fade = TRUE;
|
||||||
|
else if (!strcmp (node->name, "unfade"))
|
||||||
|
prefs->unfade = TRUE;
|
||||||
|
else if (!strcmp (node->name, "fade-seconds"))
|
||||||
|
prefs->fade_seconds = xml_get_number (node);
|
||||||
|
else if (!strcmp (node->name, "fade-ticks"))
|
||||||
|
prefs->fade_ticks = xml_get_number (node);
|
||||||
|
else if (!strcmp (node->name, "install-colormap"))
|
||||||
|
prefs->install_colormap = TRUE;
|
||||||
|
else if (!strcmp (node->name, "nice"))
|
||||||
|
prefs->nice = xml_get_number (node);
|
||||||
|
else if (!strcmp (node->name, "timeout"))
|
||||||
|
prefs->timeout = xml_get_number (node);
|
||||||
|
else if (!strcmp (node->name, "lock-timeout"))
|
||||||
|
prefs->lock_timeout = xml_get_number (node);
|
||||||
|
else if (!strcmp (node->name, "cycle"))
|
||||||
|
prefs->cycle = xml_get_number (node);
|
||||||
|
else if (!strcmp (node->name, "programs"))
|
||||||
|
prefs->screensavers = xml_get_programs_list (node);
|
||||||
|
}
|
||||||
|
|
||||||
|
return prefs;
|
||||||
|
}
|
||||||
|
|
||||||
|
static xmlNodePtr
|
||||||
|
xml_write_programs_list (GList *screensavers)
|
||||||
|
{
|
||||||
|
xmlNodePtr node;
|
||||||
|
|
||||||
|
node = xmlNewNode (NULL, "programs");
|
||||||
|
|
||||||
|
for (; screensavers; screensavers = screensavers->next)
|
||||||
|
xmlAddChild (node, screensaver_write_xml
|
||||||
|
(SCREENSAVER (screensavers->data)));
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
xmlDocPtr
|
||||||
|
preferences_write_xml (Preferences *prefs)
|
||||||
|
{
|
||||||
|
xmlDocPtr doc;
|
||||||
|
xmlNodePtr node;
|
||||||
|
char *tmp;
|
||||||
|
|
||||||
|
doc = xmlNewDoc ("1.0");
|
||||||
|
|
||||||
|
node = xmlNewDocNode (doc, NULL, "screensaver-prefs", NULL);
|
||||||
|
|
||||||
|
if (prefs->verbose)
|
||||||
|
xmlNewChild (node, NULL, "verbose", NULL);
|
||||||
|
if (prefs->lock)
|
||||||
|
xmlNewChild (node, NULL, "lock", NULL);
|
||||||
|
if (prefs->fade)
|
||||||
|
xmlNewChild (node, NULL, "fade", NULL);
|
||||||
|
if (prefs->unfade)
|
||||||
|
xmlNewChild (node, NULL, "unfade", NULL);
|
||||||
|
|
||||||
|
tmp = g_strdup_printf ("%d", prefs->fade_seconds);
|
||||||
|
xmlNewChild (node, NULL, "fade-seconds", tmp);
|
||||||
|
g_free (tmp);
|
||||||
|
|
||||||
|
tmp = g_strdup_printf ("%d", prefs->fade_ticks);
|
||||||
|
xmlNewChild (node, NULL, "fade-ticks", tmp);
|
||||||
|
g_free (tmp);
|
||||||
|
|
||||||
|
if (prefs->install_colormap)
|
||||||
|
xmlNewChild (node, NULL, "install-colormap", NULL);
|
||||||
|
|
||||||
|
tmp = g_strdup_printf ("%d", prefs->nice);
|
||||||
|
xmlNewChild (node, NULL, "nice", tmp);
|
||||||
|
g_free (tmp);
|
||||||
|
|
||||||
|
tmp = g_strdup_printf ("%d", prefs->timeout);
|
||||||
|
xmlNewChild (node, NULL, "timeout", tmp);
|
||||||
|
g_free (tmp);
|
||||||
|
|
||||||
|
tmp = g_strdup_printf ("%d", prefs->lock_timeout);
|
||||||
|
xmlNewChild (node, NULL, "lock-timeout", tmp);
|
||||||
|
g_free (tmp);
|
||||||
|
|
||||||
|
tmp = g_strdup_printf ("%d", prefs->cycle);
|
||||||
|
xmlNewChild (node, NULL, "cycle", tmp);
|
||||||
|
g_free (tmp);
|
||||||
|
|
||||||
|
xmlAddChild (node, xml_write_programs_list (prefs->screensavers));
|
||||||
|
|
||||||
|
xmlDocSetRootElement (doc, node);
|
||||||
|
|
||||||
|
return doc;
|
||||||
|
}
|
||||||
|
|
||||||
Screensaver *
|
Screensaver *
|
||||||
screensaver_new (void)
|
screensaver_new (void)
|
||||||
{
|
{
|
||||||
|
@ -274,6 +413,52 @@ screensaver_remove (Screensaver *saver, GList *screensavers)
|
||||||
return g_list_remove_link (screensavers, saver->link);
|
return g_list_remove_link (screensavers, saver->link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Screensaver *
|
||||||
|
screensaver_read_xml (xmlNodePtr saver_node)
|
||||||
|
{
|
||||||
|
Screensaver *saver;
|
||||||
|
xmlNodePtr node;
|
||||||
|
|
||||||
|
if (strcmp (saver_node->name, "screensaver"))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
saver = screensaver_new ();
|
||||||
|
|
||||||
|
for (node = saver_node->childs; node; node = node->next) {
|
||||||
|
if (!strcmp (node->name, "name"))
|
||||||
|
saver->name = g_strdup (xmlNodeGetContent (node));
|
||||||
|
else if (!strcmp (node->name, "label"))
|
||||||
|
saver->label = g_strdup (xmlNodeGetContent (node));
|
||||||
|
else if (!strcmp (node->name, "command-line"))
|
||||||
|
saver->command_line =
|
||||||
|
g_strdup (xmlNodeGetContent (node));
|
||||||
|
else if (!strcmp (node->name, "visual"))
|
||||||
|
saver->visual = g_strdup (xmlNodeGetContent (node));
|
||||||
|
else if (!strcmp (node->name, "enabled"))
|
||||||
|
saver->enabled = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return saver;
|
||||||
|
}
|
||||||
|
|
||||||
|
xmlNodePtr
|
||||||
|
screensaver_write_xml (Screensaver *saver)
|
||||||
|
{
|
||||||
|
xmlNodePtr saver_node;
|
||||||
|
|
||||||
|
saver_node = xmlNewNode (NULL, "screensaver");
|
||||||
|
|
||||||
|
xmlNewChild (saver_node, NULL, "name", saver->name);
|
||||||
|
xmlNewChild (saver_node, NULL, "label", saver->label);
|
||||||
|
xmlNewChild (saver_node, NULL, "command-line", saver->command_line);
|
||||||
|
xmlNewChild (saver_node, NULL, "visual", saver->visual);
|
||||||
|
|
||||||
|
if (saver->enabled)
|
||||||
|
xmlNewChild (saver_node, NULL, "enabled", NULL);
|
||||||
|
|
||||||
|
return saver_node;
|
||||||
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
screensaver_get_desc (Screensaver *saver)
|
screensaver_get_desc (Screensaver *saver)
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
#include <tree.h>
|
||||||
|
|
||||||
enum _SelectionMode {
|
enum _SelectionMode {
|
||||||
SM_DISABLE_SCREENSAVER,
|
SM_DISABLE_SCREENSAVER,
|
||||||
|
@ -99,12 +100,18 @@ void preferences_destroy (Preferences *prefs);
|
||||||
void preferences_load (Preferences *prefs);
|
void preferences_load (Preferences *prefs);
|
||||||
void preferences_save (Preferences *prefs);
|
void preferences_save (Preferences *prefs);
|
||||||
|
|
||||||
|
Preferences *preferences_read_xml (xmlDocPtr xml_doc);
|
||||||
|
xmlDocPtr preferences_write_xml (Preferences *prefs);
|
||||||
|
|
||||||
Screensaver *screensaver_new (void);
|
Screensaver *screensaver_new (void);
|
||||||
void screensaver_destroy (Screensaver *saver);
|
void screensaver_destroy (Screensaver *saver);
|
||||||
|
|
||||||
GList *screensaver_add (Screensaver *saver, GList *screensavers);
|
GList *screensaver_add (Screensaver *saver, GList *screensavers);
|
||||||
GList *screensaver_remove (Screensaver *saver, GList *screensavers);
|
GList *screensaver_remove (Screensaver *saver, GList *screensavers);
|
||||||
|
|
||||||
|
Screensaver *screensaver_read_xml (xmlNodePtr node);
|
||||||
|
xmlNodePtr screensaver_write_xml (Screensaver *saver);
|
||||||
|
|
||||||
char *screensaver_get_desc (Screensaver *saver);
|
char *screensaver_get_desc (Screensaver *saver);
|
||||||
|
|
||||||
char *screensaver_get_label (gchar *name);
|
char *screensaver_get_label (gchar *name);
|
||||||
|
|
|
@ -612,14 +612,13 @@ write_screensaver_list (GList *screensavers)
|
||||||
gchar *str;
|
gchar *str;
|
||||||
|
|
||||||
hack_string = g_string_new (NULL);
|
hack_string = g_string_new (NULL);
|
||||||
node = screensavers;
|
|
||||||
|
|
||||||
while (node) {
|
for (node = screensavers; node; node = node->next) {
|
||||||
saver = SCREENSAVER (node->data);
|
saver = SCREENSAVER (node->data);
|
||||||
|
if (!saver->command_line) continue;
|
||||||
str = format_hack (saver, TRUE);
|
str = format_hack (saver, TRUE);
|
||||||
g_string_append (hack_string, str);
|
g_string_append (hack_string, str);
|
||||||
g_string_append (hack_string, "\n");
|
g_string_append (hack_string, "\n");
|
||||||
node = node->next;
|
|
||||||
g_free (str);
|
g_free (str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue