summaryrefslogtreecommitdiffstats
path: root/main/geany/fix-gtk-crash.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/geany/fix-gtk-crash.patch')
-rw-r--r--main/geany/fix-gtk-crash.patch702
1 files changed, 0 insertions, 702 deletions
diff --git a/main/geany/fix-gtk-crash.patch b/main/geany/fix-gtk-crash.patch
deleted file mode 100644
index 6ec092b9c..000000000
--- a/main/geany/fix-gtk-crash.patch
+++ /dev/null
@@ -1,702 +0,0 @@
-Index: src/ui_utils.h
-===================================================================
---- src/ui_utils.h (revision 5836)
-+++ src/ui_utils.h (revision 5837)
-@@ -124,8 +124,6 @@
- /* dialogs */
- GtkWidget *open_colorsel;
- GtkWidget *open_fontsel;
-- GtkWidget *open_filesel;
-- GtkWidget *save_filesel;
- GtkWidget *prefs_dialog;
-
- /* other widgets not needed in GeanyMainWidgets */
-Index: src/dialogs.c
-===================================================================
---- src/dialogs.c (revision 5836)
-+++ src/dialogs.c (revision 5837)
-@@ -66,45 +66,91 @@
- };
-
-
--static gboolean handle_save_as(const gchar *utf8_filename, gboolean open_new_tab,
-- gboolean rename_file);
-+static struct FileSelState
-+{
-+ struct
-+ {
-+ guint filter_idx;
-+ gint encoding_idx;
-+ gint filetype_idx;
-+ gboolean show_hidden;
-+ gboolean more_options_visible;
-+ } open;
-+ struct
-+ {
-+ gboolean open_in_new_tab;
-+ } save;
-+}
-+filesel_state = {
-+ { 0, 0, 0, FALSE, FALSE },
-+ { FALSE }
-+};
-
-
--static GtkWidget *add_file_open_extra_widget(void);
-+/* gets the ID of the current file filter */
-+static guint file_chooser_get_filter_idx(GtkFileChooser *chooser)
-+{
-+ guint idx = 0;
-+ GtkFileFilter *current;
-+ GSList *filters, *item;
-
-+ current = gtk_file_chooser_get_filter(chooser);
-+ filters = gtk_file_chooser_list_filters(chooser);
-+ foreach_slist(item, filters)
-+ {
-+ if (item->data == current)
-+ break;
-+ idx ++;
-+ }
-+ g_slist_free(filters);
-+ return idx;
-+}
-
--static void
--on_file_open_dialog_response (GtkDialog *dialog,
-- gint response,
-- gpointer user_data)
-+
-+/* sets the current file filter from its ID */
-+static void file_chooser_set_filter_idx(GtkFileChooser *chooser, guint idx)
- {
-- gtk_widget_hide(ui_widgets.open_filesel);
-+ GtkFileFilter *current;
-+ GSList *filters;
-
-+ filters = gtk_file_chooser_list_filters(chooser);
-+ current = g_slist_nth_data(filters, idx);
-+ g_slist_free(filters);
-+ gtk_file_chooser_set_filter(chooser, current);
-+}
-+
-+
-+static void open_file_dialog_handle_response(GtkWidget *dialog, gint response)
-+{
- if (response == GTK_RESPONSE_ACCEPT || response == GEANY_RESPONSE_VIEW)
- {
- GSList *filelist;
-- gint filetype_idx = gtk_combo_box_get_active(GTK_COMBO_BOX(
-- ui_lookup_widget(GTK_WIDGET(dialog), "filetype_combo")));
- gint encoding_idx;
- GtkTreeModel *encoding_model;
- GtkTreeIter encoding_iter;
- GeanyFiletype *ft = NULL;
- const gchar *charset = NULL;
-+ GtkWidget *expander = ui_lookup_widget(dialog, "more_options_expander");
-+ GtkWidget *filetype_combo = ui_lookup_widget(dialog, "filetype_combo");
-+ GtkWidget *encoding_combo = ui_lookup_widget(dialog, "encoding_combo");
- gboolean ro = (response == GEANY_RESPONSE_VIEW); /* View clicked */
-
-+ filesel_state.open.more_options_visible = gtk_expander_get_expanded(GTK_EXPANDER(expander));
-+ filesel_state.open.filter_idx = file_chooser_get_filter_idx(GTK_FILE_CHOOSER(dialog));
-+ filesel_state.open.filetype_idx = gtk_combo_box_get_active(GTK_COMBO_BOX(filetype_combo));
-+ filesel_state.open.encoding_idx = gtk_combo_box_get_active(GTK_COMBO_BOX(encoding_combo));
-+
- /* ignore detect from file item */
-- if (filetype_idx > 0)
-- ft = g_slist_nth_data(filetypes_by_title, filetype_idx);
-+ if (filesel_state.open.filetype_idx > 0)
-+ ft = g_slist_nth_data(filetypes_by_title, filesel_state.open.filetype_idx);
-
-- encoding_model = gtk_combo_box_get_model(GTK_COMBO_BOX(
-- ui_lookup_widget(GTK_WIDGET(dialog), "encoding_combo")));
-- gtk_combo_box_get_active_iter(GTK_COMBO_BOX(
-- ui_lookup_widget(GTK_WIDGET(dialog), "encoding_combo")), &encoding_iter);
-+ encoding_model = gtk_combo_box_get_model(GTK_COMBO_BOX(encoding_combo));
-+ gtk_combo_box_get_active_iter(GTK_COMBO_BOX(encoding_combo), &encoding_iter);
- gtk_tree_model_get(encoding_model, &encoding_iter, 0, &encoding_idx, -1);
- if (encoding_idx >= 0 && encoding_idx < GEANY_ENCODINGS_MAX)
- charset = encodings[encoding_idx].charset;
-
-- filelist = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(ui_widgets.open_filesel));
-+ filelist = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog));
- if (filelist != NULL)
- {
- document_open_files(filelist, ro, ft, charset);
-@@ -113,7 +159,7 @@
- g_slist_free(filelist);
- }
- if (app->project && NZV(app->project->base_path))
-- gtk_file_chooser_remove_shortcut_folder(GTK_FILE_CHOOSER(ui_widgets.open_filesel),
-+ gtk_file_chooser_remove_shortcut_folder(GTK_FILE_CHOOSER(dialog),
- app->project->base_path, NULL);
- }
-
-@@ -132,11 +178,10 @@
-
-
- static void
--on_file_open_check_hidden_toggled(GtkToggleButton *togglebutton, gpointer user_data)
-+on_file_open_check_hidden_toggled(GtkToggleButton *togglebutton, GtkWidget *dialog)
- {
-- gboolean is_on = gtk_toggle_button_get_active(togglebutton);
--
-- gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(ui_widgets.open_filesel), is_on);
-+ filesel_state.open.show_hidden = gtk_toggle_button_get_active(togglebutton);
-+ gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), filesel_state.open.show_hidden);
- }
-
-
-@@ -228,49 +273,118 @@
- }
-
-
--static void create_open_file_dialog(void)
-+static GtkWidget *add_file_open_extra_widget(GtkWidget *dialog)
- {
-+ GtkWidget *expander, *vbox, *table, *check_hidden;
-+ GtkWidget *filetype_ebox, *filetype_label, *filetype_combo;
-+ GtkWidget *encoding_ebox, *encoding_label, *encoding_combo;
-+
-+ expander = gtk_expander_new_with_mnemonic(_("_More Options"));
-+ vbox = gtk_vbox_new(FALSE, 6);
-+ gtk_container_add(GTK_CONTAINER(expander), vbox);
-+
-+ table = gtk_table_new(2, 4, FALSE);
-+
-+ /* line 1 with checkbox and encoding combo */
-+ check_hidden = gtk_check_button_new_with_mnemonic(_("Show _hidden files"));
-+ gtk_widget_show(check_hidden);
-+ gtk_table_attach(GTK_TABLE(table), check_hidden, 0, 1, 0, 1,
-+ (GtkAttachOptions) (GTK_FILL | GTK_EXPAND),
-+ (GtkAttachOptions) (0), 0, 5);
-+
-+ /* spacing */
-+ gtk_table_attach(GTK_TABLE(table), gtk_label_new(""), 1, 2, 0, 1,
-+ (GtkAttachOptions) (GTK_FILL),
-+ (GtkAttachOptions) (0), 5, 5);
-+
-+ encoding_label = gtk_label_new(_("Set encoding:"));
-+ gtk_misc_set_alignment(GTK_MISC(encoding_label), 1, 0);
-+ gtk_table_attach(GTK_TABLE(table), encoding_label, 2, 3, 0, 1,
-+ (GtkAttachOptions) (GTK_FILL),
-+ (GtkAttachOptions) (0), 4, 5);
-+ /* the ebox is for the tooltip, because gtk_combo_box can't show tooltips */
-+ encoding_ebox = gtk_event_box_new();
-+ encoding_combo = gtk_combo_box_new();
-+ ui_widget_set_tooltip_text(encoding_ebox,
-+ _("Explicitly defines an encoding for the file, if it would not be detected. This is useful when you know that the encoding of a file cannot be detected correctly by Geany.\nNote if you choose multiple files, they will all be opened with the chosen encoding."));
-+ gtk_container_add(GTK_CONTAINER(encoding_ebox), encoding_combo);
-+ gtk_table_attach(GTK_TABLE(table), encoding_ebox, 3, 4, 0, 1,
-+ (GtkAttachOptions) (GTK_FILL),
-+ (GtkAttachOptions) (0), 0, 5);
-+
-+ /* line 2 with filetype combo */
-+ filetype_label = gtk_label_new(_("Set filetype:"));
-+ gtk_misc_set_alignment(GTK_MISC(filetype_label), 1, 0);
-+ gtk_table_attach(GTK_TABLE(table), filetype_label, 2, 3, 1, 2,
-+ (GtkAttachOptions) (GTK_FILL),
-+ (GtkAttachOptions) (0), 4, 5);
-+ /* the ebox is for the tooltip, because gtk_combo_box can't show tooltips */
-+ filetype_ebox = gtk_event_box_new();
-+ filetype_combo = gtk_combo_box_new_text();
-+ gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(filetype_combo), 2);
-+ ui_widget_set_tooltip_text(filetype_ebox,
-+ _("Explicitly defines a filetype for the file, if it would not be detected by filename extension.\nNote if you choose multiple files, they will all be opened with the chosen filetype."));
-+ gtk_container_add(GTK_CONTAINER(filetype_ebox), filetype_combo);
-+ gtk_table_attach(GTK_TABLE(table), filetype_ebox, 3, 4, 1, 2,
-+ (GtkAttachOptions) (GTK_FILL),
-+ (GtkAttachOptions) (0), 0, 5);
-+
-+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
-+ gtk_widget_show_all(vbox);
-+
-+ g_signal_connect(check_hidden, "toggled", G_CALLBACK(on_file_open_check_hidden_toggled), dialog);
-+
-+ ui_hookup_widget(dialog, expander, "more_options_expander");
-+ ui_hookup_widget(dialog, check_hidden, "check_hidden");
-+ ui_hookup_widget(dialog, filetype_combo, "filetype_combo");
-+ ui_hookup_widget(dialog, encoding_combo, "encoding_combo");
-+
-+ return expander;
-+}
-+
-+
-+static GtkWidget *create_open_file_dialog(void)
-+{
-+ GtkWidget *dialog;
- GtkWidget *filetype_combo, *encoding_combo;
- GtkWidget *viewbtn;
- GtkCellRenderer *encoding_renderer;
- GtkTreeIter encoding_iter;
- GSList *node;
-
-- ui_widgets.open_filesel = gtk_file_chooser_dialog_new(_("Open File"), GTK_WINDOW(main_widgets.window),
-+ dialog = gtk_file_chooser_dialog_new(_("Open File"), GTK_WINDOW(main_widgets.window),
- GTK_FILE_CHOOSER_ACTION_OPEN, NULL, NULL);
-- gtk_widget_set_name(ui_widgets.open_filesel, "GeanyDialog");
-+ gtk_widget_set_name(dialog, "GeanyDialog");
-
-- viewbtn = gtk_dialog_add_button(GTK_DIALOG(ui_widgets.open_filesel), _("_View"),
-- GEANY_RESPONSE_VIEW);
-+ viewbtn = gtk_dialog_add_button(GTK_DIALOG(dialog), _("_View"), GEANY_RESPONSE_VIEW);
- ui_widget_set_tooltip_text(viewbtn,
- _("Opens the file in read-only mode. If you choose more than one file to open, all files will be opened read-only."));
-
-- gtk_dialog_add_buttons(GTK_DIALOG(ui_widgets.open_filesel),
-+ gtk_dialog_add_buttons(GTK_DIALOG(dialog),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
-- gtk_dialog_set_default_response(GTK_DIALOG(ui_widgets.open_filesel), GTK_RESPONSE_ACCEPT);
-+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
-
-- gtk_widget_set_size_request(ui_widgets.open_filesel, -1, 460);
-- gtk_window_set_modal(GTK_WINDOW(ui_widgets.open_filesel), TRUE);
-- gtk_window_set_destroy_with_parent(GTK_WINDOW(ui_widgets.open_filesel), TRUE);
-- gtk_window_set_skip_taskbar_hint(GTK_WINDOW(ui_widgets.open_filesel), FALSE);
-- gtk_window_set_type_hint(GTK_WINDOW(ui_widgets.open_filesel), GDK_WINDOW_TYPE_HINT_DIALOG);
-- gtk_window_set_transient_for(GTK_WINDOW(ui_widgets.open_filesel), GTK_WINDOW(main_widgets.window));
-- gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(ui_widgets.open_filesel), TRUE);
-+ gtk_widget_set_size_request(dialog, -1, 460);
-+ gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
-+ gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
-+ gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), FALSE);
-+ gtk_window_set_type_hint(GTK_WINDOW(dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
-+ gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(main_widgets.window));
-+ gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE);
- if (gtk_check_version(2, 14, 0) == NULL)
-- gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(ui_widgets.open_filesel), FALSE);
-+ gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), FALSE);
-
- /* add checkboxes and filename entry */
-- gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(ui_widgets.open_filesel),
-- add_file_open_extra_widget());
-- filetype_combo = ui_lookup_widget(ui_widgets.open_filesel, "filetype_combo");
-+ gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(dialog), add_file_open_extra_widget(dialog));
-+ filetype_combo = ui_lookup_widget(dialog, "filetype_combo");
-
- gtk_combo_box_append_text(GTK_COMBO_BOX(filetype_combo), _("Detect by file extension"));
- /* add FileFilters(start with "All Files") */
-- gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(ui_widgets.open_filesel),
-+ gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),
- filetypes_create_file_filter(filetypes[GEANY_FILETYPES_NONE]));
- /* now create meta filter "All Source" */
-- gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(ui_widgets.open_filesel),
-+ gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),
- filetypes_create_file_filter_all_source());
- foreach_slist(node, filetypes_by_title)
- {
-@@ -279,33 +393,57 @@
- if (G_UNLIKELY(ft->id == GEANY_FILETYPES_NONE))
- continue;
- gtk_combo_box_append_text(GTK_COMBO_BOX(filetype_combo), ft->title);
-- gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(ui_widgets.open_filesel),
-- filetypes_create_file_filter(ft));
-+ gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filetypes_create_file_filter(ft));
- }
- gtk_combo_box_set_active(GTK_COMBO_BOX(filetype_combo), 0);
-
- /* fill encoding combo box */
-- encoding_combo = ui_lookup_widget(ui_widgets.open_filesel, "encoding_combo");
-+ encoding_combo = ui_lookup_widget(dialog, "encoding_combo");
- gtk_combo_box_set_model(GTK_COMBO_BOX(encoding_combo), GTK_TREE_MODEL(
-- create_encoding_combo_store(&encoding_iter)));
-+ create_encoding_combo_store(&encoding_iter)));
- gtk_combo_box_set_active_iter(GTK_COMBO_BOX(encoding_combo), &encoding_iter);
- encoding_renderer = gtk_cell_renderer_text_new();
- gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(encoding_combo), encoding_renderer, TRUE);
- gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(encoding_combo), encoding_renderer, "text", 1);
- gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(encoding_combo), encoding_renderer,
-- encoding_combo_cell_data_func, NULL, NULL);
-+ encoding_combo_cell_data_func, NULL, NULL);
-
-- g_signal_connect(ui_widgets.open_filesel, "notify::show-hidden",
-- G_CALLBACK(on_file_open_notify), NULL);
-- g_signal_connect(ui_widgets.open_filesel, "delete-event",
-- G_CALLBACK(gtk_widget_hide_on_delete), NULL);
-- g_signal_connect(ui_widgets.open_filesel, "response",
-- G_CALLBACK(on_file_open_dialog_response), NULL);
-+ g_signal_connect(dialog, "notify::show-hidden", G_CALLBACK(on_file_open_notify), NULL);
-+
-+ return dialog;
- }
-
-
-+static void open_file_dialog_apply_settings(GtkWidget *dialog)
-+{
-+ static gboolean initialized = FALSE;
-+ GtkWidget *check_hidden = ui_lookup_widget(dialog, "check_hidden");
-+ GtkWidget *filetype_combo = ui_lookup_widget(dialog, "filetype_combo");
-+ GtkWidget *encoding_combo = ui_lookup_widget(dialog, "encoding_combo");
-+ GtkWidget *expander = ui_lookup_widget(dialog, "more_options_expander");
-+
-+ /* we can't know the initial position of combo boxes, so retreive it the first time */
-+ if (! initialized)
-+ {
-+ filesel_state.open.filter_idx = file_chooser_get_filter_idx(GTK_FILE_CHOOSER(dialog));
-+ filesel_state.open.filetype_idx = gtk_combo_box_get_active(GTK_COMBO_BOX(filetype_combo));
-+ filesel_state.open.encoding_idx = gtk_combo_box_get_active(GTK_COMBO_BOX(encoding_combo));
-+
-+ initialized = TRUE;
-+ }
-+ else
-+ {
-+ file_chooser_set_filter_idx(GTK_FILE_CHOOSER(dialog), filesel_state.open.filter_idx);
-+ gtk_combo_box_set_active(GTK_COMBO_BOX(filetype_combo), filesel_state.open.filetype_idx);
-+ gtk_combo_box_set_active(GTK_COMBO_BOX(encoding_combo), filesel_state.open.encoding_idx);
-+ }
-+ gtk_expander_set_expanded(GTK_EXPANDER(expander), filesel_state.open.more_options_visible);
-+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_hidden), filesel_state.open.show_hidden);
-+}
-+
-+
- /* This shows the file selection dialog to open a file. */
--void dialogs_show_open_file()
-+void dialogs_show_open_file(void)
- {
- gchar *initdir;
-
-@@ -325,103 +463,29 @@
- else
- #endif
- {
-- /* We use the same file selection widget each time, so first of all we create it
-- * if it hasn't already been created. */
-- if (ui_widgets.open_filesel == NULL)
-- create_open_file_dialog();
-+ GtkWidget *dialog = create_open_file_dialog();
-+ gint response;
-
-- if (initdir != NULL)
-- {
-- if (g_path_is_absolute(initdir))
-- gtk_file_chooser_set_current_folder(
-- GTK_FILE_CHOOSER(ui_widgets.open_filesel), initdir);
-- }
-+ open_file_dialog_apply_settings(dialog);
-
-+ if (initdir != NULL && g_path_is_absolute(initdir))
-+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), initdir);
-+
- if (app->project && NZV(app->project->base_path))
-- gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(ui_widgets.open_filesel),
-- app->project->base_path, NULL);
-+ gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(dialog),
-+ app->project->base_path, NULL);
-
-- gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(ui_widgets.open_filesel));
-- gtk_window_present(GTK_WINDOW(ui_widgets.open_filesel));
-+ response = gtk_dialog_run(GTK_DIALOG(dialog));
-+ open_file_dialog_handle_response(dialog, response);
-+ gtk_widget_destroy(dialog);
- }
- g_free(initdir);
- }
-
-
--static GtkWidget *add_file_open_extra_widget()
--{
-- GtkWidget *expander, *vbox, *table, *check_hidden;
-- GtkWidget *filetype_ebox, *filetype_label, *filetype_combo;
-- GtkWidget *encoding_ebox, *encoding_label, *encoding_combo;
--
-- expander = gtk_expander_new_with_mnemonic(_("_More Options"));
-- vbox = gtk_vbox_new(FALSE, 6);
-- gtk_container_add(GTK_CONTAINER(expander), vbox);
--
-- table = gtk_table_new(2, 4, FALSE);
--
-- /* line 1 with checkbox and encoding combo */
-- check_hidden = gtk_check_button_new_with_mnemonic(_("Show _hidden files"));
-- gtk_widget_show(check_hidden);
-- gtk_table_attach(GTK_TABLE(table), check_hidden, 0, 1, 0, 1,
-- (GtkAttachOptions) (GTK_FILL | GTK_EXPAND),
-- (GtkAttachOptions) (0), 0, 5);
--
-- /* spacing */
-- gtk_table_attach(GTK_TABLE(table), gtk_label_new(""), 1, 2, 0, 1,
-- (GtkAttachOptions) (GTK_FILL),
-- (GtkAttachOptions) (0), 5, 5);
--
-- encoding_label = gtk_label_new(_("Set encoding:"));
-- gtk_misc_set_alignment(GTK_MISC(encoding_label), 1, 0);
-- gtk_table_attach(GTK_TABLE(table), encoding_label, 2, 3, 0, 1,
-- (GtkAttachOptions) (GTK_FILL),
-- (GtkAttachOptions) (0), 4, 5);
-- /* the ebox is for the tooltip, because gtk_combo_box can't show tooltips */
-- encoding_ebox = gtk_event_box_new();
-- encoding_combo = gtk_combo_box_new();
-- ui_widget_set_tooltip_text(encoding_ebox,
-- _("Explicitly defines an encoding for the file, if it would not be detected. This is useful when you know that the encoding of a file cannot be detected correctly by Geany.\nNote if you choose multiple files, they will all be opened with the chosen encoding."));
-- gtk_container_add(GTK_CONTAINER(encoding_ebox), encoding_combo);
-- gtk_table_attach(GTK_TABLE(table), encoding_ebox, 3, 4, 0, 1,
-- (GtkAttachOptions) (GTK_FILL),
-- (GtkAttachOptions) (0), 0, 5);
--
-- /* line 2 with filetype combo */
-- filetype_label = gtk_label_new(_("Set filetype:"));
-- gtk_misc_set_alignment(GTK_MISC(filetype_label), 1, 0);
-- gtk_table_attach(GTK_TABLE(table), filetype_label, 2, 3, 1, 2,
-- (GtkAttachOptions) (GTK_FILL),
-- (GtkAttachOptions) (0), 4, 5);
-- /* the ebox is for the tooltip, because gtk_combo_box can't show tooltips */
-- filetype_ebox = gtk_event_box_new();
-- filetype_combo = gtk_combo_box_new_text();
-- gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(filetype_combo), 2);
-- ui_widget_set_tooltip_text(filetype_ebox,
-- _("Explicitly defines a filetype for the file, if it would not be detected by filename extension.\nNote if you choose multiple files, they will all be opened with the chosen filetype."));
-- gtk_container_add(GTK_CONTAINER(filetype_ebox), filetype_combo);
-- gtk_table_attach(GTK_TABLE(table), filetype_ebox, 3, 4, 1, 2,
-- (GtkAttachOptions) (GTK_FILL),
-- (GtkAttachOptions) (0), 0, 5);
--
-- gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
-- gtk_widget_show_all(vbox);
--
-- g_signal_connect(check_hidden, "toggled",
-- G_CALLBACK(on_file_open_check_hidden_toggled), NULL);
--
-- ui_hookup_widget(ui_widgets.open_filesel, check_hidden, "check_hidden");
-- ui_hookup_widget(ui_widgets.open_filesel, filetype_combo, "filetype_combo");
-- ui_hookup_widget(ui_widgets.open_filesel, encoding_combo, "encoding_combo");
--
-- return expander;
--}
--
--
- static void on_save_as_new_tab_toggled(GtkToggleButton *togglebutton, gpointer user_data)
- {
-- gtk_widget_set_sensitive(GTK_WIDGET(user_data),
-- ! gtk_toggle_button_get_active(togglebutton));
-+ gtk_widget_set_sensitive(GTK_WIDGET(user_data), ! gtk_toggle_button_get_active(togglebutton));
- }
-
-
-@@ -457,14 +521,11 @@
- }
-
-
--static void
--on_file_save_dialog_response (GtkDialog *dialog,
-- gint response,
-- gpointer user_data)
-+static gboolean save_as_dialog_handle_response(GtkWidget *dialog, gint response)
- {
- gboolean rename_file = FALSE;
- gboolean success = FALSE;
-- gchar *new_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(ui_widgets.save_filesel));
-+ gchar *new_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
-
- switch (response)
- {
-@@ -485,95 +546,92 @@
- case GTK_RESPONSE_ACCEPT:
- {
- gboolean open_new_tab = gtk_toggle_button_get_active(
-- GTK_TOGGLE_BUTTON(ui_lookup_widget(ui_widgets.save_filesel, "check_open_new_tab")));
-+ GTK_TOGGLE_BUTTON(ui_lookup_widget(dialog, "check_open_new_tab")));
- gchar *utf8_filename;
-
- utf8_filename = utils_get_utf8_from_locale(new_filename);
- success = handle_save_as(utf8_filename, open_new_tab, rename_file);
-
-+ if (success)
-+ filesel_state.save.open_in_new_tab = open_new_tab;
-+
- g_free(utf8_filename);
- break;
- }
-+ case GTK_RESPONSE_DELETE_EVENT:
- case GTK_RESPONSE_CANCEL:
- success = TRUE;
- break;
- }
- g_free(new_filename);
-
-- if (success)
-- gtk_widget_hide(ui_widgets.save_filesel);
-+ return success;
- }
-
-
--static void create_save_file_dialog(void)
-+static GtkWidget *create_save_file_dialog(void)
- {
-- GtkWidget *vbox, *check_open_new_tab, *rename_btn;
-+ GtkWidget *dialog, *vbox, *check_open_new_tab, *rename_btn;
- const gchar *initdir;
-
-- ui_widgets.save_filesel = gtk_file_chooser_dialog_new(_("Save File"), GTK_WINDOW(main_widgets.window),
-+ dialog = gtk_file_chooser_dialog_new(_("Save File"), GTK_WINDOW(main_widgets.window),
- GTK_FILE_CHOOSER_ACTION_SAVE, NULL, NULL);
-- gtk_window_set_modal(GTK_WINDOW(ui_widgets.save_filesel), TRUE);
-- gtk_window_set_destroy_with_parent(GTK_WINDOW(ui_widgets.save_filesel), TRUE);
-- gtk_window_set_skip_taskbar_hint(GTK_WINDOW(ui_widgets.save_filesel), FALSE);
-- gtk_window_set_type_hint(GTK_WINDOW(ui_widgets.save_filesel), GDK_WINDOW_TYPE_HINT_DIALOG);
-- gtk_widget_set_name(ui_widgets.save_filesel, "GeanyDialog");
-+ gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
-+ gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
-+ gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), FALSE);
-+ gtk_window_set_type_hint(GTK_WINDOW(dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
-+ gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(main_widgets.window));
-+ gtk_widget_set_name(dialog, "GeanyDialog");
-
-- rename_btn = gtk_dialog_add_button(GTK_DIALOG(ui_widgets.save_filesel), _("R_ename"),
-- GEANY_RESPONSE_RENAME);
-+ rename_btn = gtk_dialog_add_button(GTK_DIALOG(dialog), _("R_ename"), GEANY_RESPONSE_RENAME);
- ui_widget_set_tooltip_text(rename_btn, _("Save the file and rename it"));
-
-- gtk_dialog_add_buttons(GTK_DIALOG(ui_widgets.save_filesel),
-+ gtk_dialog_add_buttons(GTK_DIALOG(dialog),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL);
-- gtk_dialog_set_default_response(GTK_DIALOG(ui_widgets.save_filesel), GTK_RESPONSE_ACCEPT);
-+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
-
- vbox = gtk_vbox_new(FALSE, 0);
- check_open_new_tab = gtk_check_button_new_with_mnemonic(_("_Open file in a new tab"));
-+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_open_new_tab), filesel_state.save.open_in_new_tab);
- ui_widget_set_tooltip_text(check_open_new_tab,
- _("Keep the current unsaved document open"
- " and open the newly saved file in a new tab"));
- gtk_box_pack_start(GTK_BOX(vbox), check_open_new_tab, FALSE, FALSE, 0);
- gtk_widget_show_all(vbox);
-- gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(ui_widgets.save_filesel), vbox);
-- gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(ui_widgets.save_filesel), TRUE);
-+ gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(dialog), vbox);
-+ gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
- if (gtk_check_version(2, 14, 0) == NULL)
-- gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(ui_widgets.save_filesel), FALSE);
-+ gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), FALSE);
-
- /* set the folder by default to the project base dir or the global pref for opening files */
- initdir = utils_get_default_dir_utf8();
- if (initdir)
- {
- gchar *linitdir = utils_get_locale_from_utf8(initdir);
-- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(ui_widgets.save_filesel), linitdir);
-+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), linitdir);
- g_free(linitdir);
- }
-
- g_signal_connect(check_open_new_tab, "toggled",
- G_CALLBACK(on_save_as_new_tab_toggled), rename_btn);
-
-- ui_hookup_widget(ui_widgets.save_filesel, check_open_new_tab, "check_open_new_tab");
-+ ui_hookup_widget(dialog, check_open_new_tab, "check_open_new_tab");
-
-- g_signal_connect(ui_widgets.save_filesel, "delete-event",
-- G_CALLBACK(gtk_widget_hide_on_delete), NULL);
-- g_signal_connect(ui_widgets.save_filesel, "response",
-- G_CALLBACK(on_file_save_dialog_response), NULL);
--
-- gtk_window_set_transient_for(GTK_WINDOW(ui_widgets.save_filesel), GTK_WINDOW(main_widgets.window));
-+ return dialog;
- }
-
-
--static gboolean gtk_show_save_as(void)
-+static gboolean show_save_as_gtk(void)
- {
-+ GtkWidget *dialog;
- GeanyDocument *doc = document_get_current();
- gint resp;
-
- g_return_val_if_fail(doc != NULL, FALSE);
-
-- if (G_UNLIKELY(ui_widgets.save_filesel == NULL))
-- create_save_file_dialog();
-+ dialog = create_save_file_dialog();
-
-- gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(ui_widgets.save_filesel));
--
- if (doc->file_name != NULL)
- {
- if (g_path_is_absolute(doc->file_name))
-@@ -582,18 +640,15 @@
- gchar *locale_basename = g_path_get_basename(locale_filename);
- gchar *locale_dirname = g_path_get_dirname(locale_filename);
-
-- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(ui_widgets.save_filesel),
-- locale_dirname);
-- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(ui_widgets.save_filesel),
-- locale_basename);
-+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), locale_dirname);
-+ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), locale_basename);
-
- g_free(locale_filename);
- g_free(locale_basename);
- g_free(locale_dirname);
- }
- else
-- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(ui_widgets.save_filesel),
-- doc->file_name);
-+ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), doc->file_name);
- }
- else
- {
-@@ -605,22 +660,28 @@
- else
- fname = g_strdup(GEANY_STRING_UNTITLED);
-
-- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(ui_widgets.save_filesel), fname);
-+ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), fname);
-
- g_free(fname);
- }
-
- if (app->project && NZV(app->project->base_path))
-- gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(ui_widgets.save_filesel),
-+ gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(dialog),
- app->project->base_path, NULL);
-
- /* Run the dialog synchronously, pausing this function call */
-- resp = gtk_dialog_run(GTK_DIALOG(ui_widgets.save_filesel));
-+ do
-+ {
-+ resp = gtk_dialog_run(GTK_DIALOG(dialog));
-+ }
-+ while (! save_as_dialog_handle_response(dialog, resp));
-
- if (app->project && NZV(app->project->base_path))
-- gtk_file_chooser_remove_shortcut_folder(GTK_FILE_CHOOSER(ui_widgets.save_filesel),
-+ gtk_file_chooser_remove_shortcut_folder(GTK_FILE_CHOOSER(dialog),
- app->project->base_path, NULL);
-
-+ gtk_widget_destroy(dialog);
-+
- return (resp == GTK_RESPONSE_ACCEPT);
- }
-
-@@ -645,7 +706,7 @@
- }
- else
- #endif
-- result = gtk_show_save_as();
-+ result = show_save_as_gtk();
- return result;
- }
-
-Index: src/main.c
-===================================================================
---- src/main.c (revision 5836)
-+++ src/main.c (revision 5837)
-@@ -232,8 +232,6 @@
- app->project = NULL;
- ui_widgets.open_fontsel = NULL;
- ui_widgets.open_colorsel = NULL;
-- ui_widgets.open_filesel = NULL;
-- ui_widgets.save_filesel = NULL;
- ui_widgets.prefs_dialog = NULL;
- main_status.main_window_realized = FALSE;
- file_prefs.tab_order_ltr = FALSE;
-@@ -1219,8 +1217,6 @@
- queue_free(ui_prefs.recent_projects_queue);
-
- if (ui_widgets.prefs_dialog && GTK_IS_WIDGET(ui_widgets.prefs_dialog)) gtk_widget_destroy(ui_widgets.prefs_dialog);
-- if (ui_widgets.save_filesel && GTK_IS_WIDGET(ui_widgets.save_filesel)) gtk_widget_destroy(ui_widgets.save_filesel);
-- if (ui_widgets.open_filesel && GTK_IS_WIDGET(ui_widgets.open_filesel)) gtk_widget_destroy(ui_widgets.open_filesel);
- if (ui_widgets.open_fontsel && GTK_IS_WIDGET(ui_widgets.open_fontsel)) gtk_widget_destroy(ui_widgets.open_fontsel);
- if (ui_widgets.open_colorsel && GTK_IS_WIDGET(ui_widgets.open_colorsel)) gtk_widget_destroy(ui_widgets.open_colorsel);
- #ifdef HAVE_VTE