From 2328f123052062bce9452d83d5d205a850071244 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Sun, 14 Sep 2014 14:30:27 +0200 Subject: [PATCH] Add default display theme selection to the Preferences --- src/ag-preferences.c | 101 ++++++++++++++++++++++++++++- src/resources/ui/ag-preferences.ui | 31 +++++++++ 2 files changed, 130 insertions(+), 2 deletions(-) diff --git a/src/ag-preferences.c b/src/ag-preferences.c index aaffa8b..9a7008b 100644 --- a/src/ag-preferences.c +++ b/src/ag-preferences.c @@ -1,8 +1,10 @@ #include #include +#include #include "ag-settings.h" #include "ag-preferences.h" +#include "ag-display-theme.h" static GtkWidget *prefs_dialog = NULL; @@ -12,6 +14,8 @@ typedef struct _AgPreferencesPrivate { GtkCheckButton *aspect_chars; GtkWidget *house_system; GtkListStore *house_system_model; + GtkWidget *display_theme; + GtkListStore *display_theme_model; AgSettings *settings; } AgPreferencesPrivate; @@ -75,6 +79,16 @@ ag_preferences_class_init(AgPreferencesClass *klass) AgPreferences, house_system_model ); + gtk_widget_class_bind_template_child_private( + widget_class, + AgPreferences, + display_theme + ); + gtk_widget_class_bind_template_child_private( + widget_class, + AgPreferences, + display_theme_model + ); } static void @@ -98,14 +112,68 @@ ag_preferences_add_house_system(GsweHouseSystemInfo *house_system_info, ); } +static void +ag_preferences_add_display_theme(AgDisplayTheme *display_theme, + AgPreferencesPrivate *priv) +{ + GtkTreeIter iter; + gchar *id_string = g_strdup_printf("%d", display_theme->id); + + g_debug("Adding theme with ID %d ('%s')", display_theme->id, id_string); + + gtk_list_store_append(priv->display_theme_model, &iter); + gtk_list_store_set( + priv->display_theme_model, &iter, + 0, id_string, + 1, display_theme->name, + -1 + ); + g_free(id_string); +} + +static gboolean +ag_preferences_display_theme_get(GValue *value, + GVariant *variant, + gpointer user_data) +{ + gint32 id = g_variant_get_int32(variant); + gchar *id_string = g_strdup_printf("%d", id); + + g_debug("Converted %d to '%s'", id, id_string); + + g_value_take_string(value, id_string); + + return TRUE; +} + +static GVariant * +ag_preferences_display_theme_set(const GValue *value, + const GVariantType *expected_type, + gpointer user_data) +{ + const gchar *id_string; + gint32 id; + GVariant *variant; + + id_string = g_value_get_string(value); + id = atoi(id_string); + + g_debug("Converted '%s' to %d", id_string, id); + + variant = g_variant_new_int32(id); + + return variant; +} + static void ag_preferences_init(AgPreferences *prefs) { GSettings *settings_window, *settings_main; - GList *house_system_list = gswe_all_house_systems(); - AgPreferencesPrivate *priv = ag_preferences_get_instance_private(prefs); GtkCellRenderer *cell_renderer; + GList *house_system_list = gswe_all_house_systems(), + *display_theme_list = ag_display_theme_get_list(); + AgPreferencesPrivate *priv = ag_preferences_get_instance_private(prefs); gtk_widget_init_template(GTK_WIDGET(prefs)); priv->settings = ag_settings_get(); @@ -127,6 +195,24 @@ ag_preferences_init(AgPreferences *prefs) NULL ); + g_list_foreach( + display_theme_list, + (GFunc)ag_preferences_add_display_theme, + priv + ); + cell_renderer = gtk_cell_renderer_text_new(); + gtk_cell_layout_pack_start( + GTK_CELL_LAYOUT(priv->display_theme), + cell_renderer, + TRUE + ); + gtk_cell_layout_set_attributes( + GTK_CELL_LAYOUT(priv->display_theme), + cell_renderer, + "text", 1, + NULL + ); + settings_window = ag_settings_peek_window_settings(priv->settings); g_settings_bind( settings_window, @@ -158,6 +244,17 @@ ag_preferences_init(AgPreferences *prefs) "active-id", G_SETTINGS_BIND_DEFAULT ); + g_settings_bind_with_mapping( + settings_main, + "default-display-theme", + priv->display_theme, + "active-id", + G_SETTINGS_BIND_DEFAULT, + ag_preferences_display_theme_get, + ag_preferences_display_theme_set, + NULL, + NULL + ); } void diff --git a/src/resources/ui/ag-preferences.ui b/src/resources/ui/ag-preferences.ui index 3b01b2d..6047083 100644 --- a/src/resources/ui/ag-preferences.ui +++ b/src/resources/ui/ag-preferences.ui @@ -10,6 +10,14 @@ + + + + + + + +