(GtkWidget *dialog, GtkWidget *tab, void (*hardcoded_part)(GtkWidget *vbox1, GtkWidget *vbox2)) { GtkWidget *widget, *label, *labelev, *viewport; GtkRequisition size; GtkWidget *hbox = gtk_hbox_new(5, FALSE); GtkWidget *vbox1 = gtk_vbox_new(5, TRUE); GtkWidget *vbox2 = gtk_vbox_new(5, TRUE); char tooltip[1024]; gtk_box_pack_start(GTK_BOX(hbox), vbox1, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, 0); GtkWidget *alignment = gtk_alignment_new(0.5, 0.0, 1.0, 0.0); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 20, 20, 20, 20); GtkWidget *scroll = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); viewport = gtk_viewport_new(NULL, NULL); gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_NONE); // doesn't seem to work from gtkrc gtk_container_add(GTK_CONTAINER(alignment), scroll); gtk_container_add(GTK_CONTAINER(scroll), viewport); gtk_container_add(GTK_CONTAINER(viewport), hbox); if(hardcoded_part) (*hardcoded_part)(vbox1, vbox2); gtk_widget_show_all(tab); gtk_widget_size_request(viewport, &size); gtk_widget_set_size_request(scroll, size.width, size.height); } 1 #include "control/conf.h" ]]> static gboolean reset_widget_ (GtkWidget *label, GdkEventButton *event, GtkWidget *widget) { if(event->type == GDK_2BUTTON_PRESS) { return TRUE; } return FALSE; } static void preferences_callback_ (GtkWidget *widget, gpointer user_data) { } static void preferences_response_callback_ (GtkDialog *dialog, gint response_id, GtkWidget *widget) { if(response_id != GTK_RESPONSE_ACCEPT) return; } static void init_tab_gui gtk_notebook_append_page(GTK_NOTEBOOK(tab), alignment, gtk_label_new(_("GUI options"))); static void init_tab_core gtk_notebook_append_page(GTK_NOTEBOOK(tab), alignment, gtk_label_new(_("core options"))); #endif { label = gtk_label_new(_("")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); labelev = gtk_event_box_new(); gtk_widget_add_events(labelev, GDK_BUTTON_PRESS_MASK); gtk_container_add(GTK_CONTAINER(labelev), label); gtk_event_box_set_visible_window(GTK_EVENT_BOX(labelev), FALSE); g_object_set(widget, "tooltip-text", _(""), (char *)NULL); gtk_widget_set_sensitive(labelev, dt_capabilities_check("")); gtk_widget_set_sensitive(widget, dt_capabilities_check("")); if(!dt_capabilities_check("")) g_object_set(widget, "tooltip-text", _("not available on this system"), (char *)NULL); gtk_box_pack_start(GTK_BOX(vbox1), labelev, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox2), widget, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(labelev), "button-press-event", G_CALLBACK(reset_widget_), (gpointer)widget); } gtk_entry_set_text(GTK_ENTRY(widget), ""); gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), * factor); gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), * factor); gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), * factor); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), ); gtk_combo_box_set_active(GTK_COMBO_BOX(widget), ); dt_conf_set_string("", gtk_entry_get_text(GTK_ENTRY(widget))); dt_conf_set_int("", gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget)) / factor); dt_conf_set_int64("", gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget)) / factor); dt_conf_set_float("", gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget)) / factor); dt_conf_set_bool("", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))); GtkTreeIter iter; if(gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widget), &iter)) { gchar *s = NULL; gtk_tree_model_get(gtk_combo_box_get_model(GTK_COMBO_BOX(widget)), &iter, 0, &s, -1); dt_conf_set_string("", s); g_free(s); } widget = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(widget), dt_conf_get_string("")); g_signal_connect(G_OBJECT(widget), "activate", G_CALLBACK(preferences_callback_), NULL); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(preferences_response_callback_), widget); snprintf(tooltip, 1024, _("double click to reset to `%s'"), ""); g_object_set(labelev, "tooltip-text", tooltip, (char *)NULL); gint min = 0; gint max = G_MAXINT; min *= factor; max *= factor; widget = gtk_spin_button_new_with_range(min, max, 1); gtk_spin_button_set_digits(GTK_SPIN_BUTTON(widget), 0); gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), dt_conf_get_int("") * factor); g_signal_connect(G_OBJECT(widget), "value-changed", G_CALLBACK(preferences_callback_), NULL); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(preferences_response_callback_), widget); snprintf(tooltip, 1024, _("double click to reset to `%d'"), (int)( * factor)); g_object_set(labelev, "tooltip-text", tooltip, (char *)NULL); gint64 min = 0; gint64 max = G_MAXINT64; min *= factor; max *= factor; widget = gtk_spin_button_new_with_range(min, max, 1); gtk_spin_button_set_digits(GTK_SPIN_BUTTON(widget), 0); gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), dt_conf_get_int64("") * factor); g_signal_connect(G_OBJECT(widget), "value-changed", G_CALLBACK(preferences_callback_), NULL); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(preferences_response_callback_), widget); snprintf(tooltip, 1024, _("double click to reset to `%"PRId64"'"), (gint64)( * factor)); g_object_set(labelev, "tooltip-text", tooltip, (char *)NULL); float min = -1000000000.0f; float max = 1000000000.0f; min *= factor; max *= factor; widget = gtk_spin_button_new_with_range(min, max, 0.001f); gtk_spin_button_set_digits(GTK_SPIN_BUTTON(widget), 5); gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), dt_conf_get_float("") * factor); g_signal_connect(G_OBJECT(widget), "value-changed", G_CALLBACK(preferences_callback_), NULL); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(preferences_response_callback_), widget); snprintf(tooltip, 1024, _("double click to reset to `%.03f'"), * factor); g_object_set(labelev, "tooltip-text", tooltip, (char *)NULL); widget = gtk_check_button_new(); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), dt_conf_get_bool("")); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(preferences_callback_), NULL); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(preferences_response_callback_), widget); snprintf(tooltip, 1024, _("double click to reset to `%s'"), C_("preferences", "")); g_object_set(labelev, "tooltip-text", tooltip, (char *)NULL); GtkTreeIter iter; GtkListStore *store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING); gchar *str = dt_conf_get_string(""); gint pos = -1; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, "", 1, C_("preferences", ""), -1); if(pos == -1 && strcmp(str, "") == 0) pos = ; widget = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store)); g_object_unref(store); GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget), renderer, "text", 1, NULL); gtk_combo_box_set_active(GTK_COMBO_BOX(widget), pos); g_signal_connect(G_OBJECT(widget), "changed", G_CALLBACK(preferences_callback_), NULL); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(preferences_response_callback_), widget); snprintf(tooltip, 1024, _("double click to reset to `%s'"), C_("preferences", "")); g_object_set(labelev, "tooltip-text", tooltip, (char *)NULL); min = ; max = ; min = ; max = ; float factor = ; float factor = 1.0f;