diff --git a/capplets/screensaver/ChangeLog b/capplets/screensaver/ChangeLog index 361aa4c7b..c52687bd8 100644 --- a/capplets/screensaver/ChangeLog +++ b/capplets/screensaver/ChangeLog @@ -1,11 +1,60 @@ 2000-10-07 Bradford Hovinen + * screensaver-prefs-dialog.c (set_widgets_sensitive): Set + set->enabled + (write_boolean): + (write_number): + (write_select): + (write_string): Write only if the enabled flag is set + (get_spinbutton): + (get_check_button): + (get_select_widget): + (get_file_entry): + (get_entry): + (place_number): + (place_hgroup): + (populate_table): Set set->enabled + (read_boolean): + (read_number): + (read_select): + (read_string): Don't set the value if the set is an alias and not + enabled + (read_number): + (read_string): Set value to default if not supplied + (read_command_line): Accept argument as negative number if it is a + - + + * screensaver-prefs-dialog.h (struct _PrefsDialogWidgetSet): Add + member enabled - TRUE iff the widget is enabled + + * screensaver-prefs-dialog.c (free_set_cb): Don't try to free the + widgets if the set is an alias + (get_spinbutton): + (get_check_button): + (get_select_widget): + (get_file_entry): + (get_entry): + (place_number): + (place_hgroup): + (populate_table): Set set->alias + + * screensaver-prefs-dialog.h (struct _PrefsDialogWidgetSet): Add + member alias - TRUE means don't try to free widgets + + * screensaver-prefs-dialog.c (get_entry): Have entry expand, not label + + * screensavers/flag.xml: Enable selection for text and bitmap, + Set neg_size same-as to pos_size + * screensaver-prefs-dialog.c (write_command_line): Support files (place_entry): Allow getting a file entry or a string entry (populate_table): Support files (get_file_entry): Implement. Return a set for a GnomeFileEntry (read_string): Support files (place_screensaver_properties): Support files + (populate_table): + (place_hgroup): Add feature to allow multiple widget definitions + to share the same widget 2000-09-24 Bradford Hovinen diff --git a/capplets/screensaver/screensaver-prefs-dialog.c b/capplets/screensaver/screensaver-prefs-dialog.c index 6613d4d4f..0a23dd067 100644 --- a/capplets/screensaver/screensaver-prefs-dialog.c +++ b/capplets/screensaver/screensaver-prefs-dialog.c @@ -341,7 +341,9 @@ screensaver_prefs_dialog_destroy (ScreensaverPrefsDialog *dialog) static void free_set_cb (gchar *key, PrefsDialogWidgetSet *set, gpointer data) { - g_list_free (set->widgets); + if (!set->alias) + g_list_free (set->widgets); + g_free (set); } @@ -378,6 +380,8 @@ set_widgets_sensitive (GTree *widget_db, set = g_tree_lookup (widget_db, str); if (!set) continue; + set->enabled = s; + for (node = set->widgets; node; node = node->next) gtk_widget_set_sensitive (GTK_WIDGET (node->data), s); } @@ -450,7 +454,7 @@ write_boolean (xmlNodePtr argument_data, GTree *widget_db) if (!(id = xmlGetProp (argument_data, "id"))) return; set = g_tree_lookup (widget_db, id); - if (!set || !GTK_WIDGET_IS_SENSITIVE (set->value_widget)) return NULL; + if (!set || !set->enabled) return NULL; if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (set->value_widget))) @@ -472,7 +476,7 @@ write_number (xmlNodePtr argument_data, GTree *widget_db) if (!(id = xmlGetProp (argument_data, "id"))) return; set = g_tree_lookup (widget_db, id); - if (!set || !GTK_WIDGET_IS_SENSITIVE (set->value_widget)) return NULL; + if (!set || !set->enabled) return NULL; if (GTK_IS_RANGE (set->value_widget)) adjustment = gtk_range_get_adjustment @@ -524,7 +528,7 @@ write_select (xmlNodePtr argument_data, GTree *widget_db) if (!(id = xmlGetProp (argument_data, "id"))) return; set = g_tree_lookup (widget_db, id); - if (!set || !GTK_WIDGET_IS_SENSITIVE (set->value_widget)) return NULL; + if (!set || !set->enabled) return NULL; menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (set->value_widget)); menu_item = GTK_MENU_SHELL (menu)->children; active = gtk_menu_get_active (GTK_MENU (menu)); @@ -554,7 +558,7 @@ write_string (xmlNodePtr argument_data, GTree *widget_db) if (!(id = xmlGetProp (argument_data, "id"))) return; set = g_tree_lookup (widget_db, id); - if (!set || !GTK_WIDGET_IS_SENSITIVE (set->value_widget)) return NULL; + if (!set || !set->enabled) return NULL; str = gtk_entry_get_text (GTK_ENTRY (set->value_widget)); arg = xmlGetProp (argument_data, "arg"); @@ -690,7 +694,9 @@ read_command_line (char *command_line) while (isspace (*endpos)) endpos++; } - } else if (*valpos != '-') { + } else if (*valpos != '-' || + isdigit(valpos[1])) + { endpos = strchr (valpos, ' '); if (endpos) *endpos = '\0'; value = g_strdup (valpos); @@ -804,6 +810,8 @@ get_spinbutton (xmlNodePtr node, GtkWidget **widget) spinbutton = gtk_spin_button_new (adjustment, 1.0, 0); set = g_new0 (PrefsDialogWidgetSet, 1); + set->alias = FALSE; + set->enabled = TRUE; set->value_widget = spinbutton; if (label_str) { @@ -847,6 +855,8 @@ get_check_button (ScreensaverPrefsDialog *dialog, xmlNodePtr node, checkbutton = gtk_check_button_new_with_label (label); set = g_new0 (PrefsDialogWidgetSet, 1); + set->alias = FALSE; + set->enabled = TRUE; set->widgets = g_list_append (NULL, checkbutton); set->value_widget = checkbutton; @@ -880,6 +890,8 @@ get_select_widget (ScreensaverPrefsDialog *dialog, xmlNodePtr select_data, menu = gtk_menu_new (); set = g_new0 (PrefsDialogWidgetSet, 1); + set->alias = FALSE; + set->enabled = TRUE; set->value_widget = option_menu; gtk_object_set_data (GTK_OBJECT (option_menu), "dialog", dialog); @@ -952,6 +964,8 @@ get_file_entry (ScreensaverPrefsDialog *dialog, xmlNodePtr node, default_str); set = g_new0 (PrefsDialogWidgetSet, 1); + set->alias = FALSE; + set->enabled = TRUE; set->value_widget = gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (entry)); @@ -998,15 +1012,17 @@ get_entry (ScreensaverPrefsDialog *dialog, xmlNodePtr node, gtk_entry_set_text (GTK_ENTRY (entry), default_str); set = g_new0 (PrefsDialogWidgetSet, 1); + set->alias = FALSE; + set->enabled = TRUE; set->value_widget = entry; if (label_str) { hbox = gtk_hbox_new (FALSE, 5); label = gtk_label_new (label_str); gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), entry, - FALSE, TRUE, 0); + TRUE, TRUE, 0); set->widgets = g_list_append (NULL, hbox); g_list_append (set->widgets, label); @@ -1058,6 +1074,8 @@ place_number (GtkTable *table, xmlNodePtr node, gint *row) return NULL; set = g_new0 (PrefsDialogWidgetSet, 1); + set->alias = FALSE; + set->enabled = TRUE; label = gtk_label_new (label_str); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_table_attach (table, label, 0, 3, *row, *row + 1, @@ -1150,10 +1168,10 @@ place_hgroup (ScreensaverPrefsDialog *dialog, GtkTable *table, GTree *widget_db, xmlNodePtr hgroup_data, gint *row) { - PrefsDialogWidgetSet *set; + PrefsDialogWidgetSet *set, *set1; GtkWidget *hbox, *widget; xmlNodePtr node; - gchar *id; + gchar *id, *same_as; g_return_if_fail (table != NULL); g_return_if_fail (GTK_IS_TABLE (table)); @@ -1167,6 +1185,20 @@ place_hgroup (ScreensaverPrefsDialog *dialog, id = xmlGetProp (node, "id"); if (!id) continue; + same_as = xmlGetProp (node, "same-as"); + + if (same_as != NULL && *same_as != '\0') { + set1 = g_tree_lookup (dialog->widget_db, same_as); + if (set1 == NULL) continue; + set = g_new0 (PrefsDialogWidgetSet, 1); + set->alias = TRUE; + set->enabled = TRUE; + set->value_widget = set1->value_widget; + set->widgets = set1->widgets; + g_tree_insert (dialog->widget_db, id, set); + continue; + } + if (!strcmp (node->name, "number")) set = get_spinbutton (node, &widget); else if (!strcmp (node->name, "boolean")) @@ -1247,8 +1279,8 @@ place_entry (ScreensaverPrefsDialog *dialog, GtkTable *table, static void populate_table (ScreensaverPrefsDialog *dialog, GtkTable *table) { - char *id, *type; - PrefsDialogWidgetSet *set; + char *id, *type, *same_as; + PrefsDialogWidgetSet *set, *set1; xmlNodePtr node; gint row = 0; @@ -1265,6 +1297,20 @@ populate_table (ScreensaverPrefsDialog *dialog, GtkTable *table) set = NULL; + same_as = xmlGetProp (node, "same-as"); + + if (same_as != NULL && *same_as != '\0') { + set1 = g_tree_lookup (dialog->widget_db, same_as); + if (set1 == NULL) continue; + set = g_new0 (PrefsDialogWidgetSet, 1); + set->alias = TRUE; + set->enabled = TRUE; + set->value_widget = set1->value_widget; + set->widgets = set1->widgets; + g_tree_insert (dialog->widget_db, id, set); + continue; + } + if (!strcmp (node->name, "number")) set = place_number (table, node, &row); else if (!strcmp (node->name, "boolean")) @@ -1415,7 +1461,8 @@ read_boolean (GTree *widget_db, xmlNodePtr argument_data, GScanner *cli_db) if (!(id = xmlGetProp (argument_data, "id"))) return; set = g_tree_lookup (widget_db, id); - if (!set || !set->value_widget) return; + if (!set || !set->value_widget || (set->alias && !set->enabled)) + return; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (set->value_widget), found >= 0); @@ -1450,12 +1497,17 @@ read_number (GTree *widget_db, xmlNodePtr argument_data, GScanner *cli_db) args = g_strsplit (arg_line, " ", -1); arg = g_scanner_scope_lookup_symbol (cli_db, 0, args[0] + 1); - if (!arg || arg == (char *) 1) return; + + if (!arg || arg == (char *) 1) + arg = xmlGetProp (argument_data, "default"); + if (!arg) + return; if (!(id = xmlGetProp (argument_data, "id"))) return; set = g_tree_lookup (widget_db, id); - if (!set || !set->value_widget) return; + if (!set || !set->value_widget || (set->alias && !set->enabled)) + return; from_cli_conv = xmlGetProp (argument_data, "from-cli-conv"); @@ -1496,7 +1548,8 @@ read_select (GTree *widget_db, xmlNodePtr argument_data, if (!(id = xmlGetProp (argument_data, "id"))) return; set = g_tree_lookup (widget_db, id); - if (!set || !set->value_widget) return; + if (!set || !set->value_widget || (set->alias && !set->enabled)) + return; menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (set->value_widget)); @@ -1568,12 +1621,17 @@ read_string (GTree *widget_db, xmlNodePtr argument_data, GScanner *cli_db, args = g_strsplit (arg_line, " ", -1); arg = g_scanner_scope_lookup_symbol (cli_db, 0, args[0] + 1); - if (!arg || arg == (char *) 1) return; + + if (!arg || arg == (char *) 1) + arg = xmlGetProp (argument_data, "default"); + if (!arg) + return; if (!(id = xmlGetProp (argument_data, "id"))) return; set = g_tree_lookup (widget_db, id); - if (!set || !set->value_widget) return; + if (!set || !set->value_widget || (set->alias && !set->enabled)) + return; gtk_entry_set_text (GTK_ENTRY (set->value_widget), arg); diff --git a/capplets/screensaver/screensaver-prefs-dialog.h b/capplets/screensaver/screensaver-prefs-dialog.h index 8e303c58b..1c29489a6 100644 --- a/capplets/screensaver/screensaver-prefs-dialog.h +++ b/capplets/screensaver/screensaver-prefs-dialog.h @@ -44,6 +44,8 @@ struct _PrefsDialogWidgetSet { GList *widgets; GtkWidget *value_widget; + gboolean alias; + gboolean enabled; }; struct _ScreensaverPrefsDialog