Commit bcfcba8d84033c5bc6bea8b0c53c593591e575b1

Authored by Perry Werneck
1 parent 7af2aa4b
Exists in master and in 1 other branch develop

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