diff --git a/capplets/background/ChangeLog b/capplets/background/ChangeLog index 3663e38ce..1151423c0 100644 --- a/capplets/background/ChangeLog +++ b/capplets/background/ChangeLog @@ -1,3 +1,9 @@ +2002-03-14 Richard Hestilow + + * background-properties-capplet.c (setup_dialog): Use new enum + peditors, and convert to using the #defined gconf keys from + preferences.h. + 2002-03-09 Richard Hestilow * background-properties-capplet.c (setup_dialog): Hook up diff --git a/capplets/background/background-properties-capplet.c b/capplets/background/background-properties-capplet.c index e74d68a3c..4476a47e4 100644 --- a/capplets/background/background-properties-capplet.c +++ b/capplets/background/background-properties-capplet.c @@ -36,6 +36,7 @@ #include "gconf-property-editor.h" #include "applier.h" #include "preview-file-selection.h" +#include "activate-settings-daemon.h" /* Retrieve legacy gnome_config settings and store them in the GConf * database. This involves some translation of the settings' meanings. @@ -49,42 +50,52 @@ get_legacy_settings (void) gboolean val_boolean; gboolean def; gchar *val_filename; + gchar *path; + gchar *prefix; GConfClient *client; + /* gnome_config needs to be told to use the Gnome1 prefix */ + path = g_build_filename (g_get_home_dir (), ".gnome", "Background", NULL); + prefix = g_strconcat ("=", path, "=", "/Default/", NULL); + gnome_config_push_prefix (prefix); + g_free (prefix); + g_free (path); + client = gconf_client_get_default (); - gconf_client_set_bool (client, "/desktop/gnome/background/enabled", - gnome_config_get_bool ("/Background/Default/Enabled=true"), NULL); + gconf_client_set_bool (client, BG_PREFERENCES_DRAW_BACKGROUND, + gnome_config_get_bool ("Enabled=true"), NULL); - val_filename = gnome_config_get_string ("/Background/Default/wallpaper=(none)"); - gconf_client_set_string (client, "/desktop/gnome/background/wallpaper-filename", - val_filename, NULL); + val_filename = gnome_config_get_string ("wallpaper=(none)"); if (val_filename != NULL && strcmp (val_filename, "(none)")) - gconf_client_set_bool (client, "/desktop/gnome/background/wallpaper-enabled", TRUE, NULL); + { + gconf_client_set_string (client, BG_PREFERENCES_PICTURE_FILENAME, + val_filename, NULL); + gconf_client_set_string (client, BG_PREFERENCES_PICTURE_OPTIONS, + bg_preferences_get_wptype_as_string (gnome_config_get_int ("wallpaperAlign=0")), NULL); + } else - gconf_client_set_bool (client, "/desktop/gnome/background/wallpaper-enabled", FALSE, NULL); + gconf_client_set_string (client, BG_PREFERENCES_PICTURE_OPTIONS, "none", NULL); g_free (val_filename); - gconf_client_set_int (client, "/desktop/gnome/background/wallpaper-type", - gnome_config_get_int ("/Background/Default/wallpaperAlign=0"), NULL); - gconf_client_set_string (client, "/desktop/gnome/background/color1", - gnome_config_get_string ("/Background/Default/color1"), NULL); - gconf_client_set_string (client, "/desktop/gnome/background/color2", - gnome_config_get_string ("/Background/Default/color2"), NULL); + gconf_client_set_string (client, BG_PREFERENCES_PRIMARY_COLOR, + gnome_config_get_string ("color1"), NULL); + gconf_client_set_string (client, BG_PREFERENCES_SECONDARY_COLOR, + gnome_config_get_string ("color2"), NULL); /* Code to deal with new enum - messy */ val_int = -1; - val_string = gnome_config_get_string_with_default ("/Background/Default/simple=solid", &def); + val_string = gnome_config_get_string_with_default ("simple=solid", &def); if (!def) { if (!strcmp (val_string, "solid")) { val_int = ORIENTATION_SOLID; } else { g_free (val_string); - val_string = gnome_config_get_string_with_default ("/Background/Default/gradient=vertical", &def); + val_string = gnome_config_get_string_with_default ("gradient=vertical", &def); if (!def) val_int = (!strcmp (val_string, "vertical")) ? ORIENTATION_VERT : ORIENTATION_HORIZ; } @@ -93,13 +104,17 @@ get_legacy_settings (void) g_free (val_string); if (val_int != -1) - gconf_client_set_int (client, "/desktop/gnome/background/orientation", val_int, NULL); + gconf_client_set_string (client, BG_PREFERENCES_COLOR_SHADING_TYPE, bg_preferences_get_orientation_as_string (val_int), NULL); - val_boolean = gnome_config_get_bool_with_default ("/Background/Default/adjustOpacity=true", &def); + val_boolean = gnome_config_get_bool_with_default ("adjustOpacity=true", &def); if (!def && val_boolean) - gconf_client_set_int (client, "/desktop/gnome/background/opacity", - gnome_config_get_int ("/Background/Default/opacity=100"), NULL); + gconf_client_set_int (client, BG_PREFERENCES_PICTURE_OPACITY, + gnome_config_get_int ("opacity=100"), NULL); + else + gconf_client_set_int (client, BG_PREFERENCES_PICTURE_OPACITY, 100, NULL); + + gnome_config_pop_prefix (); } /* Initial apply to the preview, and setting of the color frame's sensitivity. @@ -169,15 +184,22 @@ peditor_value_changed (GConfPropertyEditor *peditor, const gchar *key, const GCo if (GTK_WIDGET_REALIZED (bg_applier_get_preview_widget (bg_applier))) bg_applier_apply_prefs (bg_applier, BG_PREFERENCES (prefs)); - if (!strcmp (key, "/desktop/gnome/background/wallpaper-enabled") || - !strcmp (key, "/desktop/gnome/background/wallpaper-filename") || - !strcmp (key, "/desktop/gnome/background/wallpaper-type")) + if (!strcmp (key, BG_PREFERENCES_PICTURE_FILENAME) || + !strcmp (key, BG_PREFERENCES_PICTURE_OPTIONS)) { color_frame = g_object_get_data (G_OBJECT (prefs), "color-frame"); gtk_widget_set_sensitive (color_frame, bg_applier_render_color_p (bg_applier, prefs)); } } +/* Returns the wallpaper enum set before we disabled it */ +static int +get_val_true_cb (GConfPropertyEditor *peditor, gpointer data) +{ + BGPreferences *prefs = (BGPreferences*) data; + return prefs->wallpaper_type; +} + /* Set up the property editors in the dialog. This also loads the preferences * and sets up the callbacks. */ @@ -191,7 +213,7 @@ setup_dialog (GladeXML *dialog, GConfChangeSet *changeset, BGApplier *bg_applier /* Override the enabled setting to make sure background is enabled */ client = gconf_client_get_default (); - gconf_client_set_bool (client, "/desktop/gnome/background/enabled", TRUE, NULL); + gconf_client_set_bool (client, BG_PREFERENCES_DRAW_BACKGROUND, TRUE, NULL); /* Load preferences */ prefs = bg_preferences_new (); @@ -202,28 +224,28 @@ setup_dialog (GladeXML *dialog, GConfChangeSet *changeset, BGApplier *bg_applier g_object_set_data (prefs, "color-frame", WID ("color_frame")); g_object_set_data (prefs, "applier", bg_applier); - peditor = gconf_peditor_new_select_menu - (changeset, "/desktop/gnome/background/orientation", WID ("color_option"), NULL); + peditor = gconf_peditor_new_select_menu_with_enum + (changeset, BG_PREFERENCES_COLOR_SHADING_TYPE, WID ("color_option"), bg_preferences_orientation_get_type (), NULL); g_signal_connect (peditor, "value-changed", (GCallback) peditor_value_changed, prefs); peditor = gconf_peditor_new_color - (changeset, "/desktop/gnome/background/color1", WID ("colorpicker1"), NULL); + (changeset, BG_PREFERENCES_PRIMARY_COLOR, WID ("colorpicker1"), NULL); g_signal_connect (peditor, "value-changed", (GCallback) peditor_value_changed, prefs); peditor = gconf_peditor_new_color - (changeset, "/desktop/gnome/background/color2", WID ("colorpicker2"), NULL); + (changeset, BG_PREFERENCES_SECONDARY_COLOR, WID ("colorpicker2"), NULL); g_signal_connect (peditor, "value-changed", (GCallback) peditor_value_changed, prefs); peditor = gconf_peditor_new_filename - (changeset, "/desktop/gnome/background/wallpaper-filename", WID ("image_fileentry"), NULL); + (changeset, BG_PREFERENCES_PICTURE_FILENAME, WID ("image_fileentry"), NULL); g_signal_connect (peditor, "value-changed", (GCallback) peditor_value_changed, prefs); - peditor = gconf_peditor_new_select_menu - (changeset, "/desktop/gnome/background/wallpaper-type", WID ("image_option"), NULL); + peditor = gconf_peditor_new_select_menu_with_enum + (changeset, BG_PREFERENCES_PICTURE_OPTIONS, WID ("image_option"), bg_preferences_wptype_get_type (), NULL); g_signal_connect (peditor, "value-changed", (GCallback) peditor_value_changed, prefs); - peditor = gconf_peditor_new_boolean - (changeset, "/desktop/gnome/background/wallpaper-enabled", WID ("picture_enabled_check"), NULL); + peditor = gconf_peditor_new_enum_toggle + (changeset, BG_PREFERENCES_PICTURE_OPTIONS, WID ("picture_enabled_check"), bg_preferences_wptype_get_type (), get_val_true_cb, WPTYPE_NONE, prefs, NULL); g_signal_connect (peditor, "value-changed", (GCallback) peditor_value_changed, prefs); gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor), WID ("picture_frame")); @@ -301,6 +323,8 @@ main (int argc, char **argv) GNOME_PARAM_POPT_TABLE, cap_options, NULL); + activate_settings_daemon (); + client = gconf_client_get_default (); gconf_client_add_dir (client, "/desktop/gnome/background", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); diff --git a/capplets/common/ChangeLog b/capplets/common/ChangeLog index a04666f51..f1cf2b450 100644 --- a/capplets/common/ChangeLog +++ b/capplets/common/ChangeLog @@ -1,3 +1,17 @@ +2002-03-14 Richard Hestilow + + * gconf-property-editor.c: + (gconf_property_editor_new_option_menu_with_enum): + (gconf_property_editor_new_enum_toggle): Added. + (gconf_property_editor_new): Accept custom arguments from the + editor "subclass". + (gconf_property_editor_class_init): Add arguments "data" + and "data-free-cb", for custom "subclass" data. + (gconf_property_editor_finalize): Free custom data. + (*_new): Add NULL at the end of gconf_property_editor_new. + (guard_value_changed, peditor_widget_set_guard): Use the + enum->boolean mapping if the gconf value is a string. + 2002-03-10 Seth Nickell * Makefile.am: diff --git a/capplets/common/gconf-property-editor.c b/capplets/common/gconf-property-editor.c index 78e4af712..9b97f254f 100644 --- a/capplets/common/gconf-property-editor.c +++ b/capplets/common/gconf-property-editor.c @@ -43,9 +43,13 @@ enum { PROP_CHANGESET, PROP_CONV_TO_WIDGET_CB, PROP_CONV_FROM_WIDGET_CB, - PROP_UI_CONTROL + PROP_UI_CONTROL, + PROP_DATA, + PROP_DATA_FREE_CB }; +typedef void (*GConfPropertyEditorDataFreeCb) (gpointer data); + struct _GConfPropertyEditorPrivate { gchar *key; @@ -56,8 +60,19 @@ struct _GConfPropertyEditorPrivate GConfPEditorValueConvFn conv_from_widget_cb; GConfClientNotifyFunc callback; gboolean inited; + + gpointer data; + GConfPropertyEditorDataFreeCb data_free_cb; }; +typedef struct +{ + GType enum_type; + GConfPEditorGetValueFn enum_val_true_fn; + gpointer enum_val_true_fn_data; + guint enum_val_false; +} GConfPropertyEditorEnumData; + static guint peditor_signals[LAST_SIGNAL]; static GObjectClass *parent_class; @@ -83,7 +98,9 @@ static GObject *gconf_peditor_new (gchar *key, GConfChangeSet *changeset, GObject *ui_control, const gchar *first_prop_name, - va_list var_args); + va_list var_args, + const gchar *first_custom, + ...); GType gconf_property_editor_get_type (void) @@ -113,13 +130,20 @@ gconf_property_editor_get_type (void) return gconf_property_editor_type; } +static GConfValue* +gconf_property_editor_conv_default (GConfPropertyEditor *peditor, + const GConfValue *value) +{ + return gconf_value_copy (value); +} + static void gconf_property_editor_init (GConfPropertyEditor *gconf_property_editor, GConfPropertyEditorClass *class) { gconf_property_editor->p = g_new0 (GConfPropertyEditorPrivate, 1); - gconf_property_editor->p->conv_to_widget_cb = gconf_value_copy; - gconf_property_editor->p->conv_from_widget_cb = gconf_value_copy; + gconf_property_editor->p->conv_to_widget_cb = gconf_property_editor_conv_default; + gconf_property_editor->p->conv_from_widget_cb = gconf_property_editor_conv_default; gconf_property_editor->p->inited = FALSE; } @@ -186,6 +210,20 @@ gconf_property_editor_class_init (GConfPropertyEditorClass *class) (GSignalCMarshaller) gconf_property_editor_marshal_VOID__STRING_POINTER, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_POINTER); + g_object_class_install_property + (object_class, PROP_DATA, + g_param_spec_pointer ("data", + _("Property editor object data"), + _("Custom data required by the specific property editor"), + G_PARAM_WRITABLE)); + + g_object_class_install_property + (object_class, PROP_DATA_FREE_CB, + g_param_spec_pointer ("data-free-cb", + _("Property editor data freeing callback"), + _("Callback to be issued when property editor object data is to be freed"), + G_PARAM_WRITABLE)); + parent_class = G_OBJECT_CLASS (g_type_class_ref (G_TYPE_OBJECT)); } @@ -236,7 +274,12 @@ gconf_property_editor_set_prop (GObject *object, peditor->p->ui_control = g_value_get_object (value); g_object_weak_ref (peditor->p->ui_control, (GWeakNotify) g_object_unref, object); break; - + case PROP_DATA: + peditor->p->data = g_value_get_pointer (value); + break; + case PROP_DATA_FREE_CB: + peditor->p->data_free_cb = g_value_get_pointer (value); + break; default: g_warning ("Bad argument set"); break; @@ -281,6 +324,9 @@ gconf_property_editor_finalize (GObject *object) gconf_property_editor = GCONF_PROPERTY_EDITOR (object); + if (gconf_property_editor->p->data_free_cb) + gconf_property_editor->p->data_free_cb (gconf_property_editor->p->data); + g_free (gconf_property_editor->p); G_OBJECT_CLASS (parent_class)->finalize (object); @@ -292,7 +338,9 @@ gconf_peditor_new (gchar *key, GConfChangeSet *changeset, GObject *ui_control, const gchar *first_prop_name, - va_list var_args) + va_list var_args, + const gchar *first_custom, + ...) { GObject *obj; GConfClient *client; @@ -310,6 +358,14 @@ gconf_peditor_new (gchar *key, g_object_set_valist (obj, first_prop_name, var_args); + if (first_custom) + { + va_list custom_args; + va_start (custom_args, first_custom); + g_object_set_valist (obj, first_custom, custom_args); + va_end (custom_args); + } + client = gconf_client_get_default (); gconf_entry = gconf_client_get_entry (client, GCONF_PROPERTY_EDITOR (obj)->p->key, NULL, TRUE, NULL); GCONF_PROPERTY_EDITOR (obj)->p->callback (client, 0, gconf_entry, obj); @@ -349,7 +405,7 @@ peditor_boolean_value_changed (GConfClient *client, value = gconf_entry_get_value (entry); if (value != NULL) { - value_wid = peditor->p->conv_to_widget_cb (value); + value_wid = peditor->p->conv_to_widget_cb (peditor, value); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (peditor->p->ui_control), gconf_value_get_bool (value_wid)); gconf_value_free (value_wid); } @@ -364,7 +420,7 @@ peditor_boolean_widget_changed (GConfPropertyEditor *peditor, if (!peditor->p->inited) return; value_wid = gconf_value_new (GCONF_VALUE_BOOL); gconf_value_set_bool (value_wid, gtk_toggle_button_get_active (tb)); - value = peditor->p->conv_from_widget_cb (value_wid); + value = peditor->p->conv_from_widget_cb (peditor, value_wid); peditor_set_gconf_value (peditor, peditor->p->key, value); g_signal_emit (peditor, peditor_signals[VALUE_CHANGED], 0, peditor->p->key, value); gconf_value_free (value_wid); @@ -393,7 +449,8 @@ gconf_peditor_new_boolean (GConfChangeSet *changeset, changeset, G_OBJECT (checkbox), first_property_name, - var_args); + var_args, + NULL); va_end (var_args); @@ -418,7 +475,7 @@ peditor_string_value_changed (GConfClient *client, value = gconf_entry_get_value (entry); if (value != NULL) { - value_wid = peditor->p->conv_to_widget_cb (value); + value_wid = peditor->p->conv_to_widget_cb (peditor, value); entry_current_text = gtk_entry_get_text (GTK_ENTRY (peditor->p->ui_control)); if (strcmp (entry_current_text, gconf_value_get_string (value)) != 0) { gtk_entry_set_text (GTK_ENTRY (peditor->p->ui_control), gconf_value_get_string (value_wid)); @@ -438,7 +495,7 @@ peditor_string_widget_changed (GConfPropertyEditor *peditor, value_wid = gconf_value_new (GCONF_VALUE_STRING); gconf_value_set_string (value_wid, gtk_entry_get_text (entry)); - value = peditor->p->conv_from_widget_cb (value_wid); + value = peditor->p->conv_from_widget_cb (peditor, value_wid); peditor_set_gconf_value (peditor, peditor->p->key, value); @@ -462,7 +519,7 @@ gconf_peditor_new_string_valist (GConfChangeSet *changeset, changeset, G_OBJECT (entry), first_property_name, - var_args); + var_args, NULL); g_signal_connect_swapped (G_OBJECT (entry), "changed", (GCallback) peditor_string_widget_changed, peditor); @@ -536,7 +593,7 @@ peditor_color_value_changed (GConfClient *client, value = gconf_entry_get_value (entry); if (value != NULL) { - value_wid = peditor->p->conv_to_widget_cb (value); + value_wid = peditor->p->conv_to_widget_cb (peditor, value); gdk_color_parse (gconf_value_get_string (value_wid), &color); gnome_color_picker_set_i16 (GNOME_COLOR_PICKER (peditor->p->ui_control), color.red, color.green, color.blue, 65535); gconf_value_free (value_wid); @@ -561,7 +618,7 @@ peditor_color_widget_changed (GConfPropertyEditor *peditor, gconf_value_set_string (value_wid, str); g_free (str); - value = peditor->p->conv_from_widget_cb (value_wid); + value = peditor->p->conv_from_widget_cb (peditor, value_wid); peditor_set_gconf_value (peditor, peditor->p->key, value); g_signal_emit (peditor, peditor_signals[VALUE_CHANGED], 0, peditor->p->key, value); @@ -592,7 +649,7 @@ gconf_peditor_new_color (GConfChangeSet *changeset, changeset, G_OBJECT (cp), first_property_name, - var_args); + var_args, NULL); va_end (var_args); @@ -602,6 +659,88 @@ gconf_peditor_new_color (GConfChangeSet *changeset, return peditor; } +static int +peditor_enum_int_from_string (GType type, const gchar *str) +{ + GEnumClass *klass; + GEnumValue *val; + int ret = -1; + + klass = g_type_class_ref (type); + val = g_enum_get_value_by_name (klass, str); + if (!val) + val = g_enum_get_value_by_nick (klass, str); + if (val) + ret = val->value; + + g_type_class_unref (klass); + + return ret; +} + +static gchar* +peditor_enum_string_from_int (GType type, const int index) +{ + GEnumClass *klass; + GEnumValue *val; + gchar *ret = NULL; + + klass = g_type_class_ref (type); + val = g_enum_get_value (klass, index); + if (val) + { + if (val->value_name) + ret = g_strdup (val->value_name); + else + ret = g_strdup (val->value_nick); + } + + g_type_class_unref (klass); + + return ret; +} + +static GConfValue* +peditor_enum_conv_to_widget (GConfPropertyEditor *peditor, + const GConfValue *value) +{ + GConfValue *ret; + GConfPropertyEditorEnumData *data = peditor->p->data; + int index; + + if (value->type == GCONF_VALUE_INT) + return gconf_value_copy (value); + + ret = gconf_value_new (GCONF_VALUE_INT); + + index = peditor_enum_int_from_string (data->enum_type, + gconf_value_get_string (value)); + + gconf_value_set_int (ret, index); + + return ret; +} + +static GConfValue* +peditor_enum_conv_from_widget (GConfPropertyEditor *peditor, + const GConfValue *value) +{ + GConfValue *ret; + GConfPropertyEditorEnumData *data = peditor->p->data; + gchar *str; + + if (value->type == GCONF_VALUE_STRING) + return gconf_value_copy (value); + + ret = gconf_value_new (GCONF_VALUE_STRING); + str = peditor_enum_string_from_int (data->enum_type, + gconf_value_get_int (value)); + gconf_value_set_string (ret, str); + g_free (str); + + return ret; +} + static void peditor_select_menu_value_changed (GConfClient *client, guint cnxn_id, @@ -616,7 +755,7 @@ peditor_select_menu_value_changed (GConfClient *client, value = gconf_entry_get_value (entry); if (value != NULL) { - value_wid = peditor->p->conv_to_widget_cb (value); + value_wid = peditor->p->conv_to_widget_cb (peditor, value); gtk_option_menu_set_history (GTK_OPTION_MENU (peditor->p->ui_control), gconf_value_get_int (value_wid)); gconf_value_free (value_wid); } @@ -631,7 +770,7 @@ peditor_select_menu_widget_changed (GConfPropertyEditor *peditor, if (!peditor->p->inited) return; value_wid = gconf_value_new (GCONF_VALUE_INT); gconf_value_set_int (value_wid, gtk_option_menu_get_history (option_menu)); - value = peditor->p->conv_from_widget_cb (value_wid); + value = peditor->p->conv_from_widget_cb (peditor, value_wid); peditor_set_gconf_value (peditor, peditor->p->key, value); g_signal_emit (peditor, peditor_signals[VALUE_CHANGED], 0, peditor->p->key, value); gconf_value_free (value_wid); @@ -660,7 +799,7 @@ gconf_peditor_new_select_menu (GConfChangeSet *changeset, changeset, G_OBJECT (option_menu), first_property_name, - var_args); + var_args, NULL); va_end (var_args); @@ -670,6 +809,55 @@ gconf_peditor_new_select_menu (GConfChangeSet *changeset, return peditor; } +GObject * +gconf_peditor_new_select_menu_with_enum (GConfChangeSet *changeset, + gchar *key, + GtkWidget *option_menu, + GType enum_type, + gchar *first_property_name, + ...) +{ + GConfPropertyEditor *peditor; + GConfPropertyEditorEnumData *data; + va_list var_args; + + g_return_val_if_fail (key != NULL, NULL); + g_return_val_if_fail (option_menu != NULL, NULL); + g_return_val_if_fail (GTK_IS_OPTION_MENU (option_menu), NULL); + g_return_val_if_fail (enum_type != G_TYPE_NONE, NULL); + + data = g_new0 (GConfPropertyEditorEnumData, 1); + data->enum_type = enum_type; + + va_start (var_args, first_property_name); + + peditor = GCONF_PROPERTY_EDITOR ( + gconf_peditor_new + (key, + (GConfClientNotifyFunc) peditor_select_menu_value_changed, + changeset, + G_OBJECT (option_menu), + first_property_name, + var_args, + "conv-to-widget-cb", + peditor_enum_conv_to_widget, + "conv-from-widget-cb", + peditor_enum_conv_from_widget, + "data", + data, + "data-free-cb", + g_free, + NULL + )); + + va_end (var_args); + + g_signal_connect_swapped (G_OBJECT (option_menu), "changed", + (GCallback) peditor_select_menu_widget_changed, peditor); + + return G_OBJECT (peditor); +} + static void peditor_select_radio_value_changed (GConfClient *client, guint cnxn_id, @@ -685,7 +873,7 @@ peditor_select_radio_value_changed (GConfClient *client, value = gconf_entry_get_value (entry); if (value != NULL) { - value_wid = peditor->p->conv_to_widget_cb (value); + value_wid = peditor->p->conv_to_widget_cb (peditor, value); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (peditor->p->ui_control)); group = g_slist_nth (group, gconf_value_get_int (value_wid)); if (group && group->data) @@ -707,7 +895,7 @@ peditor_select_radio_widget_changed (GConfPropertyEditor *peditor, value_wid = gconf_value_new (GCONF_VALUE_INT); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (peditor->p->ui_control)); gconf_value_set_int (value_wid, g_slist_index (group, tb)); - value = peditor->p->conv_from_widget_cb (value_wid); + value = peditor->p->conv_from_widget_cb (peditor, value_wid); peditor_set_gconf_value (peditor, peditor->p->key, value); g_signal_emit (peditor, peditor_signals[VALUE_CHANGED], 0, peditor->p->key, value); @@ -743,7 +931,7 @@ gconf_peditor_new_select_radio (GConfChangeSet *changeset, changeset, G_OBJECT (first_button), first_property_name, - var_args); + var_args, NULL); va_end (var_args); @@ -768,7 +956,7 @@ peditor_numeric_range_value_changed (GConfClient *client, value = gconf_entry_get_value (entry); if (value != NULL) { - value_wid = peditor->p->conv_to_widget_cb (value); + value_wid = peditor->p->conv_to_widget_cb (peditor, value); gtk_adjustment_set_value (GTK_ADJUSTMENT (peditor->p->ui_control), gconf_value_get_float (value_wid)); gconf_value_free (value_wid); } @@ -783,7 +971,7 @@ peditor_numeric_range_widget_changed (GConfPropertyEditor *peditor, if (!peditor->p->inited) return; value_wid = gconf_value_new (GCONF_VALUE_FLOAT); gconf_value_set_float (value_wid, gtk_adjustment_get_value (adjustment)); - value = peditor->p->conv_from_widget_cb (value_wid); + value = peditor->p->conv_from_widget_cb (peditor, value_wid); peditor_set_gconf_value (peditor, peditor->p->key, value); g_signal_emit (peditor, peditor_signals[VALUE_CHANGED], 0, peditor->p->key, value); gconf_value_free (value_wid); @@ -815,7 +1003,7 @@ gconf_peditor_new_numeric_range (GConfChangeSet *changeset, changeset, G_OBJECT (adjustment), first_property_name, - var_args); + var_args, NULL); va_end (var_args); @@ -825,13 +1013,26 @@ gconf_peditor_new_numeric_range (GConfChangeSet *changeset, return peditor; } +static gboolean +guard_get_bool (GConfPropertyEditor *peditor, const GConfValue *value) +{ + if (value->type == GCONF_VALUE_BOOL) + return gconf_value_get_bool (value); + else + { + GConfPropertyEditorEnumData *data = peditor->p->data; + int index = peditor_enum_int_from_string (data->enum_type, gconf_value_get_string (value)); + return (index != data->enum_val_false); + } +} + static void guard_value_changed (GConfPropertyEditor *peditor, const gchar *key, const GConfValue *value, GtkWidget *widget) { - gtk_widget_set_sensitive (widget, gconf_value_get_bool (value)); + gtk_widget_set_sensitive (widget, guard_get_bool (peditor, value)); } void @@ -839,6 +1040,7 @@ gconf_peditor_widget_set_guard (GConfPropertyEditor *peditor, GtkWidget *widget) { GConfClient *client; + GConfValue *value; g_return_if_fail (peditor != NULL); g_return_if_fail (IS_GCONF_PROPERTY_EDITOR (peditor)); @@ -846,7 +1048,10 @@ gconf_peditor_widget_set_guard (GConfPropertyEditor *peditor, g_return_if_fail (GTK_IS_WIDGET (widget)); client = gconf_client_get_default (); - gtk_widget_set_sensitive (widget, gconf_client_get_bool (client, peditor->p->key, NULL)); + + value = gconf_client_get (client, peditor->p->key, NULL); + gtk_widget_set_sensitive (widget, guard_get_bool (peditor, value)); + gconf_value_free (value); g_signal_connect (G_OBJECT (peditor), "value-changed", (GCallback) guard_value_changed, widget); } @@ -902,7 +1107,7 @@ peditor_font_value_changed (GConfClient *client, if (value != NULL) { const gchar *font_name; - value_wid = peditor->p->conv_to_widget_cb (value); + value_wid = peditor->p->conv_to_widget_cb (peditor, value); font_name = gconf_value_get_string (value_wid); g_object_set (G_OBJECT (peditor->p->ui_control), "font_name", font_name, @@ -927,7 +1132,7 @@ peditor_font_widget_changed (GConfPropertyEditor *peditor, value_wid = gconf_value_new (GCONF_VALUE_STRING); gconf_value_set_string (value_wid, font_name); - value = peditor->p->conv_from_widget_cb (value_wid); + value = peditor->p->conv_from_widget_cb (peditor, value_wid); peditor_set_gconf_value (peditor, peditor->p->key, value); g_signal_emit (peditor, peditor_signals[VALUE_CHANGED], 0, peditor->p->key, value); @@ -958,7 +1163,7 @@ gconf_peditor_new_font (GConfChangeSet *changeset, changeset, G_OBJECT (font_picker), first_property_name, - var_args); + var_args, NULL); va_end (var_args); @@ -968,3 +1173,101 @@ gconf_peditor_new_font (GConfChangeSet *changeset, return peditor; } +static GConfValue* +peditor_enum_toggle_conv_to_widget (GConfPropertyEditor *peditor, + const GConfValue *value) +{ + GConfValue *ret; + GConfPropertyEditorEnumData *data = peditor->p->data; + int index; + + if (value->type == GCONF_VALUE_BOOL) + return gconf_value_copy (value); + + ret = gconf_value_new (GCONF_VALUE_BOOL); + + index = peditor_enum_int_from_string (data->enum_type, + gconf_value_get_string (value)); + gconf_value_set_bool (ret, (index != data->enum_val_false)); + + return ret; +} + +static GConfValue* +peditor_enum_toggle_conv_from_widget (GConfPropertyEditor *peditor, + const GConfValue *value) +{ + GConfValue *ret; + GConfPropertyEditorEnumData *data = peditor->p->data; + gchar *str; + int index; + + if (value->type == GCONF_VALUE_STRING) + return gconf_value_copy (value); + + ret = gconf_value_new (GCONF_VALUE_STRING); + if (gconf_value_get_bool (value)) + index = data->enum_val_true_fn (peditor, data->enum_val_true_fn_data); + else + index = data->enum_val_false; + + str = peditor_enum_string_from_int (data->enum_type, index); + gconf_value_set_string (ret, str); + g_free (str); + + return ret; +} + +GObject * +gconf_peditor_new_enum_toggle (GConfChangeSet *changeset, + gchar *key, + GtkWidget *checkbox, + GType enum_type, + GConfPEditorGetValueFn val_true_fn, + guint val_false, + gpointer data, + gchar *first_property_name, + ...) +{ + GConfPropertyEditor *peditor; + GConfPropertyEditorEnumData *enum_data; + va_list var_args; + + g_return_val_if_fail (key != NULL, NULL); + g_return_val_if_fail (checkbox != NULL, NULL); + g_return_val_if_fail (GTK_IS_TOGGLE_BUTTON (checkbox), NULL); + + enum_data = g_new0 (GConfPropertyEditorEnumData, 1); + enum_data->enum_type = enum_type; + enum_data->enum_val_true_fn = val_true_fn; + enum_data->enum_val_true_fn_data = data; + enum_data->enum_val_false = val_false; + + va_start (var_args, first_property_name); + + peditor = GCONF_PROPERTY_EDITOR ( + gconf_peditor_new + (key, + (GConfClientNotifyFunc) peditor_boolean_value_changed, + changeset, + G_OBJECT (checkbox), + first_property_name, + var_args, + "conv-to-widget-cb", + peditor_enum_toggle_conv_to_widget, + "conv-from-widget-cb", + peditor_enum_toggle_conv_from_widget, + "data", + enum_data, + "data-free-cb", + g_free, + NULL)); + + va_end (var_args); + + g_signal_connect_swapped (G_OBJECT (checkbox), "toggled", + (GCallback) peditor_boolean_widget_changed, peditor); + + return G_OBJECT (peditor); +} + diff --git a/capplets/common/gconf-property-editor.h b/capplets/common/gconf-property-editor.h index 17d98dc14..23e7f9ed1 100644 --- a/capplets/common/gconf-property-editor.h +++ b/capplets/common/gconf-property-editor.h @@ -38,7 +38,8 @@ typedef struct _GConfPropertyEditor GConfPropertyEditor; typedef struct _GConfPropertyEditorClass GConfPropertyEditorClass; typedef struct _GConfPropertyEditorPrivate GConfPropertyEditorPrivate; -typedef GConfValue *(*GConfPEditorValueConvFn) (const GConfValue *); +typedef GConfValue *(*GConfPEditorValueConvFn) (GConfPropertyEditor *peditor, const GConfValue *); +typedef int (*GConfPEditorGetValueFn) (GConfPropertyEditor *peditor, gpointer data); struct _GConfPropertyEditor { @@ -63,6 +64,17 @@ GObject *gconf_peditor_new_boolean (GConfChangeSet *changeset, GtkWidget *checkbox, gchar *first_property_name, ...); + +GObject *gconf_peditor_new_enum_toggle (GConfChangeSet *changeset, + gchar *key, + GtkWidget *checkbox, + GType enum_type, + GConfPEditorGetValueFn val_true_fn, + guint val_false, + gpointer data, + gchar *first_property_name, + ...); + GObject *gconf_peditor_new_string (GConfChangeSet *changeset, gchar *key, GtkWidget *entry, @@ -78,11 +90,21 @@ GObject *gconf_peditor_new_color (GConfChangeSet *changeset, GtkWidget *color_entry, gchar *first_property_name, ...); -GObject *gconf_peditor_new_select_menu (GConfChangeSet *changeset, - gchar *key, - GtkWidget *option_menu, - gchar *first_property_name, + +GObject *gconf_peditor_new_select_menu (GConfChangeSet *changeset, + gchar *key, + GtkWidget *option_menu, + gchar *first_property_name, ...); + + +GObject *gconf_peditor_new_select_menu_with_enum (GConfChangeSet *changeset, + gchar *key, + GtkWidget *option_menu, + GType enum_type, + gchar *first_property_name, + ...); + GObject *gconf_peditor_new_select_radio (GConfChangeSet *changeset, gchar *key, GSList *radio_group, diff --git a/libbackground/preferences.c b/libbackground/preferences.c index 491cedf6b..463a9772e 100644 --- a/libbackground/preferences.c +++ b/libbackground/preferences.c @@ -25,7 +25,6 @@ # include "config.h" #endif -#include #include #include @@ -42,6 +41,53 @@ static void bg_preferences_class_init (BGPreferencesClass *class); static void bg_preferences_finalize (GObject *object); static GdkColor *read_color_from_string (const gchar *string); +static orientation_t read_orientation_from_string (gchar *string); +static wallpaper_type_t read_wptype_from_string (gchar *string); + +static GEnumValue _bg_wptype_values[] = { + { WPTYPE_TILED, "wallpaper", N_("Tiled") }, + { WPTYPE_CENTERED, "centered", N_("Centered") }, + { WPTYPE_SCALED, "scaled", N_("Scaled") }, + { WPTYPE_STRETCHED, "stretched", N_("Stretched") }, + { WPTYPE_EMBOSSED, "embossed", N_("Embossed") }, + { WPTYPE_NONE, "none", N_("None") }, + { 0, NULL, NULL } +}; + +static GEnumValue _bg_orientation_values[] = { + { ORIENTATION_SOLID, "solid", N_("Solid") }, + { ORIENTATION_HORIZ, "horizontal-gradient", N_("Horizontal Gradient") }, + { ORIENTATION_VERT, "vertical-gradient", N_("Vertical Gradient") }, + { 0, NULL, NULL } +}; + +GType +bg_preferences_wptype_get_type (void) +{ + static GType type = 0; + + if (!type) + { + type = g_enum_register_static ("BgPreferencesWptype", + _bg_wptype_values); + } + + return type; +} + +GType +bg_preferences_orientation_get_type (void) +{ + static GType type = 0; + + if (!type) + { + type = g_enum_register_static ("BgPreferencesOrientation", + _bg_orientation_values); + } + + return type; +} GType bg_preferences_get_type (void) @@ -86,7 +132,7 @@ bg_preferences_init (BGPreferences *prefs, prefs->wallpaper_sel_path = g_strdup (g_get_home_dir ()); prefs->auto_apply = TRUE; prefs->wallpapers = NULL; - prefs->adjust_opacity = FALSE; + prefs->adjust_opacity = TRUE; prefs->opacity = 255; } @@ -174,22 +220,30 @@ bg_preferences_load (BGPreferences *prefs) client = gconf_client_get_default (); - prefs->enabled = gconf_client_get_bool (client, "/desktop/gnome/background/enabled", &error); - prefs->wallpaper_type = gconf_client_get_int (client, "/desktop/gnome/background/wallpaper-type", &error); - prefs->wallpaper_filename = gconf_client_get_string (client, "/desktop/gnome/background/wallpaper-filename", &error); - prefs->wallpaper_enabled = gconf_client_get_bool (client, "/desktop/gnome/background/wallpaper-enabled", &error); - prefs->color1 = read_color_from_string (gconf_client_get_string (client, "/desktop/gnome/background/color1", &error)); - prefs->color2 = read_color_from_string (gconf_client_get_string (client, "/desktop/gnome/background/color2", &error)); - prefs->opacity = gconf_client_get_int (client, "/desktop/gnome/background/opacity", &error); + prefs->enabled = gconf_client_get_bool (client, BG_PREFERENCES_DRAW_BACKGROUND, &error); + prefs->wallpaper_filename = gconf_client_get_string (client, BG_PREFERENCES_PICTURE_FILENAME, &error); + + prefs->color1 = read_color_from_string (gconf_client_get_string (client, BG_PREFERENCES_PRIMARY_COLOR, &error)); + prefs->color2 = read_color_from_string (gconf_client_get_string (client, BG_PREFERENCES_SECONDARY_COLOR, &error)); + + prefs->opacity = gconf_client_get_int (client, BG_PREFERENCES_PICTURE_OPACITY, &error); if (prefs->opacity >= 100 || prefs->opacity < 0) prefs->adjust_opacity = FALSE; - prefs->orientation = gconf_client_get_int (client, "/desktop/gnome/background/orientation", &error); - + prefs->orientation = read_orientation_from_string (gconf_client_get_string (client, BG_PREFERENCES_COLOR_SHADING_TYPE, &error)); if (prefs->orientation == ORIENTATION_SOLID) prefs->gradient_enabled = FALSE; else prefs->gradient_enabled = TRUE; + + prefs->wallpaper_type = read_wptype_from_string (gconf_client_get_string (client, BG_PREFERENCES_PICTURE_OPTIONS, &error)); + + if (prefs->wallpaper_type == -1) { + prefs->wallpaper_enabled = FALSE; + prefs->wallpaper_type = WPTYPE_CENTERED; + } else { + prefs->wallpaper_enabled = TRUE; + } } /* Parse the event name given (the event being notification of a property having @@ -206,10 +260,17 @@ bg_preferences_merge_entry (BGPreferences *prefs, g_return_if_fail (prefs != NULL); g_return_if_fail (IS_BG_PREFERENCES (prefs)); - if (!strcmp (entry->key, "/desktop/gnome/background/wallpaper_type")) { - prefs->wallpaper_type = gconf_value_get_int (value); + if (!strcmp (entry->key, BG_PREFERENCES_PICTURE_OPTIONS)) { + wallpaper_type_t wallpaper_type = read_wptype_from_string (g_strdup (gconf_value_get_string (value))); + if (wallpaper_type == -1) { + prefs->wallpaper_enabled = FALSE; + } else { + prefs->wallpaper_type = wallpaper_type; + prefs->wallpaper_enabled = TRUE; + } + } - else if (!strcmp (entry->key, "/desktop/gnome/background/wallpaper-filename")) { + else if (!strcmp (entry->key, BG_PREFERENCES_PICTURE_FILENAME)) { prefs->wallpaper_filename = g_strdup (gconf_value_get_string (value)); if (prefs->wallpaper_filename != NULL && @@ -219,42 +280,76 @@ bg_preferences_merge_entry (BGPreferences *prefs, else prefs->wallpaper_enabled = FALSE; } - else if (!strcmp (entry->key, "/desktop/gnome/background/color1")) { + else if (!strcmp (entry->key, BG_PREFERENCES_PRIMARY_COLOR)) { prefs->color1 = read_color_from_string (gconf_value_get_string (value)); } - else if (!strcmp (entry->key, "/desktop/gnome/background/color2")) { + else if (!strcmp (entry->key, BG_PREFERENCES_SECONDARY_COLOR)) { prefs->color2 = read_color_from_string (gconf_value_get_string (value)); } - else if (!strcmp (entry->key, "/desktop/gnome/background/opacity")) { + else if (!strcmp (entry->key, BG_PREFERENCES_PICTURE_OPACITY)) { prefs->opacity = gconf_value_get_int (value); if (prefs->opacity >= 100) prefs->adjust_opacity = FALSE; } - else if (!strcmp (entry->key, "/desktop/gnome/background/orientation")) { - prefs->orientation = gconf_value_get_int (value); + else if (!strcmp (entry->key, BG_PREFERENCES_COLOR_SHADING_TYPE)) { + prefs->orientation = read_orientation_from_string (g_strdup (gconf_value_get_string (value))); if (prefs->orientation == ORIENTATION_SOLID) prefs->gradient_enabled = FALSE; else prefs->gradient_enabled = TRUE; } - else if (!strcmp (entry->key, "/desktop/gnome/background/wallpaper-enabled")) { - if (gconf_value_get_bool (value) && - (prefs->wallpaper_filename != NULL) && - strcmp (prefs->wallpaper_filename, "") != 0 && - strcmp (prefs->wallpaper_filename, "(none)") != 0) - prefs->wallpaper_enabled = TRUE; + else if (!strcmp (entry->key, BG_PREFERENCES_DRAW_BACKGROUND)) { + if (gconf_value_get_bool (value)) + prefs->enabled = TRUE; else - prefs->wallpaper_enabled = FALSE; - } - else if (!strcmp (entry->key, "/desktop/gnome/background/wallpaper-type")) { - prefs->wallpaper_type = gconf_value_get_int (value); + prefs->enabled = FALSE; } else { - g_warning ("%s: Unknown property: %s", G_GNUC_FUNCTION, entry->key); + g_warning ("%s: Unknown property: %s", __FUNCTION__, entry->key); } } +static wallpaper_type_t +read_wptype_from_string (gchar *string) +{ + wallpaper_type_t type = -1; + + if (string) { + if (!strncmp (string, "wallpaper", sizeof ("wallpaper"))) { + type = WPTYPE_TILED; + } else if (!strncmp (string, "centered", sizeof ("centered"))) { + type = WPTYPE_CENTERED; + } else if (!strncmp (string, "scaled", sizeof ("scaled"))) { + type = WPTYPE_SCALED; + } else if (!strncmp (string, "stretched", sizeof ("stretched"))) { + type = WPTYPE_STRETCHED; + } else if (!strncmp (string, "embossed", sizeof ("embossed"))) { + type = WPTYPE_EMBOSSED; + } + g_free (string); + } + + return type; +} + +static orientation_t +read_orientation_from_string (gchar *string) +{ + orientation_t type = ORIENTATION_SOLID; + + if (string) { + if (!strncmp (string, "vertical-gradient", sizeof ("vertical-gradient"))) { + type = ORIENTATION_VERT; + } else if (!strncmp (string, "horizontal-gradient", sizeof ("horizontal-gradient"))) { + type = ORIENTATION_HORIZ; + } + g_free (string); + } + + return type; +} + static GdkColor * read_color_from_string (const gchar *string) { @@ -269,16 +364,51 @@ read_color_from_string (const gchar *string) ((color->green >> 8) << 8) || (color->blue >> 8); #if 0 + /* fixme: I am not sure, but this can be accomplished otherwise */ color->pixel = gdk_rgb_xpixel_from_rgb (rgb); -#else - gdk_rgb_find_color (gdk_rgb_get_colormap (), color); #endif } return color; } -#define DGB "/desktop/gnome/background/" +const gchar* +bg_preferences_get_wptype_as_string (wallpaper_type_t wp) +{ + switch (wp) + { + case WPTYPE_TILED: + return "wallpaper"; + case WPTYPE_CENTERED: + return "centered"; + case WPTYPE_SCALED: + return "scaled"; + case WPTYPE_STRETCHED: + return "stretched"; + case WPTYPE_EMBOSSED: + return "embossed"; + case WPTYPE_NONE: + return "none"; + } + + return NULL; +} + +const gchar* +bg_preferences_get_orientation_as_string (orientation_t o) +{ + switch (o) + { + case ORIENTATION_SOLID: + return "solid"; + case ORIENTATION_HORIZ: + return "horizontal-gradient"; + case ORIENTATION_VERT: + return "vertical-gradient"; + } + + return NULL; +} void bg_preferences_save (BGPreferences *prefs) @@ -290,29 +420,32 @@ bg_preferences_save (BGPreferences *prefs) g_return_if_fail (IS_BG_PREFERENCES (prefs)); cs = gconf_change_set_new (); - gconf_change_set_set_bool (cs, DGB "enabled", prefs->enabled); - gconf_change_set_set_bool (cs, DGB "wallpaper-enabled", prefs->wallpaper_enabled); - gconf_change_set_set_int (cs, DGB "wallpaper-type", prefs->wallpaper_type); - gconf_change_set_set_string (cs, DGB "wallpaper-filename", prefs->wallpaper_filename); + gconf_change_set_set_bool (cs, BG_PREFERENCES_DRAW_BACKGROUND, prefs->enabled); + if (prefs->wallpaper_enabled) + gconf_change_set_set_string (cs, BG_PREFERENCES_PICTURE_OPTIONS, bg_preferences_get_wptype_as_string (prefs->wallpaper_type)); + else + gconf_change_set_set_string (cs, BG_PREFERENCES_PICTURE_OPTIONS, "none"); + + gconf_change_set_set_string (cs, BG_PREFERENCES_PICTURE_FILENAME, prefs->wallpaper_filename); tmp = g_strdup_printf ("#%02x%02x%02x", prefs->color1->red >> 8, prefs->color1->green >> 8, prefs->color1->blue >> 8); - gconf_change_set_set_string (cs, DGB "color1", tmp); + gconf_change_set_set_string (cs, BG_PREFERENCES_PRIMARY_COLOR, tmp); g_free (tmp); tmp = g_strdup_printf ("#%02x%02x%02x", prefs->color2->red >> 8, prefs->color2->green >> 8, prefs->color2->blue >> 8); - gconf_change_set_set_string (cs, DGB "color2", tmp); + gconf_change_set_set_string (cs, BG_PREFERENCES_SECONDARY_COLOR, tmp); g_free (tmp); - gconf_change_set_set_int (cs, DGB "orientation", prefs->orientation); + gconf_change_set_set_string (cs, BG_PREFERENCES_COLOR_SHADING_TYPE, bg_preferences_get_orientation_as_string (prefs->orientation)); + gconf_client_commit_change_set (gconf_client_get_default (), cs, TRUE, NULL); gconf_change_set_unref (cs); } -#undef DGB diff --git a/libbackground/preferences.h b/libbackground/preferences.h index ff41c2866..ab57d1cba 100644 --- a/libbackground/preferences.h +++ b/libbackground/preferences.h @@ -32,16 +32,27 @@ #define BG_PREFERENCES_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, bg_preferences_get_type (), BGPreferencesClass) #define IS_BG_PREFERENCES(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, bg_preferences_get_type ()) +#define BG_PREFERENCES_DRAW_BACKGROUND "/desktop/gnome/background/draw_background" +#define BG_PREFERENCES_PRIMARY_COLOR "/desktop/gnome/background/primary_color" +#define BG_PREFERENCES_SECONDARY_COLOR "/desktop/gnome/background/secondary_color" +#define BG_PREFERENCES_COLOR_SHADING_TYPE "/desktop/gnome/background/color_shading_type" +#define BG_PREFERENCES_PICTURE_OPTIONS "/desktop/gnome/background/picture_options" +#define BG_PREFERENCES_PICTURE_OPACITY "/desktop/gnome/background/picture_opacity" +#define BG_PREFERENCES_PICTURE_FILENAME "/desktop/gnome/background/picture_filename" + + typedef struct _BGPreferences BGPreferences; typedef struct _BGPreferencesClass BGPreferencesClass; typedef enum _orientation_t { - ORIENTATION_SOLID, ORIENTATION_HORIZ, ORIENTATION_VERT + ORIENTATION_SOLID = 0, + ORIENTATION_HORIZ, + ORIENTATION_VERT } orientation_t; typedef enum _wallpaper_type_t { - WPTYPE_TILED, WPTYPE_CENTERED, WPTYPE_SCALED, - WPTYPE_STRETCHED, WPTYPE_EMBOSSED + WPTYPE_TILED = 0, WPTYPE_CENTERED, WPTYPE_SCALED, + WPTYPE_STRETCHED, WPTYPE_EMBOSSED, WPTYPE_NONE } wallpaper_type_t; struct _BGPreferences @@ -87,4 +98,10 @@ void bg_preferences_merge_entry (BGPreferences *prefs, void bg_preferences_save (BGPreferences *prefs); +const gchar *bg_preferences_get_wptype_as_string (wallpaper_type_t wp); +const gchar *bg_preferences_get_orientation_as_string (orientation_t o); +GType bg_preferences_wptype_get_type (void); +GType bg_preferences_orientation_get_type (void); + + #endif /* __PREFERENCES_H */