I've developed a very simple application in GTK2. This application
receives events from a socket and based on them, updates the values in a
GTKTreeView.
The problem that arises is that the items displayed in the TreeView are
not updated until I move the mouse.
The application is something like this:
main()
{
g_thread_init (NULL);
gdk_threads_init ();
gdk_threads_enter ();
gtk_init (&argc, &argv);
...
// Create the window Widget
createWindow(gtkWindow);
createThread(SocketEvents); // NOTICE THIS, A NEW THREAD IS CREATED
// TO UPDATE THE GUI
gtk_widget_show_all(gtkWindow);
...
gtk_main();
gdk_threads_leave ();
}
and inside the SocketEvents thread function, I update the GTKListStore
associated to the GTKTreeView with no luck. The code looks like this:
SocketEvents()
{
...
while(1){
<receive an event from a socket>
....
gdk_threads_enter();
gtk_list_store_set(....);
gtk_widget_queue_draw(GTK_WIDGET(gtkTreeView));
while (gtk_events_pending ())
gtk_main_iteration ();
gdk_threads_leave();
}
}
However, in this case, I receive the following error:
(MyAPP:12142): GLib-WARNING **: g_main_context_prepare(): main loop
already active in another thread
Xlib: unexpected async reply (sequence 0x1ee7)!
GLib-ERROR **: file gmain.c: line 1906 (g_main_dispatch): assertion
failed: (source)
aborting...
Can anybody give me a clue about how do I have to update the list store
to be able to see my changes reflected in the screen right away?
Thanks a lot for your attention and help.
--
Attn.
Alvaro Palma
_______________________________________________
gtk-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-list