From 6022ed5b62b0fbd1328a838870dfea9c25fe9a93 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Tue, 17 Dec 2019 16:09:03 -0300 Subject: [PATCH] Improving "save-settings" engine. --- src/dialogs/settings/dialog.c | 26 ++++++++++++++++---------- src/terminal/widget.c | 56 ++++++++++++++++++++++++++++---------------------------- 2 files changed, 44 insertions(+), 38 deletions(-) diff --git a/src/dialogs/settings/dialog.c b/src/dialogs/settings/dialog.c index 959f0fb..76c657b 100644 --- a/src/dialogs/settings/dialog.c +++ b/src/dialogs/settings/dialog.c @@ -149,14 +149,6 @@ static void revert_settings(GtkWidget *widget, GtkWidget G_GNUC_UNUSED(* termina v3270_settings_revert(widget); } -static gboolean bg_emit_save_settings(GObject *widget) -{ - debug("Unfreezing and emitting save settings for terminal %p",widget); - GTK_V3270(widget)->freeze = 0; - g_signal_emit(widget,v3270_widget_signal[V3270_SIGNAL_SAVE_SETTINGS], 0, FALSE); - return FALSE; -} - void v3270_settings_dialog_apply(GtkWidget *dialog) { debug("%s",__FUNCTION__); @@ -165,6 +157,14 @@ void v3270_settings_dialog_apply(GtkWidget *dialog) if(!terminal) return; + GdkWindow * window = gtk_widget_get_window(dialog); + gdk_window_set_cursor( + window, + GTK_V3270_GET_CLASS(terminal)->cursors[LIB3270_POINTER_WAITING] + ); + + gdk_display_sync(gtk_widget_get_display(dialog)); + // Freeze to avoid multiple "save settings" signals. GTK_V3270(terminal)->freeze = 1; @@ -174,8 +174,14 @@ void v3270_settings_dialog_apply(GtkWidget *dialog) terminal ); - // Delay the "unfreeze" signal. - g_idle_add((GSourceFunc) bg_emit_save_settings, G_OBJECT(terminal)); + // Don't delay save settings signal! + GTK_V3270(terminal)->freeze = 0; + g_signal_emit(terminal,v3270_widget_signal[V3270_SIGNAL_SAVE_SETTINGS], 0, FALSE); + + gdk_window_set_cursor( + window, + NULL + ); } diff --git a/src/terminal/widget.c b/src/terminal/widget.c index 9ed34bd..a43fc63 100644 --- a/src/terminal/widget.c +++ b/src/terminal/widget.c @@ -242,38 +242,38 @@ static void v3270_class_init(v3270Class *klass) // http://www.functionx.com/win32/Lesson02b.htm static const gchar * cr[LIB3270_POINTER_COUNT] = { - "ibeam", // V3270_CURSOR_UNPROTECTED - "wait", // V3270_CURSOR_WAITING - "arrow", // V3270_CURSOR_LOCKED - "arrow", // V3270_CURSOR_PROTECTED - "hand", // V3270_CURSOR_MOVE_SELECTION - "sizenwse", // V3270_CURSOR_SELECTION_TOP_LEFT - "sizenesw", // V3270_CURSOR_SELECTION_TOP_RIGHT - "sizens", // V3270_CURSOR_SELECTION_TOP - "sizenesw", // V3270_CURSOR_SELECTION_BOTTOM_LEFT - "sizenwse", // V3270_CURSOR_SELECTION_BOTTOM_RIGHT - "sizens", // V3270_CURSOR_SELECTION_BOTTOM - "sizewe", // V3270_CURSOR_SELECTION_LEFT - "sizewe", // V3270_CURSOR_SELECTION_RIGHT - "help", // V3270_CURSOR_QUESTION + "ibeam", // LIB3270_POINTER_UNLOCKED + "wait", // LIB3270_POINTER_WAITING + "arrow", // LIB3270_POINTER_LOCKED + "arrow", // LIB3270_POINTER_PROTECTED + "hand", // LIB3270_POINTER_MOVE_SELECTION + "sizenwse", // LIB3270_POINTER_SELECTION_TOP_LEFT + "sizenesw", // LIB3270_POINTER_SELECTION_TOP_RIGHT + "sizens", // LIB3270_POINTER_SELECTION_TOP + "sizenesw", // LIB3270_POINTER_SELECTION_BOTTOM_LEFT + "sizenwse", // LIB3270_POINTER_SELECTION_BOTTOM_RIGHT + "sizens", // LIB3270_POINTER_SELECTION_BOTTOM + "sizewe", // LIB3270_POINTER_SELECTION_LEFT + "sizewe", // LIB3270_POINTER_SELECTION_RIGHT + "help", // LIB3270_POINTER_QUESTION }; #else static const int cr[LIB3270_POINTER_COUNT] = { - GDK_XTERM, // V3270_CURSOR_UNPROTECTED - GDK_WATCH, // V3270_CURSOR_WAITING - GDK_X_CURSOR, // V3270_CURSOR_LOCKED - GDK_ARROW, // V3270_CURSOR_PROTECTED - GDK_HAND1, // V3270_CURSOR_MOVE_SELECTION - GDK_TOP_LEFT_CORNER, // V3270_CURSOR_SELECTION_TOP_LEFT - GDK_TOP_RIGHT_CORNER, // V3270_CURSOR_SELECTION_TOP_RIGHT - GDK_TOP_SIDE, // V3270_CURSOR_SELECTION_TOP - GDK_BOTTOM_LEFT_CORNER, // V3270_CURSOR_SELECTION_BOTTOM_LEFT - GDK_BOTTOM_RIGHT_CORNER, // V3270_CURSOR_SELECTION_BOTTOM_RIGHT - GDK_BOTTOM_SIDE, // V3270_CURSOR_SELECTION_BOTTOM - GDK_LEFT_SIDE, // V3270_CURSOR_SELECTION_LEFT - GDK_RIGHT_SIDE, // V3270_CURSOR_SELECTION_RIGHT - GDK_QUESTION_ARROW, // V3270_CURSOR_QUESTION + GDK_XTERM, // LIB3270_POINTER_UNLOCKED + GDK_WATCH, // LIB3270_POINTER_WAITING + GDK_X_CURSOR, // LIB3270_POINTER_LOCKED + GDK_ARROW, // LIB3270_POINTER_PROTECTED + GDK_HAND1, // LIB3270_POINTER_MOVE_SELECTION + GDK_TOP_LEFT_CORNER, // LIB3270_POINTER_SELECTION_TOP_LEFT + GDK_TOP_RIGHT_CORNER, // LIB3270_POINTER_SELECTION_TOP_RIGHT + GDK_TOP_SIDE, // LIB3270_POINTER_SELECTION_TOP + GDK_BOTTOM_LEFT_CORNER, // LIB3270_POINTER_SELECTION_BOTTOM_LEFT + GDK_BOTTOM_RIGHT_CORNER, // LIB3270_POINTER_SELECTION_BOTTOM_RIGHT + GDK_BOTTOM_SIDE, // LIB3270_POINTER_SELECTION_BOTTOM + GDK_LEFT_SIDE, // LIB3270_POINTER_SELECTION_LEFT + GDK_RIGHT_SIDE, // LIB3270_POINTER_SELECTION_RIGHT + GDK_QUESTION_ARROW, // LIB3270_POINTER_QUESTION }; #endif // WIN32 -- libgit2 0.21.2