From bcfcba8d84033c5bc6bea8b0c53c593591e575b1 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Fri, 18 Jan 2019 09:32:05 -0200 Subject: [PATCH] Fixing more multi-thread issues. --- src/v3270/widget.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/v3270/widget.c b/src/v3270/widget.c index 17e949c..7c8287a 100644 --- a/src/v3270/widget.c +++ b/src/v3270/widget.c @@ -752,9 +752,15 @@ static void update_luname(H3270 *session, const char *name) v3270_update_luname(GTK_WIDGET(lib3270_get_user_data(session)),name); } -static void select_cursor(H3270 *session, LIB3270_POINTER id) +struct select_cursor_data { - GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session)); + H3270 * hSession; + LIB3270_POINTER id; +}; + +static void bg_select_cursor(struct select_cursor_data *data) +{ + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(data->hSession)); #if GTK_CHECK_VERSION(2,20,0) if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget)) @@ -762,11 +768,19 @@ static void select_cursor(H3270 *session, LIB3270_POINTER id) if(GTK_WIDGET_REALIZED(widget) && widget->window) #endif // GTK(2,20) { - GTK_V3270(widget)->pointer_id = id; + GTK_V3270(widget)->pointer_id = data->id; v3270_update_mouse_pointer(widget); } } +static void select_cursor(H3270 *session, LIB3270_POINTER id) +{ + struct select_cursor_data *data = g_new0(struct select_cursor_data,1); + data->hSession = session; + data->id = id; + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_select_cursor, data, g_free); +} + static void ctlr_done(H3270 *session) { GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session)); -- libgit2 0.21.2