diff options
author | Giovanni Panozzo <giovanni@panozzo.it> | 2022-09-13 15:08:48 +0300 |
---|---|---|
committer | Giovanni Panozzo <giovanni@panozzo.it> | 2022-09-13 15:08:48 +0300 |
commit | c2886762b8e396f89af442b0fb68a7b01fa7e711 (patch) | |
tree | 438dae7d86d7ca6d0c1bc065db6c6a78d9ed9585 /src | |
parent | de14afb225f996090eb9100f4a4244f50a260a6c (diff) |
Improve rcw close
Diffstat (limited to 'src')
-rw-r--r-- | src/rcw.c | 15 | ||||
-rw-r--r-- | src/remmina_protocol_widget.c | 2 |
2 files changed, 13 insertions, 4 deletions
@@ -642,23 +642,30 @@ gboolean rcw_delete(RemminaConnectionWindow *cnnwin) RemminaConnectionWindowPriv *priv = cnnwin->priv; GtkNotebook *notebook = GTK_NOTEBOOK(priv->notebook); GtkWidget *dialog; - gint i, n; + gint i, n, nopen; if (!REMMINA_IS_CONNECTION_WINDOW(cnnwin)) return TRUE; if (cnnwin->priv->on_delete_confirm_mode != RCW_ONDELETE_NOCONFIRM) { n = gtk_notebook_get_n_pages(notebook); - if (n > 1) { + nopen = 0; + /* count all non-closed connections */ + for(i = 0; i < n; i ++) { + RemminaConnectionObject *cnnobj = rcw_get_cnnobj_at_page(cnnwin, i); + if (!remmina_protocol_widget_is_closed((RemminaProtocolWidget *)cnnobj->proto)) + nopen ++; + } + if (nopen > 1) { dialog = gtk_message_dialog_new(GTK_WINDOW(cnnwin), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, - _("Are you sure you want to close %i active connections in the current window?"), n); + _("Are you sure you want to close %i active connections in the current window?"), nopen); i = gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); if (i != GTK_RESPONSE_YES) return FALSE; } - else { + else if (nopen == 1) { if (remmina_pref.confirm_close) { dialog = gtk_message_dialog_new(GTK_WINDOW(cnnwin), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, diff --git a/src/remmina_protocol_widget.c b/src/remmina_protocol_widget.c index 2cc150146..6174d61af 100644 --- a/src/remmina_protocol_widget.c +++ b/src/remmina_protocol_widget.c @@ -480,6 +480,8 @@ void remmina_protocol_widget_close_connection(RemminaProtocolWidget *gp) /* Connection is already closed by the plugin, but * rcw is asking to close again (usually after an error panel) */ + /* Clear the current error, or "disconnect" signal func will reshow a panel */ + remmina_protocol_widget_set_error(gp, NULL); g_signal_emit_by_name(G_OBJECT(gp), "disconnect"); return; } |