diff --git a/src/terminal/callbacks.c b/src/terminal/callbacks.c index 9ab32eb..e45028a 100644 --- a/src/terminal/callbacks.c +++ b/src/terminal/callbacks.c @@ -47,15 +47,35 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ -static void set_timer(H3270 *session, unsigned char on) +struct has_timer { - GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session)); + H3270 * hSession; + unsigned char on; +}; - if(on) +static gboolean bg_has_timer(struct has_timer *data) +{ + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(data->hSession)); + + if(data->on) v3270_start_timer(widget); else v3270_stop_timer(widget); + g_free(data); + + return FALSE; +} + +static void set_timer(H3270 *session, unsigned char on) +{ + struct has_timer *data = g_malloc0(sizeof(struct has_timer)); + + data->hSession = session; + data->on = on; + + g_idle_add((GSourceFunc) bg_has_timer, data); + } static void update_toggle(H3270 *session, LIB3270_TOGGLE_ID id, unsigned char value, G_GNUC_UNUSED LIB3270_TOGGLE_TYPE reason, const char *name) -- libgit2 0.21.2