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 | 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 | 765 | #if GTK_CHECK_VERSION(2,20,0) |
760 | 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 | 768 | if(GTK_WIDGET_REALIZED(widget) && widget->window) |
763 | 769 | #endif // GTK(2,20) |
764 | 770 | { |
765 | - GTK_V3270(widget)->pointer_id = id; | |
771 | + GTK_V3270(widget)->pointer_id = data->id; | |
766 | 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 | 784 | static void ctlr_done(H3270 *session) |
771 | 785 | { |
772 | 786 | GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session)); | ... | ... |