GtkWidget * _gtk_message_dialog_new (GtkWindow *parent, GtkDialogFlags flags, const char *message, const char *secondary_message, const gchar *first_button_text, ...) { GtkWidget *dialog; va_list args; const gchar *text; int response_id; dialog = gtk_message_dialog_new (parent, flags, GTK_MESSAGE_OTHER, GTK_BUTTONS_NONE, "%s", message); if (secondary_message != NULL) gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", secondary_message); if (flags & GTK_DIALOG_MODAL) _gtk_dialog_add_to_window_group (GTK_DIALOG (dialog)); /* add the buttons */ if (first_button_text == NULL) return dialog; va_start (args, first_button_text); text = first_button_text; response_id = va_arg (args, gint); while (text != NULL) { gtk_dialog_add_button (GTK_DIALOG (dialog), text, response_id); text = va_arg (args, char*); if (text == NULL) break; response_id = va_arg (args, int); } va_end (args); return dialog; }
void activate_action_open (GtkAction *action, gpointer data) { GtkWidget *file_sel; FrWindow *window = data; GtkFileFilter *filter; int i; file_sel = gtk_file_chooser_dialog_new (_("Open"), GTK_WINDOW (window), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response (GTK_DIALOG (file_sel), GTK_RESPONSE_OK); gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (file_sel), FALSE); gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (file_sel), fr_window_get_open_default_dir (window), NULL); _gtk_dialog_add_to_window_group (GTK_DIALOG (file_sel)); gtk_window_set_modal (GTK_WINDOW (file_sel), TRUE); filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, _("All archives")); for (i = 0; open_type[i] != -1; i++) gtk_file_filter_add_mime_type (filter, mime_type_desc[open_type[i]].mime_type); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (file_sel), filter); gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (file_sel), filter); filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, _("All files")); gtk_file_filter_add_pattern (filter, "*"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (file_sel), filter); /**/ g_object_set_data (G_OBJECT (file_sel), "fr_window", window); g_signal_connect (G_OBJECT (file_sel), "response", G_CALLBACK (open_file_response_cb), file_sel); gtk_widget_show (file_sel); }
GtkWidget * _gtk_error_dialog_new (GtkWindow *parent, GtkDialogFlags flags, GList *row_output, const char *primary_text, const char *secondary_text_format, ...) { GtkWidget *dialog; dialog = gtk_message_dialog_new (parent, flags, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", primary_text); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE); if (flags & GTK_DIALOG_MODAL) _gtk_dialog_add_to_window_group (GTK_DIALOG (dialog)); /* label */ if (secondary_text_format != NULL) { va_list args; char *secondary_message; va_start (args, secondary_text_format); secondary_message = g_strdup_vprintf (secondary_text_format, args); va_end (args); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", secondary_message); g_free (secondary_message); } /* output */ if ((row_output != NULL) && (secondary_text_format == NULL)) { GtkWidget *output_box; GtkWidget *label; GtkWidget *scrolled_window; GtkWidget *text_view; GtkTextBuffer *text_buffer; GtkTextIter iter; GList *scan; output_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); gtk_box_pack_end (GTK_BOX (gtk_message_dialog_get_message_area (GTK_MESSAGE_DIALOG (dialog))), output_box, TRUE, TRUE, 0); label = gtk_label_new_with_mnemonic (_("C_ommand Line Output:")); gtk_box_pack_start (GTK_BOX (output_box), label, FALSE, FALSE, 0); scrolled_window = g_object_new (GTK_TYPE_SCROLLED_WINDOW, "shadow-type", GTK_SHADOW_IN, "width-request", 450, "height-request", 200, NULL); gtk_box_pack_start (GTK_BOX (output_box), scrolled_window, TRUE, TRUE, 0); text_view = gtk_text_view_new (); gtk_label_set_mnemonic_widget (GTK_LABEL (label), text_view); gtk_container_add (GTK_CONTAINER (scrolled_window), text_view); text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view)); gtk_text_buffer_create_tag (text_buffer, "monospace", "family", "monospace", NULL); gtk_text_buffer_get_iter_at_offset (text_buffer, &iter, 0); for (scan = row_output; scan; scan = scan->next) { char *line = scan->data; char *utf8_line; gsize bytes_written; utf8_line = g_locale_to_utf8 (line, -1, NULL, &bytes_written, NULL); gtk_text_buffer_insert_with_tags_by_name (text_buffer, &iter, utf8_line, bytes_written, "monospace", NULL); g_free (utf8_line); gtk_text_buffer_insert (text_buffer, &iter, "\n", 1); } gtk_widget_show_all (output_box); } return dialog; }
char * _gtk_request_dialog_run (GtkWindow *parent, GtkDialogFlags flags, const char *title, const char *message, const char *default_value, int max_length, const gchar *no_button_text, const gchar *yes_button_text) { GtkBuilder *builder; GtkWidget *dialog; GtkWidget *label; GtkWidget *entry; GtkWidget *content_area; GtkWidget *request_box; char *result; builder = _gtk_builder_new_from_resource ("request-dialog.ui"); request_box = _gtk_builder_get_widget (builder, "request_box"); dialog = g_object_new (GTK_TYPE_DIALOG, "transient-for", parent, "modal", flags & GTK_DIALOG_MODAL, "use-header-bar", _gtk_settings_get_dialogs_use_header (), NULL); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), (flags & GTK_DIALOG_DESTROY_WITH_PARENT)); gtk_window_set_title (GTK_WINDOW (dialog), title); content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); gtk_container_add (GTK_CONTAINER (content_area), request_box); g_object_weak_ref (G_OBJECT (request_box), (GWeakNotify) g_object_unref, builder); if (flags & GTK_DIALOG_MODAL) _gtk_dialog_add_to_window_group (GTK_DIALOG (dialog)); label = _gtk_builder_get_widget (builder, "message_label"); gtk_label_set_text_with_mnemonic (GTK_LABEL (label), message); entry = _gtk_builder_get_widget (builder, "value_entry"); gtk_entry_set_max_length (GTK_ENTRY (entry), max_length); gtk_entry_set_text (GTK_ENTRY (entry), default_value); /* Add buttons */ gtk_dialog_add_action_widget (GTK_DIALOG (dialog), create_button (no_button_text), GTK_RESPONSE_CANCEL); gtk_dialog_add_action_widget (GTK_DIALOG (dialog), create_button (yes_button_text), GTK_RESPONSE_YES); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES); /* Run dialog */ gtk_widget_grab_focus (entry); if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES) result = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); else result = NULL; gtk_widget_destroy (dialog); return result; }