In my application, I want to be able to update a treeview from a separate
thread. Each treeview row was a column that is a progress bar. The progress
to be displayed is generated by a separate thread as to not block the UI.

Since GTK is not thread-safe, the way the application is written is that
the thread, when it needs to emit a signal, will prepare the signal data
and then call g_main_context_invoke_full(NULL, cb, data, ...) in order to
be able to call g_singal_emit() in the global default context thread. The
signal handler updates the tree model, which in turn updates the tree view.

For the most part this works with one big, ugly exception - the same
treeview has a column, which is supposed to open the item's Edit dialog
when clicked. So, naturally, I have a button-press handler connected to the
treeview, which launches the Edit dialog when the button press occurs in
the correct column.

However, when an update is running and the thread is continuously emitting
signals, clicking on *any* column of *any* of the other items opens the
Edit dialog. The treeview behaves as if the items in it have only one

Every example or document that I have seen in relation to signals from
threads says to emit the signal from a g_idle_add() handler. However,
g_main_context_invoke_full(NULL, ...) should be the same as calling

Can someone shed some light into what might be happening?

Thank you.
gtk-list mailing list

Reply via email to