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)); | ... | ... |