Commit f32a735bdae71dff6ca7a85115349feaf2589ad3

Authored by Perry Werneck
1 parent 4cdb9db3
Exists in master and in 1 other branch develop

Delaying save of settings on toggle change.

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