Extremely weird filechooser behaviour



My apologies to the moderators, i used the wrong email address to send
this initially!



My image viewer gimmage has a bug which manifests itself as outlined
below, I believe this is caused by a fundamental bug in the filechooser
widget in GNOME mode. (Could very well be a case of "it's no bug, it's a
feature") I would be very very happy if somebody could confirm this. If
you do, please use the non-official 0.2.3 release from here:
http://veritas.homelinux.org:8080/gimmage-0.2.3.tar.gz I will leave the
server running for a couple of days. please be gentle  :)

the filechooser is opened and closed with show() and hide() in the code,
it is embedded into the main viewer window. check the screenshots at
http://gimmage.berlios.de for a visual queue

When I run gimmage in a non-gnome session (e.g. IceWM to be specific) I
can do the following steps successfully:

1) open images (via command line arguments or using the filechooser)
2) flip through images (space, backspace or using buttons)
3) open filechooser (f or button)
4) flip through images, note that the correct image is selected in the list
5) close filechooser (f or button)
7) flip through images
8) open filechooser
9) flip through images, note that the correct image is still selected in
the list

*when I launch a gnome session, and repeat steps 1-8, step 9 fails. The
filechooser will select random images or directories in the open directory.*

I've noticed (using gdb) that when in a gnome session, opening the
filechooser spawns two to four new threads, which is not the case in a
non-gnome session. Hiding the filechooser will stop these threads. I
presume this is where the bug originates, the filechooser reference not
being updated correctly somewhere in gtkmm or gtk.

I make sure to never update the filechooser's current filename when it
is hidden (by querying is_visible() ). When it is visible (upon forward
/ backward operations in the image list) i pass the path of the
currently open image to the filechooser's set_filename() method after it
has been openened in the viewer. The same thing is done in the event
handler for the "show file chooser" button and upon the opening of new
images using the filechooser itself.

the relevant method is "set_filechooser_dir()" which is called by
on_button_next, on_button_previous, on_button_show_filechooser and
open_new_file and itself calls FileChooser.set_filename()

I hope my wording was sufficiently clear.

-Bartek







[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]