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 | 151 | int scaled_fonts : 1; /// @brief Use scaled fonts |
152 | 152 | int drawing : 1; /// @brief Draw widget? |
153 | 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 | 156 | /// @brief Action properties. |
156 | 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 | 77 | |
78 | 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 | 82 | g_signal_emit( |
84 | - GTK_WIDGET(widget), | |
83 | + terminal, | |
85 | 84 | v3270_widget_signal[V3270_SIGNAL_MESSAGE_CHANGED], |
86 | 85 | 0, |
87 | 86 | (gint) lib3270_get_program_message(session) |
... | ... | @@ -89,6 +88,9 @@ static gboolean bg_update_message(H3270 *session) |
89 | 88 | |
90 | 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 | 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 | 122 | g_object_notify_by_pspec(G_OBJECT(widget), klass->properties.toggle[id]); |
123 | 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 | 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 | 783 | return FALSE; |
782 | 784 | } |
783 | 785 | ... | ... |