#include "window_config.h" #include "config_ui.h" #include "walls_conf.h" #include "preload.h" #include "wallpapers.h" struct window_config_t *window_config_new(GtkWindow *parent) { GtkBuilder *builder; GtkDialog *dialog; GtkComboBox *interp_combo; GtkHScale *preload_scale; GtkListStore *liststore; GtkTreeIter iter; GError *error = NULL; GtkCellRenderer *cell; struct window_config_t *wct; builder = gtk_builder_new(); if(!gtk_builder_add_from_string(builder, config_ui_string, -1, &error)) { g_warning("%s", error->message); g_error_free(error); return NULL; } interp_combo = GTK_COMBO_BOX(gtk_builder_get_object(builder, "interp_combo")); liststore = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT); gtk_list_store_append(liststore, &iter); gtk_list_store_set(liststore, &iter, 0, "Nearest", 1, GDK_INTERP_NEAREST, -1); gtk_list_store_append(liststore, &iter); gtk_list_store_set(liststore, &iter, 0, "Tiles", 1, GDK_INTERP_TILES, -1); gtk_list_store_append(liststore, &iter); gtk_list_store_set(liststore, &iter, 0, "Bilinear", 1, GDK_INTERP_BILINEAR, -1); gtk_list_store_append(liststore, &iter); gtk_list_store_set(liststore, &iter, 0, "Hyper", 1, GDK_INTERP_HYPER, -1); gtk_combo_box_set_model(interp_combo, GTK_TREE_MODEL(liststore)); g_object_unref(liststore); cell = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(interp_combo), cell, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(interp_combo), cell, "text", 0, NULL); switch(config.interp_type) { case GDK_INTERP_TILES: gtk_combo_box_set_active(interp_combo, 1); break; case GDK_INTERP_BILINEAR: gtk_combo_box_set_active(interp_combo, 2); break; case GDK_INTERP_HYPER: gtk_combo_box_set_active(interp_combo, 3); break; default: gtk_combo_box_set_active(interp_combo, 0); } preload_scale = GTK_HSCALE(gtk_builder_get_object(builder, "preload_scale")); gtk_range_set_value(GTK_RANGE(preload_scale), config.max_preload); dialog = GTK_DIALOG(gtk_builder_get_object(builder, "config_dialog")); gtk_window_set_transient_for(GTK_WINDOW(dialog), parent); gtk_builder_connect_signals(builder, dialog); g_object_unref(G_OBJECT(builder)); wct = g_malloc(sizeof(struct window_config_t)); wct->dialog = dialog; wct->interp_combo = interp_combo; wct->preload_scale = GTK_RANGE(preload_scale); return wct; } void window_config_save(struct window_config_t *wct) { GValue value = {0}; GtkListStore *liststore = GTK_LIST_STORE(gtk_combo_box_get_model(wct->interp_combo)); GtkTreeIter iter; gtk_combo_box_get_active_iter(wct->interp_combo, &iter); gtk_tree_model_get_value(GTK_TREE_MODEL(liststore), &iter, 1, &value); config.interp_type = g_value_get_int(&value); g_value_unset(&value); config.max_preload = gtk_range_get_value(wct->preload_scale); conf_save(); }