Commit 6022ed5b62b0fbd1328a838870dfea9c25fe9a93
1 parent
4c0b7333
Exists in
master
and in
1 other branch
Improving "save-settings" engine.
Showing
2 changed files
with
44 additions
and
38 deletions
Show diff stats
src/dialogs/settings/dialog.c
| ... | ... | @@ -149,14 +149,6 @@ static void revert_settings(GtkWidget *widget, GtkWidget G_GNUC_UNUSED(* termina |
| 149 | 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 | 152 | void v3270_settings_dialog_apply(GtkWidget *dialog) |
| 161 | 153 | { |
| 162 | 154 | debug("%s",__FUNCTION__); |
| ... | ... | @@ -165,6 +157,14 @@ void v3270_settings_dialog_apply(GtkWidget *dialog) |
| 165 | 157 | if(!terminal) |
| 166 | 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 | 168 | // Freeze to avoid multiple "save settings" signals. |
| 169 | 169 | GTK_V3270(terminal)->freeze = 1; |
| 170 | 170 | |
| ... | ... | @@ -174,8 +174,14 @@ void v3270_settings_dialog_apply(GtkWidget *dialog) |
| 174 | 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 | 242 | // http://www.functionx.com/win32/Lesson02b.htm |
| 243 | 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 | 260 | #else |
| 261 | 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 | 278 | #endif // WIN32 |
| 279 | 279 | ... | ... |