From 8d2e8ad3062e39b55c2681c5290498ee3c4cdedc Mon Sep 17 00:00:00 2001 From: xiota Date: Sat, 23 Oct 2021 22:07:43 -0700 Subject: [PATCH] Prevent already-open project from being re-opened from Project menu --- src/project.c | 13 ++++++++++--- src/socket.c | 7 ++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/project.c b/src/project.c index 0754b7d63d..2440cd2477 100644 --- a/src/project.c +++ b/src/project.c @@ -292,13 +292,15 @@ static void run_open_dialog(GtkDialog *dialog) while (gtk_dialog_run(dialog) == GTK_RESPONSE_ACCEPT) { gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + gchar *utf8_filename = utils_get_utf8_from_locale(filename); - if (app->project && !project_close(FALSE)) {} + /* Don't re-open projects that are already open. */ + if (app->project && (g_strcmp0(app->project->file_name, utf8_filename) == 0)) {} + /* Don't open new project if old project cannot be closed */ + else if (app->project && !project_close(FALSE)) {} /* try to load the config */ else if (! project_load_file_with_session(filename)) { - gchar *utf8_filename = utils_get_utf8_from_locale(filename); - SHOW_ERR1(_("Project file \"%s\" could not be loaded."), utf8_filename); gtk_widget_grab_focus(GTK_WIDGET(dialog)); g_free(utf8_filename); @@ -319,8 +321,13 @@ void project_open(void) if (interface_prefs.use_native_windows_dialogs) { gchar *file = win32_show_project_open_dialog(main_widgets.window, _("Open Project"), dir, FALSE, TRUE); + gchar *utf8_filename = utils_get_utf8_from_locale(file); + if (file != NULL) { + /* Don't re-open projects that are already open. */ + if (app->project && (g_strcmp0(app->project->file_name, utf8_filename) == 0)) {} + /* Don't open new project if old project cannot be closed */ if (app->project && !project_close(FALSE)) {} /* try to load the config */ else if (! project_load_file_with_session(file)) diff --git a/src/socket.c b/src/socket.c index c5cba03dd0..09cfbbaf80 100644 --- a/src/socket.c +++ b/src/socket.c @@ -631,9 +631,10 @@ static void handle_input_filename(const gchar *buf) { if (g_str_has_suffix(locale_filename, ".geany")) { - /* Don't open project when it is already opened */ - if (!app->project || !(g_strcmp0(app->project->file_name, locale_filename) == 0 - || g_strcmp0(app->project->file_name, utf8_filename) == 0)) + /* Don't re-open projects that are already open. + * The filename has to be checked here to prevent + * warnings for files that won't even be opened. */ + if (!app->project || !(g_strcmp0(app->project->file_name, utf8_filename) == 0)) { if (project_ask_close()) main_load_project_from_command_line(locale_filename, TRUE);