Another Thunar/GIO Status Update
Friday, May 1 2009, 02:44 - Permalink
I'm more or less done with migrating the volume management code in Thunar to GIO. As of today there's not a single reference to ThunarVfsVolume or ThunarVfsVolume manager in Thunar anymore. While that is pretty neat and another thing I can mark as (almost) done, there are a few quirks also:
- There's no way to find out whether a volume is removable or not. Actually, there are APIs for that but they don't seem to yield reasonable results for any of my USB and DVD drives.
- GIO doesn't handle repeatedly issued mount requests too well. If you try mounting a DVD volume several times in a row, you'll end up
G_IO_ERROR_FAILEDerrors exposing private D-Bus error messages. That's nothing the user should be bothered with but unfortunately there's no way to avoid this.G_IO_ERROR_FAILEDis an error type you normally want to display. I think in this case raising aG_IO_ERROR_PENDINGwould be more appropriate.
So what's next? I'll just pick the list from my last post because I'm lazy:
- Move the thumbnail related code into exo.
- Load
ThunarFileobjects asynchronously. This will be a pain. A lot of functions will have to be split up to fit into the asynchronous concept. - Migrate Thunarx to GIO.
- Migrate thunar-volman to GIO.
- Integrate functionality similar to Gigolo (remote/virtual places management) into the file manager.
- Write GNOME-independent GIO extensions for volume management and the trash.
I'm not so sure I want to load ThunarFiles asynchronously. It'll only work in some situations anyway. However, the possibility of the loading process blocking the GUI is quite high, especially with remote mounts. I guess the next thing I'll work on (next week) is moving thumbnailing out of Thunar and into exo.
Oh, by the way, here are some boring stats of my work in the past four weeks:
thunar/Makefile.am | 44 +- thunar/main.c | 8 + thunar/thunar-abstract-icon-view.c | 4 - thunar/thunar-application.c | 655 +++++++-------- thunar/thunar-application.h | 25 +- thunar/thunar-chooser-button.c | 131 +-- thunar/thunar-chooser-dialog.c | 232 +++--- thunar/thunar-chooser-model.c | 450 +++------- thunar/thunar-chooser-model.h | 23 +- thunar/thunar-clipboard-manager.c | 53 +- thunar/thunar-clipboard-manager.h | 3 +- thunar/thunar-create-dialog.c | 155 ++-- thunar/thunar-create-dialog.h | 25 +- thunar/thunar-dbus-service.c | 47 +- thunar/thunar-debug.c | 4 - thunar/thunar-deep-count-job.c | 373 ++++++++ thunar/thunar-deep-count-job.h | 48 + thunar/thunar-details-view.c | 20 - thunar/thunar-dialogs.c | 100 ++- thunar/thunar-dialogs.h | 42 +- thunar/thunar-dnd.c | 21 +- thunar/thunar-enum-types.c | 57 ++ thunar/thunar-enum-types.h | 56 ++ thunar/thunar-file.c | 1455 +++++++++++++++++++++++-------- thunar/thunar-file.h | 309 ++----- thunar/thunar-folder.c | 192 +++-- thunar/thunar-gio-extensions.c | 355 ++++++++ thunar/thunar-gio-extensions.h | 63 ++ thunar/thunar-gtk-extensions.c | 4 - thunar/thunar-icon-factory.c | 13 +- thunar/thunar-io-jobs-util.c | 139 +++ thunar/thunar-io-jobs-util.h | 36 + thunar/thunar-io-jobs.c | 1074 +++++++++++++++++++++++ thunar/thunar-io-jobs.h | 54 ++ thunar/thunar-io-scan-directory.c | 123 +++ thunar/thunar-io-scan-directory.h | 37 + thunar/thunar-job.c | 1001 +++++++++++++++++++++ thunar/thunar-job.h | 112 +++ thunar/thunar-launcher.c | 521 +++++++----- thunar/thunar-list-model.c | 155 ++-- thunar/thunar-location-button.c | 29 +- thunar/thunar-location-buttons.c | 31 +- thunar/thunar-location-entry.c | 151 +++- thunar/thunar-marshal.list | 4 + thunar/thunar-metafile.c | 42 +- thunar/thunar-metafile.h | 5 +- thunar/thunar-path-entry.c | 65 +- thunar/thunar-permissions-chooser.c | 263 +++--- thunar/thunar-preferences-dialog.c | 103 +-- thunar/thunar-preferences.c | 71 +- thunar/thunar-progress-dialog.c | 152 ++-- thunar/thunar-progress-dialog.h | 7 +- thunar/thunar-properties-dialog.c | 108 ++-- thunar/thunar-renamer-dialog.c | 20 +- thunar/thunar-renamer-model.c | 11 +- thunar/thunar-sendto-model.c | 196 ++--- thunar/thunar-shortcuts-icon-renderer.c | 45 +- thunar/thunar-shortcuts-model.c | 433 +++++----- thunar/thunar-shortcuts-view.c | 594 +++++++++---- thunar/thunar-simple-job.c | 223 +++++ thunar/thunar-simple-job.h | 64 ++ thunar/thunar-size-label.c | 81 +- thunar/thunar-standard-view.c | 212 +++--- thunar/thunar-templates-action.c | 7 +- thunar/thunar-text-renderer.c | 19 - thunar/thunar-transfer-job.c | 888 +++++++++++++++++++ thunar/thunar-transfer-job.h | 60 ++ thunar/thunar-trash-action.c | 9 +- thunar/thunar-tree-model.c | 280 ++++--- thunar/thunar-tree-view.c | 730 ++++++++++------ thunar/thunar-user.c | 833 ++++++++++++++++++ thunar/thunar-user.h | 88 ++ thunar/thunar-util.c | 105 ++- thunar/thunar-util.h | 16 +- thunar/thunar-window.c | 274 +++--- 75 files changed, 10491 insertions(+), 3947 deletions(-)
The overall size of the patch is 844kb already.

Comments
Wow... progressing fast. I am really impressed by your work.
Regarding gigolo, this little app is great. Do you think that it is really needed to implement this functionality in Thunar rather than recommend gigolo or include it as a component of next xfce release?
Good job Jannis! I will give it a go to see how things are shaping!
You're doing amazing work. The last time I had those kinds of stats for code changes was when I rewrote all the SQL queries in a huge (500k+ lines) proprietary app to remove SQL injection vuneralbilities.
Good luck on getting this done. Gnome's excellent gvfs integration is the only thing keeping me using it. I'd rather use XFCE since it's smaller and faster. Also, I'll check out gigolo. That sounds like it would make XFCE more usable in the mean time to I can manage my gedit bookmarks.