diff options
author | Stefan Tauner <[email protected]> | 2017-08-11 11:47:54 +0200 |
---|---|---|
committer | raveit65 <[email protected]> | 2019-04-11 21:57:16 +0200 |
commit | a711e2e2c249da3f793aa9c999b8d16df4c55fdc (patch) | |
tree | 97ad478575f3127b74d2e570986ad4fe3b7fc070 /src | |
parent | 11909bfdfe0af08ad2494c985957339739b9112f (diff) | |
download | mate-terminal-a711e2e2c249da3f793aa9c999b8d16df4c55fdc.tar.bz2 mate-terminal-a711e2e2c249da3f793aa9c999b8d16df4c55fdc.tar.xz |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/org.mate.terminal.gschema.xml.in | 2 | ||||
-rw-r--r-- | 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 @@ <key name="confirm-window-close" type="b"> <default>true</default> <summary>Whether to ask for confirmation when closing terminal windows</summary> - <description>Whether to ask for confirmation when closing a terminal window which has more than one open tab.</description> + <description>Whether to ask for confirmation when closing a terminal window which has more than one open tab or any foreground subprocesses.</description> </key> <key name="middle-click-closes-tabs" type="b"> <default>false</default> 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), ""); |