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 | ... | ... |