Commit f32a735bdae71dff6ca7a85115349feaf2589ad3
1 parent
4cdb9db3
Exists in
master
and in
1 other branch
Delaying save of settings on toggle change.
Showing
4 changed files
with
15 additions
and
8 deletions
Show diff stats
src/include/terminal.h
@@ -151,6 +151,7 @@ G_BEGIN_DECLS | @@ -151,6 +151,7 @@ G_BEGIN_DECLS | ||
151 | int scaled_fonts : 1; /// @brief Use scaled fonts | 151 | int scaled_fonts : 1; /// @brief Use scaled fonts |
152 | int drawing : 1; /// @brief Draw widget? | 152 | int drawing : 1; /// @brief Draw widget? |
153 | int freeze : 1; /// @brief Truee when the "save settings" signal is disabled. | 153 | int freeze : 1; /// @brief Truee when the "save settings" signal is disabled. |
154 | + int save_settings : 1; /// @brief The settings were changed. | ||
154 | 155 | ||
155 | /// @brief Action properties. | 156 | /// @brief Action properties. |
156 | GtkResponseType responses[V3270_TOGGLEABLE_DIALOG_CUSTOM]; | 157 | GtkResponseType responses[V3270_TOGGLEABLE_DIALOG_CUSTOM]; |
src/terminal/callbacks.c
@@ -77,11 +77,10 @@ static void update_toggle(H3270 *session, LIB3270_TOGGLE_ID id, unsigned char va | @@ -77,11 +77,10 @@ static void update_toggle(H3270 *session, LIB3270_TOGGLE_ID id, unsigned char va | ||
77 | 77 | ||
78 | static gboolean bg_update_message(H3270 *session) | 78 | static gboolean bg_update_message(H3270 *session) |
79 | { | 79 | { |
80 | - void *widget = lib3270_get_user_data(session); | ||
81 | - // trace("-----A %s %p",__FUNCTION__, lib3270_get_user_data(session)); | 80 | + v3270 *terminal = (v3270 *) lib3270_get_user_data(session); |
82 | 81 | ||
83 | g_signal_emit( | 82 | g_signal_emit( |
84 | - GTK_WIDGET(widget), | 83 | + terminal, |
85 | v3270_widget_signal[V3270_SIGNAL_MESSAGE_CHANGED], | 84 | v3270_widget_signal[V3270_SIGNAL_MESSAGE_CHANGED], |
86 | 0, | 85 | 0, |
87 | (gint) lib3270_get_program_message(session) | 86 | (gint) lib3270_get_program_message(session) |
@@ -89,6 +88,9 @@ static gboolean bg_update_message(H3270 *session) | @@ -89,6 +88,9 @@ static gboolean bg_update_message(H3270 *session) | ||
89 | 88 | ||
90 | //trace("-----B %s %p",__FUNCTION__, lib3270_get_user_data(session)); | 89 | //trace("-----B %s %p",__FUNCTION__, lib3270_get_user_data(session)); |
91 | 90 | ||
91 | + if(terminal->save_settings) | ||
92 | + v3270_emit_save_settings(GTK_WIDGET(terminal)); | ||
93 | + | ||
92 | return FALSE; | 94 | return FALSE; |
93 | } | 95 | } |
94 | 96 |
src/terminal/toggles.c
@@ -122,6 +122,8 @@ void v3270_update_toggle(GtkWidget *widget, LIB3270_TOGGLE_ID id, unsigned char | @@ -122,6 +122,8 @@ void v3270_update_toggle(GtkWidget *widget, LIB3270_TOGGLE_ID id, unsigned char | ||
122 | g_object_notify_by_pspec(G_OBJECT(widget), klass->properties.toggle[id]); | 122 | g_object_notify_by_pspec(G_OBJECT(widget), klass->properties.toggle[id]); |
123 | g_signal_emit(widget, v3270_widget_signal[V3270_SIGNAL_TOGGLE_CHANGED], 0, (guint) id, (gboolean) (value != 0), (gchar *) name); | 123 | g_signal_emit(widget, v3270_widget_signal[V3270_SIGNAL_TOGGLE_CHANGED], 0, (guint) id, (gboolean) (value != 0), (gchar *) name); |
124 | 124 | ||
125 | - v3270_emit_save_settings(widget); | 125 | + // Can't emit the signal on every toggle change because, sometimes, the saving of the settings file takes time. |
126 | + GTK_V3270(widget)->save_settings = 1; | ||
127 | +// v3270_emit_save_settings(widget); | ||
126 | 128 | ||
127 | } | 129 | } |
src/terminal/widget.c
@@ -773,11 +773,13 @@ LIB3270_EXPORT GtkIMContext * v3270_get_im_context(GtkWidget *widget) | @@ -773,11 +773,13 @@ LIB3270_EXPORT GtkIMContext * v3270_get_im_context(GtkWidget *widget) | ||
773 | return GTK_V3270(widget)->input_method; | 773 | return GTK_V3270(widget)->input_method; |
774 | } | 774 | } |
775 | 775 | ||
776 | -static gboolean bg_emit_save_settings(GObject *widget) | 776 | +static gboolean bg_emit_save_settings(v3270 *terminal) |
777 | { | 777 | { |
778 | - GTK_V3270(widget)->freeze = 0; | ||
779 | - g_signal_emit(widget,v3270_widget_signal[V3270_SIGNAL_SAVE_SETTINGS], 0, FALSE); | ||
780 | - g_object_unref(widget); | 778 | + terminal->freeze = 0; |
779 | + terminal->save_settings = 0; | ||
780 | + | ||
781 | + g_signal_emit(terminal,v3270_widget_signal[V3270_SIGNAL_SAVE_SETTINGS], 0, FALSE); | ||
782 | + g_object_unref(terminal); | ||
781 | return FALSE; | 783 | return FALSE; |
782 | } | 784 | } |
783 | 785 |