diff options
author | Giovanni Panozzo <giovanni@panozzo.it> | 2018-12-09 15:47:00 +0300 |
---|---|---|
committer | Giovanni Panozzo <giovanni@panozzo.it> | 2018-12-10 20:28:58 +0300 |
commit | bb063d9e7e2d800d9296ba96adfed58ee842a61f (patch) | |
tree | 5728e8d375bcc25db90d0bec1756d48ede0b0418 | |
parent | 5b577d154f3a34878169376fe3b4bba367c1edc6 (diff) |
Prevent toolbar signals while reconfiguring toolbar
-rw-r--r-- | src/remmina_connection_window.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/remmina_connection_window.c b/src/remmina_connection_window.c index b7bc36d1b..4f032bb5a 100644 --- a/src/remmina_connection_window.c +++ b/src/remmina_connection_window.c @@ -128,6 +128,10 @@ struct _RemminaConnectionWindowPriv { gboolean sticky; + /* flag to disable toolbar signal handling when toolbar is + * reconfiguring, usually due to a tab switch */ + gboolean toolbar_is_reconfiguring; + gint view_mode; gboolean kbcaptured; @@ -965,6 +969,9 @@ static gboolean remmina_connection_holder_toolbar_autofit_restore(RemminaConnect gint dwidth, dheight; GtkAllocation nba, ca, ta; + if (priv->toolbar_is_reconfiguring) + return FALSE; + if (cnnobj->connected && GTK_IS_SCROLLED_WINDOW(cnnobj->scrolled_container)) { remmina_connection_holder_get_desktop_size(cnnhld, &dwidth, &dheight); gtk_widget_get_allocation(priv->notebook, &nba); @@ -1194,6 +1201,12 @@ static void remmina_protocol_widget_update_alignment(RemminaConnectionObject* cn static void remmina_connection_holder_toolbar_fullscreen(GtkWidget* widget, RemminaConnectionHolder* cnnhld) { TRACE_CALL(__func__); + + RemminaConnectionWindowPriv* priv = cnnhld->cnnwin->priv; + + if (priv->toolbar_is_reconfiguring) + return; + if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(widget))) { remmina_connection_holder_create_fullscreen(cnnhld, NULL, cnnhld->fullscreen_view_mode); }else { @@ -1238,6 +1251,9 @@ static void remmina_connection_holder_toolbar_fullscreen_option(GtkWidget* widge GtkWidget* menuitem; GSList* group; + if (priv->toolbar_is_reconfiguring) + return; + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) return; @@ -1278,6 +1294,8 @@ static void remmina_connection_holder_scaler_option_popdown(GtkWidget* widget, R { TRACE_CALL(__func__); RemminaConnectionWindowPriv* priv = cnnhld->cnnwin->priv; + if (priv->toolbar_is_reconfiguring) + return; priv->sticky = FALSE; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->scaler_option_button), FALSE); remmina_connection_holder_floating_toolbar_show(cnnhld, FALSE); @@ -1383,6 +1401,9 @@ static void remmina_connection_holder_toolbar_switch_page(GtkWidget* widget, Rem GtkWidget* page; gint i, n; + if (priv->toolbar_is_reconfiguring) + return; + if (!gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(widget))) return; @@ -1485,6 +1506,9 @@ static void remmina_connection_holder_toolbar_dynres(GtkWidget* widget, RemminaC gboolean bdyn, bscale; RemminaConnectionWindowPriv* priv = cnnhld->cnnwin->priv; + if (priv->toolbar_is_reconfiguring) + return; + if (cnnobj->connected) { bdyn = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(widget)); bscale = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(priv->toolitem_scale)); @@ -1505,6 +1529,9 @@ static void remmina_connection_holder_toolbar_scaled_mode(GtkWidget* widget, Rem gboolean bdyn, bscale; RemminaConnectionWindowPriv* priv = cnnhld->cnnwin->priv; + if (priv->toolbar_is_reconfiguring) + return; + bdyn = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(priv->toolitem_dynres)); bscale = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(widget)); @@ -1521,6 +1548,9 @@ static void remmina_connection_holder_toolbar_preferences_popdown(GtkWidget* wid TRACE_CALL(__func__); RemminaConnectionWindowPriv* priv = cnnhld->cnnwin->priv; + if (priv->toolbar_is_reconfiguring) + return; + priv->sticky = FALSE; gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(priv->toolitem_preferences), FALSE); @@ -1532,6 +1562,9 @@ static void remmina_connection_holder_toolbar_tools_popdown(GtkWidget* widget, R TRACE_CALL(__func__); RemminaConnectionWindowPriv* priv = cnnhld->cnnwin->priv; + if (priv->toolbar_is_reconfiguring) + return; + priv->sticky = FALSE; gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(priv->toolitem_tools), FALSE); @@ -1647,6 +1680,9 @@ static void remmina_connection_holder_toolbar_preferences(GtkWidget* widget, Rem gchar* domain; gboolean enabled; + if (priv->toolbar_is_reconfiguring) + return; + if (!gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(widget))) return; @@ -1710,6 +1746,9 @@ static void remmina_connection_holder_toolbar_tools(GtkWidget* widget, RemminaCo gchar **keystroke_values; gint i; + if (priv->toolbar_is_reconfiguring) + return; + if (!gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(widget))) return; @@ -1801,6 +1840,9 @@ static void remmina_connection_holder_toolbar_screenshot(GtkWidget* widget, Remm cairo_surface_t *surface; int stride; + if (cnnhld->cnnwin->priv->toolbar_is_reconfiguring) + return; + GDateTime *date = g_date_time_new_now_utc(); // We will take a screenshot of the currently displayed RemminaProtocolWidget. @@ -1921,6 +1963,9 @@ static void remmina_connection_holder_toolbar_screenshot(GtkWidget* widget, Remm static void remmina_connection_holder_toolbar_minimize(GtkWidget* widget, RemminaConnectionHolder* cnnhld) { TRACE_CALL(__func__); + + if (cnnhld->cnnwin->priv->toolbar_is_reconfiguring) + return; remmina_connection_holder_floating_toolbar_show(cnnhld, FALSE); gtk_window_iconify(GTK_WINDOW(cnnhld->cnnwin)); } @@ -1928,6 +1973,8 @@ static void remmina_connection_holder_toolbar_minimize(GtkWidget* widget, Remmin static void remmina_connection_holder_toolbar_disconnect(GtkWidget* widget, RemminaConnectionHolder* cnnhld) { TRACE_CALL(__func__); + if (cnnhld->cnnwin->priv->toolbar_is_reconfiguring) + return; remmina_connection_holder_disconnect_current_page(cnnhld); } @@ -1937,6 +1984,9 @@ static void remmina_connection_holder_toolbar_grab(GtkWidget* widget, RemminaCon DECLARE_CNNOBJ gboolean capture; + if (cnnhld->cnnwin->priv->toolbar_is_reconfiguring) + return; + capture = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(widget)); remmina_file_set_int(cnnobj->remmina_file, "keyboard_grab", capture); if (capture) { @@ -1959,6 +2009,8 @@ remmina_connection_holder_create_toolbar(RemminaConnectionHolder* cnnhld, gint m GtkWidget* widget; GtkWidget* arrow; + priv->toolbar_is_reconfiguring = TRUE; + toolbar = gtk_toolbar_new(); gtk_widget_show(toolbar); gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS); @@ -2137,6 +2189,7 @@ remmina_connection_holder_create_toolbar(RemminaConnectionHolder* cnnhld, gint m gtk_widget_show(GTK_WIDGET(toolitem)); g_signal_connect(G_OBJECT(toolitem), "clicked", G_CALLBACK(remmina_connection_holder_toolbar_disconnect), cnnhld); + priv->toolbar_is_reconfiguring = FALSE; return toolbar; } @@ -2185,8 +2238,11 @@ static void remmina_connection_holder_update_toolbar(RemminaConnectionHolder* cn gboolean test_floating_toolbar; RemminaScaleMode scalemode; + priv->toolbar_is_reconfiguring = TRUE; + remmina_connection_holder_update_toolbar_autofit_button(cnnhld); + toolitem = priv->toolitem_switch_page; if (kioskmode) { bval = FALSE; @@ -2243,6 +2299,8 @@ static void remmina_connection_holder_update_toolbar(RemminaConnectionHolder* cn remmina_file_get_string(cnnobj->remmina_file, "name")); } + priv->toolbar_is_reconfiguring = FALSE; + } static void remmina_connection_holder_showhide_toolbar(RemminaConnectionHolder* cnnhld, gboolean resize) |