diff --git a/dialogs/appearance-settings/appearance-dialog.glade b/dialogs/appearance-settings/appearance-dialog.glade
index 2880429..60dba63 100644
--- a/dialogs/appearance-settings/appearance-dialog.glade
+++ b/dialogs/appearance-settings/appearance-dialog.glade
@@ -1,75 +1,48 @@
-
+
-
-
-
-
diff --git a/dialogs/appearance-settings/main.c b/dialogs/appearance-settings/main.c
index 0f900e1..c8edb6a 100644
--- a/dialogs/appearance-settings/main.c
+++ b/dialogs/appearance-settings/main.c
@@ -48,6 +48,30 @@
/* Increase this number if new gtk settings have been added */
#define INITIALIZE_UINT (1)
+
+const guint NUM_COLOR_SCHEME_NAMES = 8;
+const gchar *COLOR_SCHEME_NAMES[8] = {
+ "fg_color",
+ "bg_color",
+ "text_color",
+ "base_color",
+ "selected_fg_color",
+ "selected_bg_color",
+ "tooltip_fg_color",
+ "tooltip_bg_color"
+};
+
+const char *COLOR_SCHEME_PROPERTY = "/Gtk/ColorScheme";
+const char *COLOR_SCHEME_DEFAULT_COLORS = "fg_color:#000000\\n"
+ "bg_color:#EDECEB\\n"
+ "text_color:#1A1A1A\\n"
+ "base_color:#ffffff\\n"
+ "selected_fg_color:#ffffff\\n"
+ "selected_bg_color:#86ABD9\\n"
+ "tooltip_fg_color:#000000\\n"
+ "tooltip_bg_color:#F5F5B5";
+
+
enum
{
COLUMN_THEME_NAME,
@@ -116,6 +140,7 @@ compute_xsettings_dpi (GtkWidget *widget)
return dpi;
}
+
static void
cb_theme_tree_selection_changed (GtkTreeSelection *selection,
const gchar *property)
@@ -267,6 +292,61 @@ cb_enable_event_sounds_check_button_toggled (GtkToggleButton *toggle, GtkWidget
}
#endif
+
+static void
+cb_unset_color_scheme()
+{
+ xfconf_channel_set_string(xsettings_channel, COLOR_SCHEME_PROPERTY, "");
+}
+
+
+static GtkWidget *get_color_button(GtkBuilder *builder, const char *color_name)
+{
+ gchar button_name[100];
+
+ g_snprintf(button_name, sizeof(button_name), "%s_button", color_name);
+
+ GtkWidget *result = GTK_WIDGET(gtk_builder_get_object(builder, button_name));
+
+ return result;
+}
+
+
+
+static void
+cb_color_scheme_changed(GtkColorButton *color_button, GtkBuilder *builder)
+{
+ gchar *color_values[NUM_COLOR_SCHEME_NAMES];
+ int i;
+
+ for (i=0; i 0);
+
+ gtk_widget_set_sensitive(button, there_are_colors);
+ set_color_button_colors(builder, there_are_colors ? color_scheme_str : COLOR_SCHEME_DEFAULT_COLORS);
+}
+
+
+
static void
appearance_settings_load_ui_themes (GtkListStore *list_store,
GtkTreeView *tree_view)
@@ -668,6 +795,10 @@ appearance_settings_dialog_channel_property_changed (XfconfChannel *channel,
appearance_settings_load_icon_themes (GTK_LIST_STORE (model), GTK_TREE_VIEW (object));
}
}
+ else if (strcmp(property_name, COLOR_SCHEME_PROPERTY) == 0)
+ {
+ appearance_settings_load_color_scheme(builder);
+ }
}
static void
@@ -786,6 +917,18 @@ appearance_settings_dialog_configure_widgets (GtkBuilder *builder)
g_signal_connect (G_OBJECT (object), "toggled", G_CALLBACK (cb_custom_dpi_check_button_toggled), object2);
g_signal_connect (G_OBJECT (object2), "value-changed", G_CALLBACK (cb_custom_dpi_spin_button_changed), object);
+ /* Color scheme */
+ appearance_settings_load_color_scheme(builder);
+ int i;
+ for (i=0; ivalue);
+ value = g_strcompress(g_value_get_string(&entry->value));
if(value)
{
buf_len += XSETTINGS_PAD(strlen(value), 4);
+ g_free(value);
}
}
@@ -527,10 +533,11 @@ xsettings_registry_notify(XSettingsRegistry *registry)
case G_TYPE_STRING:
*pos++ = 1; /* String */
{
- value = g_value_get_string(&entry->value);
+ value = g_strcompress(g_value_get_string(&entry->value));
if(value)
{
value_len = XSETTINGS_PAD(strlen(value), 4);
+ g_free(value);
}
else
{
@@ -567,7 +574,7 @@ xsettings_registry_notify(XSettingsRegistry *registry)
{
case G_TYPE_STRING:
{
- val = g_value_get_string(&entry->value);
+ val = g_strcompress(g_value_get_string(&entry->value));
if (val)
{
@@ -577,6 +584,7 @@ xsettings_registry_notify(XSettingsRegistry *registry)
memcpy (pos, val, strlen(val));
pos += strlen(val);
value_len -= strlen(val);
+ g_free(val);
}
else
{