Branch: refs/heads/master Author: Nick Treleaven n@trelsoft.com Committer: Nick Treleaven n@trelsoft.com Date: Sun, 29 Sep 2019 16:26:43 UTC Commit: bcbae3d49abdb6d27d3627c686bb3b96b338b997 https://github.com/geany/geany/commit/bcbae3d49abdb6d27d3627c686bb3b96b338b9...
Log Message: ----------- Make New Project dialog cancellable without closing existing session
Move logic to handle_current_session(), run_new_dialog().
Modified Paths: -------------- src/project.c
Modified: src/project.c 83 lines changed, 45 insertions(+), 38 deletions(-) =================================================================== @@ -86,6 +86,7 @@ static gboolean write_config(void); static void on_name_entry_changed(GtkEditable *editable, PropertyDialogElements *e); static void on_entries_changed(GtkEditable *editable, PropertyDialogElements *e); static void on_radio_long_line_custom_toggled(GtkToggleButton *radio, GtkWidget *spin_long_line); +static void run_new_dialog(PropertyDialogElements *e); static void apply_editor_prefs(void); static void init_stash_prefs(void); static void destroy_project(gboolean open_default); @@ -109,20 +110,8 @@ static gboolean have_session_docs(void) }
-/* TODO: this should be ported to Glade like the project preferences dialog, - * then we can get rid of the PropertyDialogElements struct altogether as - * widgets pointers can be accessed through ui_lookup_widget(). */ -void project_new(void) +static gboolean handle_current_session(void) { - GtkWidget *vbox; - GtkWidget *table; - GtkWidget *image; - GtkWidget *button; - GtkWidget *bbox; - GtkWidget *label; - gchar *tooltip; - PropertyDialogElements e = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, FALSE }; - if (!app->project && project_prefs.project_session) { /* save session in case the dialog is cancelled */ @@ -139,15 +128,29 @@ void project_new(void) else { if (!document_close_all()) - return; + return FALSE; } } } + if (app->project) + return project_close(FALSE); + return TRUE; +}
- if (! project_ask_close()) - return;
- g_return_if_fail(app->project == NULL); +/* TODO: this should be ported to Glade like the project preferences dialog, + * then we can get rid of the PropertyDialogElements struct altogether as + * widgets pointers can be accessed through ui_lookup_widget(). */ +void project_new(void) +{ + GtkWidget *vbox; + GtkWidget *table; + GtkWidget *image; + GtkWidget *button; + GtkWidget *bbox; + GtkWidget *label; + gchar *tooltip; + PropertyDialogElements e = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, FALSE };
e.dialog = gtk_dialog_new_with_buttons(_("New Project"), GTK_WINDOW(main_widgets.window), GTK_DIALOG_DESTROY_WITH_PARENT, @@ -224,25 +227,21 @@ void project_new(void) g_signal_connect(e.base_path, "changed", G_CALLBACK(on_entries_changed), &e);
gtk_widget_show_all(e.dialog); + run_new_dialog(&e); + gtk_widget_destroy(e.dialog); + document_new_file_if_non_open(); + ui_focus_current_document(); +} +
- while (1) +static void run_new_dialog(PropertyDialogElements *e) +{ + if (gtk_dialog_run(GTK_DIALOG(e->dialog)) != GTK_RESPONSE_OK || + !handle_current_session()) + return; + do { - if (gtk_dialog_run(GTK_DIALOG(e.dialog)) != GTK_RESPONSE_OK) - { - // any open docs were meant to be moved into the project - // rewrite default session because it was cleared - if (have_session_docs()) - configuration_save_default_session(); - else - { - // reload any documents that were closed - configuration_reload_default_session(); - configuration_open_files(); - } - break; - } - // dialog confirmed - if (update_config(&e, TRUE)) + if (update_config(e, TRUE)) { // app->project is now set if (!write_config()) @@ -254,13 +253,21 @@ void project_new(void) { ui_set_statusbar(TRUE, _("Project "%s" created."), app->project->name); ui_add_recent_project_file(app->project->file_name); - break; + return; } } } - gtk_widget_destroy(e.dialog); - document_new_file_if_non_open(); - ui_focus_current_document(); + while (gtk_dialog_run(GTK_DIALOG(e->dialog)) == GTK_RESPONSE_OK); + // any open docs were meant to be moved into the project + // rewrite default session because it was cleared + if (have_session_docs()) + configuration_save_default_session(); + else + { + // reload any documents that were closed + configuration_reload_default_session(); + configuration_open_files(); + } }
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).