static void generic_dialog_setup(GenericDialog *gd, const gchar *title, const gchar *role, GtkWidget *parent, gboolean auto_close, void (*cancel_cb)(GenericDialog *, gpointer), gpointer data) { GtkWidget *vbox; gd->auto_close = auto_close; gd->data = data; gd->cancel_cb = cancel_cb; gd->dialog = window_new(GTK_WINDOW_TOPLEVEL, role, NULL, NULL, title); gtk_window_set_type_hint(GTK_WINDOW(gd->dialog), GDK_WINDOW_TYPE_HINT_DIALOG); if (parent) { GtkWindow *window = NULL; if (GTK_IS_WINDOW(parent)) { window = GTK_WINDOW(parent); } else { GtkWidget *top; top = gtk_widget_get_toplevel(parent); if (GTK_IS_WINDOW(top) && gtk_widget_is_toplevel(top)) window = GTK_WINDOW(top); } if (window) gtk_window_set_transient_for(GTK_WINDOW(gd->dialog), window); } g_signal_connect(G_OBJECT(gd->dialog), "delete_event", G_CALLBACK(generic_dialog_delete_cb), gd); g_signal_connect(G_OBJECT(gd->dialog), "key_press_event", G_CALLBACK(generic_dialog_key_press_cb), gd); gtk_window_set_resizable(GTK_WINDOW(gd->dialog), TRUE); gtk_container_set_border_width(GTK_CONTAINER(gd->dialog), PREF_PAD_BORDER); vbox = gtk_vbox_new(FALSE, PREF_PAD_BUTTON_SPACE); gtk_container_add(GTK_CONTAINER(gd->dialog), vbox); gtk_widget_show(vbox); gd->vbox = gtk_vbox_new(FALSE, PREF_PAD_GAP); gtk_box_pack_start(GTK_BOX(vbox), gd->vbox, TRUE, TRUE, 0); gtk_widget_show(gd->vbox); gd->hbox = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(gd->hbox), GTK_BUTTONBOX_END); gtk_box_set_spacing(GTK_BOX(gd->hbox), PREF_PAD_BUTTON_GAP); gtk_box_pack_start(GTK_BOX(vbox), gd->hbox, FALSE, FALSE, 0); gtk_widget_show(gd->hbox); if (gd->cancel_cb) { gd->cancel_button = generic_dialog_add_button(gd, GTK_STOCK_CANCEL, NULL, gd->cancel_cb, TRUE); } else { gd->cancel_button = NULL; } if (generic_dialog_get_alternative_button_order(gd->hbox)) { g_signal_connect(G_OBJECT(gd->dialog), "show", G_CALLBACK(generic_dialog_show_cb), gd); } gd->default_cb = NULL; }
GtkWidget *file_dialog_add_button(FileDialog *fdlg, const gchar *stock_id, const gchar *text, void (*func_cb)(FileDialog *, gpointer), gboolean is_default) { return generic_dialog_add_button(GENERIC_DIALOG(fdlg), stock_id, text, (gpointer)func_cb, is_default); }