xfdesktop: Port to GIO (Progress)
References to ThunarVFS
main.c
Calls thunar_vfs_init()
and thunar_vfs_shutdown()
. Those calls can be removed.
xfdesktop-file-icon.{c,h}
xfdesktop_file_icon_finalize()
There's no need for cancelling jobs if we don't use jobs anymore. Instead we'll use the new D-Bus methods that have been added to Thunar. When using those we can just fire and forget.
xfdesktop_file_icon_activated()
We don't need the file info here. Just launch the file using Thunar's Launch()
D-Bus
method. Add an interface method get_file
and make it return a GFile
. Use this
GFile
to compute the URI to be passed to Launch()
.
Make the interface method peek_info
return a GFileInfo
.
xfdesktop-file-icon-manager.{c,h}
xfdesktop_file_icon_interactive_job_ask()
Remove this function.
xfdesktop_file_icon_manager_add_volume_icon()
Use GVolume
instead of ThunarVfsVolume
.
xfdesktop_file_icon_manager_volume_changed()
Replace this function with a similar one based on GVolumeMonitor
.
xfdesktop_file_icon_manager_add_removable_volume()
The calls to thunar_vfs_is_removable()
and thunar_vfs_volume_is_present()
need to be replaced with something similar based on GVolume
. Thunar has the
same problem solved with this code:
xfdesktop_file_icon_manager_volumes_added()
This will be replaced with a handler for the volume-added
signal of
GVolumeMonitor
which should call
xfdesktop_file_icon_manager_add_removable_volume()
as well.
xfdesktop_file_icon_manager_volumes_removed()
Similar to the previous function, this one should be replaced with one
that handles a single GVolume
volume only.
xfdesktop_file_icon_manager_load_removable_media()
Use the GVolumeMonitor
here and connect to the right signals.
We'll need new callbacks for some of them.
xfdesktop_file_icon_manager_remove_removable_media()
Needs to iterate over the volumes hash table, disconnect from all
returned volumes, destroy all volume icons and disconnect from the
GVolumeMonitor
.
xfdesktop_file_icon_manager_real_init()
Get rid of the global ThunarVfsVolumeManager
.
xfdesktop_file_icon_manager_fini()
The counterpart to the previous function. Same deal.
xfdesktop_file_icon_manager_drag_data_received()
Use …_peek_file()
and …_peek_info()
(we need both this time around) and
GFile
functions instead of ThunarVfsPath
. To convert the string list into a list
of GFile
objects, we can use something similar to Thunar's solution:
We'll need a bit of custom code to execute the executable target file with the dropped
files as parameters. There are two possibilities: either the target is a desktop entry,
then we can parse it into a GDesktopAppInfo
, or it is a regular executable file,
then we can simply spawn it (make sure to pass the file parameters and implement startup
notification).
The code block dealing with jobs needs to be reworked around GFile
, GFileInfo
and the Thunar D-Bus API completely. Maybe danielm's branch implements this already?
_XfdesktopFileIconManagerPrivate
Replace the ThunarVfsMonitor
with a GVolumeMonitor
and remove
the ThunarVfsMonitorHandle
.
xfdesktop-file-properties-dialog.{c,h}
Remove entirely. We'll re-use Thunar's properties dialog via its D-Bus API.
xfdesktop-file-utils.{c,h}
xfdesktop_file_utils_interactive_job_ask()
Remove. We'll no longer implement anything job-related in xfdesktop itself.
xfdesktop_file_utils_handle_fileop_error()
Remove as well.
xfdesktop_file_utils_get_file_kind()
If this is still needed after refactoring, then make it take a GFileInfo
and rewrite the checks based on GFileInfo
attributes.
xfdesktop_file_utils_get_fallback_icon()
No longer needed, remove. g_file_info_get_icon()
always returns a valid GIcon
.
xfdesktop_file_utils_get_file_icon()
We have two options here: either remove and use g_file_info_get_icon()
or make it
load and return a GdkPixbuf
from the GIcon
.
TODO We'll have to investigate where xfdesktop_file_utils_get_file_icon()
is
being used and how.
xfdesktop_file_utils_launch_fallback()
Remove. We don't use a D-Bus fallback here as we rely on the D-Bus API of Thunar so hard that we can't provide any real functionality without it anyway.
xfdesktop-regular-file-icon.{c,h}
_XfdesktopRegularFileIconPrivate
Replace the ThunarVfsInfo *info
member with GFile
and GFileInfo
members.
xfdesktop_regular_file_icon_peek_pixbuf()
Need to rewrite this to make use of g_file_get_icon()
and tumbler. Maybe a new thumbnailer
or icon factory class like in thunar could be introduced.
xfdesktop_regular_file_icon_drag_job_error()
I don't think we need this any longer. Thunar will display errors for us.
xfdesktop_regular_file_icon_interactive_job_ask()
Remove.
xfdesktop_regular_file_icon_drag_job_finished()
Remove.
xfdesktop_regular_file_icon_do_drop_dest()
Rewrite the code based on GFileInfo
and GFile
. Use the Thunar D-Bus API
to launch executable files. Use a NULL check with g_file_get_parent()
to
replace the call to thunar_vfs_path_is_root()
. Instead of thunar_vfs_move_file()
,
thunar_vfs_copy_file()
etc. use the Thunar D-Bus API.
Instead of implement the Thunar D-Bus client manually we could rely on code generation.
xfdesktop_regular_file_icon_peek_tooltip()
What we need is to read the last modification time, the file type and a human readable
version of the size of the file. There are attributes for the modification time, the
file type and the file size in GFileInfo
. To humanize the file time we can use
something similar to what Thunar is doing,
for the file size we can use g_format_size_for_display()
.
xfdesktop_regular_file_can_write_parent()
Here we can simply rewrite the code to use GFile
and GFileInfo
.
xfdesktop_regular_file_icon_peek_info()
Change the return type to GFileInfo
.
xfdesktop_special_file_icon.{c,h}
_XfdesktopSpecialFileIconPrivate
TODO
xfdesktop_special_file_icon_finalize()
TODO
xfdesktop_special_file_icon_tfi_init()
TODO
xfdesktop_special_file_icon_get_allowed_drag_actions()
TODO: we no longer need the thunar-vfs workaround I think.
xfdesktop_special_file_icon_get_allowed_drop_actions()
TODO
xfdesktop_special_file_icon_drag_job_error()
TODO
xfdesktop_special_file_icon_interactive_job_ask()
TODO
xfdesktop_special_file_icon_drag_job_finished()
TODO
xfdesktop_special_file_icon_do_drop_dest()
TODO
xfdesktop_special_file_icon_peek_tooltip()
TODO
xfdesktop_special_file_icon_peek_info()
TODO
xfdesktop_special_file_icon_new()
TODO
xfdesktop-volume-icon.{c,h}
_XfdesktopVolumeIconPrivate
TODO
xfdesktop_volume_icon_finalize()
TODO
xfdesktop_volume_icon_tfi_init()
TODO
xfdesktop_volume_icon_volume_changed_cb()
TODO
xfdesktop_volume_icon_peek_pixbuf()
TODO
xfdesktop_volume_icon_peek_label()
TODO
xfdesktop_volume_icon_get_allowed_drag_actions()
TODO
xfdesktop_volume_icon_get_allowed_drop_actions()
TODO
xfdesktop_volume_icon_drag_job_error()
TODO
xfdesktop_volume_icon_interactive_job_ask()
TODO
xfdesktop_volume_icon_drag_job_finished()
TODO
xfdesktop_volume_icon_do_drop_dest()
TODO
xfdesktop_volume_icon_peek_tooltip()
TODO
xfdesktop_volume_icon_menu_toggle_mount()
TODO
xfdesktop_volume_icon_menu_eject()
TODO
xfdesktop_volume_icon_populate_context_menu()
TODO
xfdesktop_volume_icon_peek_info()
TODO
xfdesktop_volume_icon_update_info()
TODO
xfdesktop_volume_icon_activated()
TODO
xfdesktop_volume_icon_new()
TODO
xfdesktop_volume_icon_peek_volume()
TODO