Commit 1c65586e44fd60bed71752c267cd8454fe8a607a
1 parent
5c269dc4
Exists in
master
and in
1 other branch
Delaying "has_timer" signal to avoid thread issues.
Showing
1 changed file
with
23 additions
and
3 deletions
Show diff stats
src/terminal/callbacks.c
... | ... | @@ -47,15 +47,35 @@ |
47 | 47 | |
48 | 48 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
49 | 49 | |
50 | -static void set_timer(H3270 *session, unsigned char on) | |
50 | +struct has_timer | |
51 | 51 | { |
52 | - GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session)); | |
52 | + H3270 * hSession; | |
53 | + unsigned char on; | |
54 | +}; | |
53 | 55 | |
54 | - if(on) | |
56 | +static gboolean bg_has_timer(struct has_timer *data) | |
57 | +{ | |
58 | + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(data->hSession)); | |
59 | + | |
60 | + if(data->on) | |
55 | 61 | v3270_start_timer(widget); |
56 | 62 | else |
57 | 63 | v3270_stop_timer(widget); |
58 | 64 | |
65 | + g_free(data); | |
66 | + | |
67 | + return FALSE; | |
68 | +} | |
69 | + | |
70 | +static void set_timer(H3270 *session, unsigned char on) | |
71 | +{ | |
72 | + struct has_timer *data = g_malloc0(sizeof(struct has_timer)); | |
73 | + | |
74 | + data->hSession = session; | |
75 | + data->on = on; | |
76 | + | |
77 | + g_idle_add((GSourceFunc) bg_has_timer, data); | |
78 | + | |
59 | 79 | } |
60 | 80 | |
61 | 81 | static void update_toggle(H3270 *session, LIB3270_TOGGLE_ID id, unsigned char value, G_GNUC_UNUSED LIB3270_TOGGLE_TYPE reason, const char *name) | ... | ... |