Commit 6022ed5b62b0fbd1328a838870dfea9c25fe9a93

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

Improving "save-settings" engine.

src/dialogs/settings/dialog.c
@@ -149,14 +149,6 @@ static void revert_settings(GtkWidget *widget, GtkWidget G_GNUC_UNUSED(* termina @@ -149,14 +149,6 @@ static void revert_settings(GtkWidget *widget, GtkWidget G_GNUC_UNUSED(* termina
149 v3270_settings_revert(widget); 149 v3270_settings_revert(widget);
150 } 150 }
151 151
152 -static gboolean bg_emit_save_settings(GObject *widget)  
153 -{  
154 - debug("Unfreezing and emitting save settings for terminal %p",widget);  
155 - GTK_V3270(widget)->freeze = 0;  
156 - g_signal_emit(widget,v3270_widget_signal[V3270_SIGNAL_SAVE_SETTINGS], 0, FALSE);  
157 - return FALSE;  
158 -}  
159 -  
160 void v3270_settings_dialog_apply(GtkWidget *dialog) 152 void v3270_settings_dialog_apply(GtkWidget *dialog)
161 { 153 {
162 debug("%s",__FUNCTION__); 154 debug("%s",__FUNCTION__);
@@ -165,6 +157,14 @@ void v3270_settings_dialog_apply(GtkWidget *dialog) @@ -165,6 +157,14 @@ void v3270_settings_dialog_apply(GtkWidget *dialog)
165 if(!terminal) 157 if(!terminal)
166 return; 158 return;
167 159
  160 + GdkWindow * window = gtk_widget_get_window(dialog);
  161 + gdk_window_set_cursor(
  162 + window,
  163 + GTK_V3270_GET_CLASS(terminal)->cursors[LIB3270_POINTER_WAITING]
  164 + );
  165 +
  166 + gdk_display_sync(gtk_widget_get_display(dialog));
  167 +
168 // Freeze to avoid multiple "save settings" signals. 168 // Freeze to avoid multiple "save settings" signals.
169 GTK_V3270(terminal)->freeze = 1; 169 GTK_V3270(terminal)->freeze = 1;
170 170
@@ -174,8 +174,14 @@ void v3270_settings_dialog_apply(GtkWidget *dialog) @@ -174,8 +174,14 @@ void v3270_settings_dialog_apply(GtkWidget *dialog)
174 terminal 174 terminal
175 ); 175 );
176 176
177 - // Delay the "unfreeze" signal.  
178 - g_idle_add((GSourceFunc) bg_emit_save_settings, G_OBJECT(terminal)); 177 + // Don't delay save settings signal!
  178 + GTK_V3270(terminal)->freeze = 0;
  179 + g_signal_emit(terminal,v3270_widget_signal[V3270_SIGNAL_SAVE_SETTINGS], 0, FALSE);
  180 +
  181 + gdk_window_set_cursor(
  182 + window,
  183 + NULL
  184 + );
179 185
180 } 186 }
181 187
src/terminal/widget.c
@@ -242,38 +242,38 @@ static void v3270_class_init(v3270Class *klass) @@ -242,38 +242,38 @@ static void v3270_class_init(v3270Class *klass)
242 // http://www.functionx.com/win32/Lesson02b.htm 242 // http://www.functionx.com/win32/Lesson02b.htm
243 static const gchar * cr[LIB3270_POINTER_COUNT] = 243 static const gchar * cr[LIB3270_POINTER_COUNT] =
244 { 244 {
245 - "ibeam", // V3270_CURSOR_UNPROTECTED  
246 - "wait", // V3270_CURSOR_WAITING  
247 - "arrow", // V3270_CURSOR_LOCKED  
248 - "arrow", // V3270_CURSOR_PROTECTED  
249 - "hand", // V3270_CURSOR_MOVE_SELECTION  
250 - "sizenwse", // V3270_CURSOR_SELECTION_TOP_LEFT  
251 - "sizenesw", // V3270_CURSOR_SELECTION_TOP_RIGHT  
252 - "sizens", // V3270_CURSOR_SELECTION_TOP  
253 - "sizenesw", // V3270_CURSOR_SELECTION_BOTTOM_LEFT  
254 - "sizenwse", // V3270_CURSOR_SELECTION_BOTTOM_RIGHT  
255 - "sizens", // V3270_CURSOR_SELECTION_BOTTOM  
256 - "sizewe", // V3270_CURSOR_SELECTION_LEFT  
257 - "sizewe", // V3270_CURSOR_SELECTION_RIGHT  
258 - "help", // V3270_CURSOR_QUESTION 245 + "ibeam", // LIB3270_POINTER_UNLOCKED
  246 + "wait", // LIB3270_POINTER_WAITING
  247 + "arrow", // LIB3270_POINTER_LOCKED
  248 + "arrow", // LIB3270_POINTER_PROTECTED
  249 + "hand", // LIB3270_POINTER_MOVE_SELECTION
  250 + "sizenwse", // LIB3270_POINTER_SELECTION_TOP_LEFT
  251 + "sizenesw", // LIB3270_POINTER_SELECTION_TOP_RIGHT
  252 + "sizens", // LIB3270_POINTER_SELECTION_TOP
  253 + "sizenesw", // LIB3270_POINTER_SELECTION_BOTTOM_LEFT
  254 + "sizenwse", // LIB3270_POINTER_SELECTION_BOTTOM_RIGHT
  255 + "sizens", // LIB3270_POINTER_SELECTION_BOTTOM
  256 + "sizewe", // LIB3270_POINTER_SELECTION_LEFT
  257 + "sizewe", // LIB3270_POINTER_SELECTION_RIGHT
  258 + "help", // LIB3270_POINTER_QUESTION
259 }; 259 };
260 #else 260 #else
261 static const int cr[LIB3270_POINTER_COUNT] = 261 static const int cr[LIB3270_POINTER_COUNT] =
262 { 262 {
263 - GDK_XTERM, // V3270_CURSOR_UNPROTECTED  
264 - GDK_WATCH, // V3270_CURSOR_WAITING  
265 - GDK_X_CURSOR, // V3270_CURSOR_LOCKED  
266 - GDK_ARROW, // V3270_CURSOR_PROTECTED  
267 - GDK_HAND1, // V3270_CURSOR_MOVE_SELECTION  
268 - GDK_TOP_LEFT_CORNER, // V3270_CURSOR_SELECTION_TOP_LEFT  
269 - GDK_TOP_RIGHT_CORNER, // V3270_CURSOR_SELECTION_TOP_RIGHT  
270 - GDK_TOP_SIDE, // V3270_CURSOR_SELECTION_TOP  
271 - GDK_BOTTOM_LEFT_CORNER, // V3270_CURSOR_SELECTION_BOTTOM_LEFT  
272 - GDK_BOTTOM_RIGHT_CORNER, // V3270_CURSOR_SELECTION_BOTTOM_RIGHT  
273 - GDK_BOTTOM_SIDE, // V3270_CURSOR_SELECTION_BOTTOM  
274 - GDK_LEFT_SIDE, // V3270_CURSOR_SELECTION_LEFT  
275 - GDK_RIGHT_SIDE, // V3270_CURSOR_SELECTION_RIGHT  
276 - GDK_QUESTION_ARROW, // V3270_CURSOR_QUESTION 263 + GDK_XTERM, // LIB3270_POINTER_UNLOCKED
  264 + GDK_WATCH, // LIB3270_POINTER_WAITING
  265 + GDK_X_CURSOR, // LIB3270_POINTER_LOCKED
  266 + GDK_ARROW, // LIB3270_POINTER_PROTECTED
  267 + GDK_HAND1, // LIB3270_POINTER_MOVE_SELECTION
  268 + GDK_TOP_LEFT_CORNER, // LIB3270_POINTER_SELECTION_TOP_LEFT
  269 + GDK_TOP_RIGHT_CORNER, // LIB3270_POINTER_SELECTION_TOP_RIGHT
  270 + GDK_TOP_SIDE, // LIB3270_POINTER_SELECTION_TOP
  271 + GDK_BOTTOM_LEFT_CORNER, // LIB3270_POINTER_SELECTION_BOTTOM_LEFT
  272 + GDK_BOTTOM_RIGHT_CORNER, // LIB3270_POINTER_SELECTION_BOTTOM_RIGHT
  273 + GDK_BOTTOM_SIDE, // LIB3270_POINTER_SELECTION_BOTTOM
  274 + GDK_LEFT_SIDE, // LIB3270_POINTER_SELECTION_LEFT
  275 + GDK_RIGHT_SIDE, // LIB3270_POINTER_SELECTION_RIGHT
  276 + GDK_QUESTION_ARROW, // LIB3270_POINTER_QUESTION
277 }; 277 };
278 #endif // WIN32 278 #endif // WIN32
279 279