xfdesktop: Port to GIO
References to ThunarVFS
main.c
Calls thunar_vfs_init()
and thunar_vfs_shutdown()
. Those calls can be removed.
xfce-desktop.c
xfce_desktop_setup_icon_view()
Use a GFile
instead of a ThunarVfsPath
when creating the file icon manager.
Pass the GFile
to the manager object instead of the ThunarVfsPath
.
xfdesktop-clipboard-manager.c
XfdesktopClipboardPasteRequest
Use a GFile
instead of the ThunarVfsPath
for the target_path
struct member.
xfdesktop_clipboard_manager_get_callback()
Make xfdesktop_file_utils_file_icon_list_to_path_list()
return a list of GFile
objects.
Reuse thunar_g_file_list_to_string()
instead of using thunar_vfs_path_list_to_string()
.
Use g_list_foreach()
and g_list_free()
instead of thunar_vfs_path_list_free()
.
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_menu_rename()
Use Thunar's Rename()
(or RenameFiles?
) D-Bus method. For this we only
need the GFile
of the icon, not the file info. Use xfdesktop_file_icon_get_file()
instead of xfdesktop_file_icon_peek_info()
.
xfdesktop_file_icon_manager_trash_files()
Again, use xfdesktop_file_icon_get_file()
instead of xfdesktop_file_icon_peek_info()
to obtain the URIs of the files supposed to be trashed.
xfdesktop_file_icon_menu_mime_app_executed()
Use GAppInfo
instead of ThunarVfsMimeApplication
and call g_app_info_launch()
instead of thunar_vfs_mime_handler_exec()
. Make sure to change the working directory
before and after this call (similar to how Thunar does it).
xfdesktop_menu_item_from_mime_handler()
Replace this method with a similar one based on GAppInfo
instead of
ThunarVfsMimeApplication
.
xfdesktop_file_icon_menu_open_folder()
We don't need the ThunarVfsInfo
here. Use xfdesktop_file_icon_get_file()
instead of xfdesktop_file_icon_peek_info()
. Make xfdesktop_file_utils_open_folder()
take a GFile
instead of a ThunarVfsInfo
.
xfdesktop_file_icon_menu_open_desktop()
See the previous function.
xfdesktop_file_icon_menu_other_app()
Again, we only need the GFile
, not the file info, in order to obtain the file URI.
Replace xfdesktop_file_icon_peek_info()
with xfdesktop_file_icon_get_file()
and ThunarVfsInfo
/ThunarVfsPath
with GFile
.
xfdesktop_file_icon_menu_properties()
Again, we only need the GFile
to obtain the URI. Don't use the no-D-Bus-fallback
properties dialog (what's it good for? Thunar should always be running for other
parts of xfdesktop to be working anyway).
xfdesktop_file_icon_create_directory_error()
Remove this function. We'll create directories through the Thunar D-Bus API. We'll probably have to add another D-Bus method for creating directories.
xfdesktop_file_icon_menu_create_launcher()
Use a GFile
instead of the ThunarVfsInfo
and ThunarVfsPath
to obtain
the file URI. Feed exo-desktop-item-edit with the URI instead of a local path.
The function launcher_dialog_item_button_clicked()
in
xfce4-panel/plugins/launcher/launcher-dialog.c has an example of how we can do
this.
xfdesktop_file_icon_menu_create_folder()
Create the directory using a new Thunar D-Bus method instead of implementing
this feature in xfdesktop internally. We'll have to create the D-Bus method
first. It should be called CreateFolder()
or CreateFile()
(with a
type parameter). Need to think about this a bit more.
xfdesktop_file_icon_create_file_error()
Remove this function.
xfdesktop_file_icon_interactive_job_ask()
Remove this function.
xfdesktop_file_icon_template_item_activated()
TODO: This needs more thought. Thunar implements the same functionality, so
maybe we can reuse its implementation through D-Bus. If not, then at least
the ThunarVFS stuff should be replaced with GFile
and GFileInfo
. The
calls to thunar_vfs_copy_file()
and thunar_vfs_create_file()
should
be replaced with Thunar D-Bus method calls.
info_compare()
If this is still needed after the other refactorings, make it compare
GFileInfo
objects instead of ThunarVfsInfo
structs.
xfdesktop_file_icon_menu_fill_template_menu()
Use GFile
, GFileEnumerator
and GFileInfo
instead of the corresponding
ThunarVFS structures. Maybe we can reuse some code from Thunar implementing
the same thing.
xfdesktop_file_icon_manager_populate_context_menu()
Use GFileInfo
instead of ThunarVfsInfo
and GFile
instead of ThunarVfsPath
.
Use GAppInfo
instead of ThunarVfsMimeDatabase
and
ThunarVfsMimeHandler
/ThunarVfsMimeApplication
.
xfdesktop_file_icon_manager_add_icon()
Use GFile
instead of ThunarVfsInfo
.
xfdesktop_file_icon_manager_add_regular_icon()
Use GFileInfo
to query the content type and GFile
instead of
ThunarVfsPath
to query the file path passed to XfceRc
.
xfdesktop_file_icon_manager_add_volume_icon()
Use GVolume
instead of ThunarVfsVolume
.
xfdesktop_file_icon_manager_vfs_monitor_cb()
Replace this with a monitor callback for GFileMonitor
.
xfdesktop_file_icon_manager_listdir_infos_ready_cb()
This function will have to be replaced with something similar because we cannot use the list dir job from ThunarVfsJob anymore.
xfdesktop_file_icon_manager_listdir_finished_cb()
This function will have to be replaced with something similar because we cannot use the list dir job from ThunarVfsJob anymore.
xfdesktop_file_icon_manager_listdir_error_cb()
This function will have to be replaced with something similar because we cannot use the list dir job from ThunarVfsJob anymore.
xfdesktop_file_icon_manager_load_desktop_folder()
Asynchronously load the folder using GFileEnumerator
.
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 ThunarVfsMimeDatabase
and the global ThunarVfsVolumeManager
.
The hash table needs to use either URIs or GFile
as well as the right hash
and equal functions for them. URIs are easier due to the availability of string
hash and equal functions, I guess.
We'll have to change the ThunarVfsInfo
parameter of xfdesktop_regular_file_icon_new()
to a GFile
or GFileInfo
. We can use g_file_new_for_path()
instead of
thunar_vfs_info_new_for_path()
here when creating the GFile
for the desktop folder,
if the folder
member isn't a GFile
already.
xfdesktop_file_icon_manager_fini()
The counterpart to the previous function. Same deal.
xfdesktop_file_icon_manager_drag_drop()
Use 'xfdesktop_file_icon_peek_file()
instead of …_peek_info()
. The file type
can then be determined with g_file_query_file_type()
.
Use g_file_get_child()
instead of thunar_vfs_path_relative()
and g_file_get_uri()
instead of thunar_vfs_path_dup_uri()
.
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?
xfdesktop_file_icon_manager_drag_data_get()
We need to replace xfdesktop_file_utils_file_icon_list_to_path_list()
with something
like xfdesktop_file_utils_file_icon_list_to_g_file_list()
and then call
g_file_list_to_string()
instead of thunar_vfs_path_list_to_string()
. Again,
Thunar can serve as an inspiration here:
xfdesktop_file_icon_manager_new()
Change the ThunarVfsPath
parameter to a GFile
. That's all.
_XfdesktopFileIconManagerPrivate
Change the ThunarVfsPath
folder member to a GFile
.
Replace the ThunarVfsMonitor
with a GVolumeMonitor
and remove
the ThunarVfsMonitorHandle
.
Remove the ThunarVfsJob *list_job
member.
xfdesktop_file_icon_manager_class_init()
Alter the “folder” property so that it becomes an object property
using the G_TYPE_FILE
object type.
xfdesktop_file_icon_manager_set_property()
Change the “folder” property code to reflect the changes to the property type made in the class_init function.
xfdesktop_file_icon_manager_get_property()
Same here, see above.
xfdesktop_file_icon_manager_finalize()
Use g_object_unref()
instead of thunar_vfs_path_unref()
.
xfdesktop_file_icon_manager_check_create_desktop_folder()
Replace the code with something similar based on GFile
, g_file_query_exists()
,
g_file_query_file_type()
and g_file_make_directory()
.
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_file_icon_list_to_path_list()
Replace with a function called xfdesktop_file_utils_file_icon_list_to_g_file_list()
that creates a list of GFile
objects.
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_file_utils_display_folder_cb()
Remove fallback code.
xfdesktop-regular-file-icon.{c,h}
_XfdesktopRegularFileIconPrivate
Replace the ThunarVfsInfo *info
member with GFile
and GFileInfo
members.
xfdesktop_regular_file_icon_peek_info()
Return a GFileInfo
.
xfdesktop_regular_file_icon_update_info()
TODO: Replace the ThunarVfsInfo
parameter with GFileInfo
. Maybe we also need
to add a GFile
parameter because GFileInfo
contains no path information.
xfdesktop_delete_regular_file_finished()
Remove.
xfdesktop_regular_file_icon_finalize()
Call g_object_unref()
instead of thunar_vfs_info_unref()
. Also release the
new GFile
member.
xfdesktop_regular_file_icon_tfi_init()
Update this to Thunarx 2. Need to set iface→get_file_info
, iface→get_filesystem_info
and iface→get_location
.
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_get_allowed_drag_actions()
Use GFileInfo
instead of ThunarVfsInfo
. Instead of ThunarVfsInfo
flags we have
to query GFileInfo
attributes to determine the readable/writable state of the target icon.
xfdesktop_regular_file_icon_get_allowed_drop_actions()
See the previous function.
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_delete_file_error()
Remove.
xfdesktop_delete_file_finished()
Remove.
xfdesktop_regular_file_icon_delete_file()
Instead of thunar_vfs_unlink_file()
, use the Thunar D-Bus API here. Fire
and forget.
xfdesktop_regular_file_icon_rename_file()
See previous function.
xfdesktop_regular_file_icon_peek_info()
Change the return type to GFileInfo
.
xfdesktop_regular_file_icon_update_info()
TODO: Check how and where this function is being used and what we can do in order
to replace the ThunarVfsInfo
parameter.
xfdesktop_regular_file_icon_new()
Add a GFile
parameter, update the code to use g_object_ref()
instead of
thunar_vfs_info_ref()
.
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