summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--capplets/background/ChangeLog6
-rw-r--r--capplets/background/background-properties-capplet.c88
-rw-r--r--capplets/common/ChangeLog14
-rw-r--r--capplets/common/gconf-property-editor.c361
-rw-r--r--capplets/common/gconf-property-editor.h32
-rw-r--r--libbackground/preferences.c215
-rw-r--r--libbackground/preferences.h23
7 files changed, 629 insertions, 110 deletions
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 <hestilow@ximian.com>
+
+ * 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 <hestilow@ximian.com>
* 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 <hestilow@ximian.com>
+
+ * 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 <snickell@stanford.edu>
* 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 <string.h>
#include <stdlib.h>
#include <gnome.h>
@@ -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,40 +280,74 @@ 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 *
@@ -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 */