gtkroomlist update

Gabriel Schulhof nix at go-nix.ca
Mon Jan 7 09:47:20 EST 2008


Hi!

I have given up on the idea of using g_main_context_iteration(). However,
in implementing a g_idle_add-based solution, I have come across a bug in
the vanilla code: When you click "Get List", followed by "Stop" and then
"Get List" again almost immediately, the second time around the progress
bar doesn't pulse, the "Get List" button isn't disabled, and the "Stop"
button isn't enabled. I suspect it is because the second time around
pidgin_roomlist_in_progress() does not get called with TRUE.

Additionally, I have found a crasher: If you close the dialog while it's
retrieving rooms, it may crash, because (I suspect)
pidgin_roomlist_in_progress() gets called after the dialog is already
destroyed. To clarify: I know it gets called, but I suspect it's after the
dialog is already destroyed, because it's the widget access functions it
calls that crash (gtk_widget_set_sensitive(), mostly).

The backtrace tells me that the IRC prpl receives "End of /LIST" after I
have already closed the room list window, and dutifully calls the
in_progress() UI op via the core, which attempts to set_sensitive dead or
dying widgets.

I will look at these two in more detail and try to figure out a good way
to add rooms to the room list asynchronously. I will try to fix/implement
these things all within Pidgin, but the fact that the UI ops get called at
inappropriate times (such as after closing the window) may indicate a bug
with libpurple. I say "may", because gtkroomlist may not be destroying the
PurpleRoomlist early enough to tell the core to ignore

HTH,



Gabriel




More information about the Devel mailing list