From f32a735bdae71dff6ca7a85115349feaf2589ad3 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Mon, 9 Dec 2019 16:58:45 -0300 Subject: [PATCH] Delaying save of settings on toggle change. --- src/include/terminal.h | 1 + src/terminal/callbacks.c | 8 +++++--- src/terminal/toggles.c | 4 +++- src/terminal/widget.c | 10 ++++++---- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/include/terminal.h b/src/include/terminal.h index 363f2b7..c727b74 100644 --- a/src/include/terminal.h +++ b/src/include/terminal.h @@ -151,6 +151,7 @@ G_BEGIN_DECLS int scaled_fonts : 1; /// @brief Use scaled fonts int drawing : 1; /// @brief Draw widget? int freeze : 1; /// @brief Truee when the "save settings" signal is disabled. + int save_settings : 1; /// @brief The settings were changed. /// @brief Action properties. GtkResponseType responses[V3270_TOGGLEABLE_DIALOG_CUSTOM]; diff --git a/src/terminal/callbacks.c b/src/terminal/callbacks.c index 1d49987..55fb0ac 100644 --- a/src/terminal/callbacks.c +++ b/src/terminal/callbacks.c @@ -77,11 +77,10 @@ static void update_toggle(H3270 *session, LIB3270_TOGGLE_ID id, unsigned char va static gboolean bg_update_message(H3270 *session) { - void *widget = lib3270_get_user_data(session); - // trace("-----A %s %p",__FUNCTION__, lib3270_get_user_data(session)); + v3270 *terminal = (v3270 *) lib3270_get_user_data(session); g_signal_emit( - GTK_WIDGET(widget), + terminal, v3270_widget_signal[V3270_SIGNAL_MESSAGE_CHANGED], 0, (gint) lib3270_get_program_message(session) @@ -89,6 +88,9 @@ static gboolean bg_update_message(H3270 *session) //trace("-----B %s %p",__FUNCTION__, lib3270_get_user_data(session)); + if(terminal->save_settings) + v3270_emit_save_settings(GTK_WIDGET(terminal)); + return FALSE; } diff --git a/src/terminal/toggles.c b/src/terminal/toggles.c index 55bcf1e..592f6ae 100644 --- a/src/terminal/toggles.c +++ b/src/terminal/toggles.c @@ -122,6 +122,8 @@ void v3270_update_toggle(GtkWidget *widget, LIB3270_TOGGLE_ID id, unsigned char g_object_notify_by_pspec(G_OBJECT(widget), klass->properties.toggle[id]); g_signal_emit(widget, v3270_widget_signal[V3270_SIGNAL_TOGGLE_CHANGED], 0, (guint) id, (gboolean) (value != 0), (gchar *) name); - v3270_emit_save_settings(widget); + // Can't emit the signal on every toggle change because, sometimes, the saving of the settings file takes time. + GTK_V3270(widget)->save_settings = 1; +// v3270_emit_save_settings(widget); } diff --git a/src/terminal/widget.c b/src/terminal/widget.c index dde9203..981dd2f 100644 --- a/src/terminal/widget.c +++ b/src/terminal/widget.c @@ -773,11 +773,13 @@ LIB3270_EXPORT GtkIMContext * v3270_get_im_context(GtkWidget *widget) return GTK_V3270(widget)->input_method; } -static gboolean bg_emit_save_settings(GObject *widget) +static gboolean bg_emit_save_settings(v3270 *terminal) { - GTK_V3270(widget)->freeze = 0; - g_signal_emit(widget,v3270_widget_signal[V3270_SIGNAL_SAVE_SETTINGS], 0, FALSE); - g_object_unref(widget); + terminal->freeze = 0; + terminal->save_settings = 0; + + g_signal_emit(terminal,v3270_widget_signal[V3270_SIGNAL_SAVE_SETTINGS], 0, FALSE); + g_object_unref(terminal); return FALSE; } -- libgit2 0.21.2