This is an old revision of the document!
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()
Use g_file_get_path()
instead of thunar_vfs_path_dup_string()
.