From a711e2e2c249da3f793aa9c999b8d16df4c55fdc Mon Sep 17 00:00:00 2001 From: Stefan Tauner Date: Fri, 11 Aug 2017 11:47:54 +0200 Subject: Show confirmation dialog if there are multiple open tabs on closing As a followup #149 this fixes the behavior of the code to match the description of the respective gsettings entry "confirm-window-close". Said entry is also updated to reflect the change added in #149. No changes to the gsettings handling were made thus only users who have "confirm-window-close" turned on already will see the new behavior. --- src/org.mate.terminal.gschema.xml.in | 2 +- src/terminal-window.c | 33 +++++++++++++++++++-------------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/org.mate.terminal.gschema.xml.in b/src/org.mate.terminal.gschema.xml.in index 21c0be3..2e0659c 100644 --- a/src/org.mate.terminal.gschema.xml.in +++ b/src/org.mate.terminal.gschema.xml.in @@ -72,7 +72,7 @@ true Whether to ask for confirmation when closing terminal windows - Whether to ask for confirmation when closing a terminal window which has more than one open tab. + Whether to ask for confirmation when closing a terminal window which has more than one open tab or any foreground subprocesses. false diff --git a/src/terminal-window.c b/src/terminal-window.c index 1eea6ed..df6347c 100644 --- a/src/terminal-window.c +++ b/src/terminal-window.c @@ -3501,7 +3501,9 @@ confirm_close_window_or_tab (TerminalWindow *window, GtkWidget *dialog; GSettings *settings; gboolean do_confirm; + gboolean has_processes; int n_tabs; + char *confirm_msg; if (priv->confirm_close_dialog) { @@ -3518,7 +3520,7 @@ confirm_close_window_or_tab (TerminalWindow *window, if (screen) { - do_confirm = terminal_screen_has_foreground_process (screen); + has_processes = terminal_screen_has_foreground_process (screen); n_tabs = 1; } else @@ -3535,16 +3537,25 @@ confirm_close_window_or_tab (TerminalWindow *window, TerminalScreen *terminal_screen; terminal_screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (t->data)); - if (terminal_screen_has_foreground_process (terminal_screen)) - { - do_confirm = TRUE; + has_processes = terminal_screen_has_foreground_process (terminal_screen); + if (has_processes) break; - } } g_list_free (tabs); } - if (!do_confirm) + + if (has_processes) + { + if (n_tabs > 1) + confirm_msg = _("There are still processes running in some terminals in this window. " + "Closing the window will kill all of them."); + else + confirm_msg = _("There is still a process running in this terminal. " + "Closing the terminal will kill it."); + } else if (n_tabs > 1) + confirm_msg = _("There are multiple tabs open in this window."); + else return FALSE; dialog = priv->confirm_close_dialog = @@ -3554,14 +3565,8 @@ confirm_close_window_or_tab (TerminalWindow *window, GTK_BUTTONS_CANCEL, "%s", n_tabs > 1 ? _("Close this window?") : _("Close this terminal?")); - if (n_tabs > 1) - gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), - "%s", _("There are still processes running in some terminals in this window. " - "Closing the window will kill all of them.")); - else - gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), - "%s", _("There is still a process running in this terminal. " - "Closing the terminal will kill it.")); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), + "%s", confirm_msg); gtk_window_set_title (GTK_WINDOW (dialog), ""); -- cgit v1.2.1