Commit bcfcba8d84033c5bc6bea8b0c53c593591e575b1
1 parent
7af2aa4b
Exists in
master
and in
1 other branch
Fixing more multi-thread issues.
Showing
1 changed file
with
17 additions
and
3 deletions
Show diff stats
src/v3270/widget.c
@@ -752,9 +752,15 @@ static void update_luname(H3270 *session, const char *name) | @@ -752,9 +752,15 @@ static void update_luname(H3270 *session, const char *name) | ||
752 | v3270_update_luname(GTK_WIDGET(lib3270_get_user_data(session)),name); | 752 | v3270_update_luname(GTK_WIDGET(lib3270_get_user_data(session)),name); |
753 | } | 753 | } |
754 | 754 | ||
755 | -static void select_cursor(H3270 *session, LIB3270_POINTER id) | 755 | +struct select_cursor_data |
756 | { | 756 | { |
757 | - GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session)); | 757 | + H3270 * hSession; |
758 | + LIB3270_POINTER id; | ||
759 | +}; | ||
760 | + | ||
761 | +static void bg_select_cursor(struct select_cursor_data *data) | ||
762 | +{ | ||
763 | + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(data->hSession)); | ||
758 | 764 | ||
759 | #if GTK_CHECK_VERSION(2,20,0) | 765 | #if GTK_CHECK_VERSION(2,20,0) |
760 | if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget)) | 766 | 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) | @@ -762,11 +768,19 @@ static void select_cursor(H3270 *session, LIB3270_POINTER id) | ||
762 | if(GTK_WIDGET_REALIZED(widget) && widget->window) | 768 | if(GTK_WIDGET_REALIZED(widget) && widget->window) |
763 | #endif // GTK(2,20) | 769 | #endif // GTK(2,20) |
764 | { | 770 | { |
765 | - GTK_V3270(widget)->pointer_id = id; | 771 | + GTK_V3270(widget)->pointer_id = data->id; |
766 | v3270_update_mouse_pointer(widget); | 772 | v3270_update_mouse_pointer(widget); |
767 | } | 773 | } |
768 | } | 774 | } |
769 | 775 | ||
776 | +static void select_cursor(H3270 *session, LIB3270_POINTER id) | ||
777 | +{ | ||
778 | + struct select_cursor_data *data = g_new0(struct select_cursor_data,1); | ||
779 | + data->hSession = session; | ||
780 | + data->id = id; | ||
781 | + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_select_cursor, data, g_free); | ||
782 | +} | ||
783 | + | ||
770 | static void ctlr_done(H3270 *session) | 784 | static void ctlr_done(H3270 *session) |
771 | { | 785 | { |
772 | GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session)); | 786 | GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session)); |