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.
parent
11909bfdfe
commit
a711e2e2c2
|
@ -72,7 +72,7 @@
|
||||||
<key name="confirm-window-close" type="b">
|
<key name="confirm-window-close" type="b">
|
||||||
<default>true</default>
|
<default>true</default>
|
||||||
<summary>Whether to ask for confirmation when closing terminal windows</summary>
|
<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>
|
||||||
<key name="middle-click-closes-tabs" type="b">
|
<key name="middle-click-closes-tabs" type="b">
|
||||||
<default>false</default>
|
<default>false</default>
|
||||||
|
|
|
@ -3501,7 +3501,9 @@ confirm_close_window_or_tab (TerminalWindow *window,
|
||||||
GtkWidget *dialog;
|
GtkWidget *dialog;
|
||||||
GSettings *settings;
|
GSettings *settings;
|
||||||
gboolean do_confirm;
|
gboolean do_confirm;
|
||||||
|
gboolean has_processes;
|
||||||
int n_tabs;
|
int n_tabs;
|
||||||
|
char *confirm_msg;
|
||||||
|
|
||||||
if (priv->confirm_close_dialog)
|
if (priv->confirm_close_dialog)
|
||||||
{
|
{
|
||||||
|
@ -3518,7 +3520,7 @@ confirm_close_window_or_tab (TerminalWindow *window,
|
||||||
|
|
||||||
if (screen)
|
if (screen)
|
||||||
{
|
{
|
||||||
do_confirm = terminal_screen_has_foreground_process (screen);
|
has_processes = terminal_screen_has_foreground_process (screen);
|
||||||
n_tabs = 1;
|
n_tabs = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -3535,16 +3537,25 @@ confirm_close_window_or_tab (TerminalWindow *window,
|
||||||
TerminalScreen *terminal_screen;
|
TerminalScreen *terminal_screen;
|
||||||
|
|
||||||
terminal_screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (t->data));
|
terminal_screen = terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (t->data));
|
||||||
if (terminal_screen_has_foreground_process (terminal_screen))
|
has_processes = terminal_screen_has_foreground_process (terminal_screen);
|
||||||
{
|
if (has_processes)
|
||||||
do_confirm = TRUE;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
g_list_free (tabs);
|
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;
|
return FALSE;
|
||||||
|
|
||||||
dialog = priv->confirm_close_dialog =
|
dialog = priv->confirm_close_dialog =
|
||||||
|
@ -3554,14 +3565,8 @@ confirm_close_window_or_tab (TerminalWindow *window,
|
||||||
GTK_BUTTONS_CANCEL,
|
GTK_BUTTONS_CANCEL,
|
||||||
"%s", n_tabs > 1 ? _("Close this window?") : _("Close this terminal?"));
|
"%s", n_tabs > 1 ? _("Close this window?") : _("Close this terminal?"));
|
||||||
|
|
||||||
if (n_tabs > 1)
|
|
||||||
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
|
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
|
||||||
"%s", _("There are still processes running in some terminals in this window. "
|
"%s", confirm_msg);
|
||||||
"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_window_set_title (GTK_WINDOW (dialog), "");
|
gtk_window_set_title (GTK_WINDOW (dialog), "");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue