void populate_schemes_list(GtkListStore *list) { I7App *theapp = i7_app_get(); GSettings *prefs = i7_app_get_prefs(theapp); gtk_list_store_clear(list); i7_app_foreach_color_scheme(theapp, (GFunc)store_color_scheme, list); select_style_scheme(theapp->prefs->schemes_view, g_settings_get_string(prefs, PREFS_STYLE_SCHEME)); }
static void on_config_style_scheme_changed(GSettings *settings, const char *key) { I7App *theapp = i7_app_get(); char *newvalue = g_settings_get_string(settings, key); /* TODO: validate new value? */ /* update application to reflect new value */ select_style_scheme(theapp->prefs->schemes_view, newvalue); update_style(GTK_SOURCE_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(theapp->prefs->source_example)))); i7_app_foreach_document(theapp, (I7DocumentForeachFunc)i7_document_update_fonts, NULL); i7_app_foreach_document(theapp, (I7DocumentForeachFunc)i7_document_update_font_styles, NULL); g_free(newvalue); }
I7PrefsWidgets * create_prefs_window(GSettings *prefs, GtkBuilder *builder) { I7PrefsWidgets *self = g_slice_new0(I7PrefsWidgets); self->window = GTK_WIDGET(load_object(builder, "prefs_dialog")); self->prefs_notebook = GTK_WIDGET(load_object(builder, "prefs_notebook")); self->schemes_view = GTK_TREE_VIEW(load_object(builder, "schemes_view")); self->style_remove = GTK_WIDGET(load_object(builder, "style_remove")); self->tab_example = GTK_SOURCE_VIEW(load_object(builder, "tab_example")); self->source_example = GTK_SOURCE_VIEW(load_object(builder, "source_example")); self->extensions_view = GTK_TREE_VIEW(load_object(builder, "extensions_view")); self->extensions_add = GTK_WIDGET(load_object(builder, "extensions_add")); self->extensions_remove = GTK_WIDGET(load_object(builder, "extensions_remove")); self->auto_number = GTK_WIDGET(load_object(builder, "auto_number")); self->clean_index_files = GTK_WIDGET(load_object(builder, "clean_index_files")); self->schemes_list = GTK_LIST_STORE(load_object(builder, "schemes_list")); /* Bind widgets to GSettings */ #define BIND(key, obj, property) \ g_settings_bind(prefs, key, load_object(builder, obj), property, \ G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_NO_SENSITIVITY) #define BIND_COMBO_BOX(key, obj, enum_values) \ g_settings_bind_with_mapping(prefs, key, \ load_object(builder, obj), "active", \ G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_NO_SENSITIVITY, \ (GSettingsBindGetMapping)settings_enum_get_mapping, \ (GSettingsBindSetMapping)settings_enum_set_mapping, \ enum_values, NULL) BIND(PREFS_AUTHOR_NAME, "author_name", "text"); BIND(PREFS_CUSTOM_FONT, "custom_font", "font-name"); BIND(PREFS_SYNTAX_HIGHLIGHTING, "enable_highlighting", "active"); BIND(PREFS_AUTO_INDENT, "auto_indent", "active"); BIND(PREFS_INDENT_WRAPPED, "indent_wrapped", "active"); BIND(PREFS_INTELLIGENCE, "follow_symbols", "active"); BIND(PREFS_INTELLIGENCE, "auto_number", "sensitive"); BIND(PREFS_AUTO_NUMBER, "auto_number", "active"); BIND(PREFS_CLEAN_BUILD_FILES, "clean_build_files", "active"); BIND(PREFS_CLEAN_BUILD_FILES, "clean_index_files", "sensitive"); BIND(PREFS_CLEAN_INDEX_FILES, "clean_index_files", "active"); BIND(PREFS_SHOW_DEBUG_LOG, "show_debug_tabs", "active"); BIND_COMBO_BOX(PREFS_FONT_SET, "font_set", font_set_enum); BIND_COMBO_BOX(PREFS_FONT_SIZE, "font_size", font_size_enum); BIND_COMBO_BOX(PREFS_INTERPRETER, "glulx_combo", interpreter_enum); #undef BIND #undef BIND_COMBO_BOX g_settings_bind(prefs, PREFS_TAB_WIDTH, gtk_range_get_adjustment(GTK_RANGE(load_object(builder, "tab_ruler"))), "value", G_SETTINGS_BIND_DEFAULT); /* Only select one extension at a time */ GtkTreeSelection *select = gtk_tree_view_get_selection(self->extensions_view); gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE); /* Connect the drag'n'drop stuff */ gtk_drag_dest_set(GTK_WIDGET(self->extensions_view), GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT, NULL, 0, GDK_ACTION_COPY); /* For some reason GTK_DEST_DEFAULT_DROP causes two copies of every file to be sent to the widget when dropped, so we omit that. Also, GTK_DEST_DEFAULT_HIGHLIGHT seems to be broken. Including it anyway. */ gtk_drag_dest_add_uri_targets(GTK_WIDGET(self->extensions_view)); /* Do the style scheme list */ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(self->schemes_list), 0, GTK_SORT_ASCENDING); select = gtk_tree_view_get_selection(self->schemes_view); gtk_tree_selection_set_mode(select, GTK_SELECTION_BROWSE); select_style_scheme(self->schemes_view, g_settings_get_string(prefs, PREFS_STYLE_SCHEME)); return self; }