[Xfce4-commits] <xfdesktop:danielm/port-to-gio> - src/xfdesktop-regular-file-icon.c: - src/xfdesktop-regular-file-icon.h: * Porting Regular File Icon. (GIO and thunarx-2 stuff) - TODO.gio: * A TODO file to track what is missing/need some research.
Daniel Morales
noreply at xfce.org
Tue Feb 16 20:48:05 CET 2010
Updating branch refs/heads/danielm/port-to-gio
to c0fdce5122e8b78db25c075289fee27d92b5fad1 (commit)
from 7bfc596b0bed0d90688129da5287684a5d621938 (commit)
commit c0fdce5122e8b78db25c075289fee27d92b5fad1
Author: Daniel Morales <daniel at daniel.com.uy>
Date: Tue Feb 16 16:36:08 2010 -0200
- src/xfdesktop-regular-file-icon.c:
- src/xfdesktop-regular-file-icon.h:
* Porting Regular File Icon. (GIO and thunarx-2 stuff)
- TODO.gio:
* A TODO file to track what is missing/need some research.
TODO.gio | 23 +++
src/xfdesktop-regular-file-icon.c | 362 ++++++++++++++++++++-----------------
src/xfdesktop-regular-file-icon.h | 4 +-
3 files changed, 219 insertions(+), 170 deletions(-)
diff --git a/TODO.gio b/TODO.gio
new file mode 100644
index 0000000..39e59f1
--- /dev/null
+++ b/TODO.gio
@@ -0,0 +1,23 @@
+Port to GIO/gUDEV
+========================
+
+- src/xfdesktop-file-icon.c:
+ -xfdesktop_file_icon_activated():
+- src/xfdesktop-regular-file-icon.c:
+ - xfdesktop_regular_file_icon_do_drop_dest():
+
+ * We have to implement a replacement for thunar_vfs_info_execute().
+
+- src/xfdesktop-job.[ch]: Implement
+- src/xfdesktop-file-jobs.[ch]: Implement
+ * Maybe we can take a look and see how THUNAR does it :)
+
+- src/xfdesktop-regular-file-icon.c:
+ * "ask" signal to jobs (currently commented until we implement Jobs)
+
+- GCancelable {
+ * Maybe we can implement an GCancelable to use on:
+ - xfdesktop_regular_file_icon_new
+ - xfdesktop_regular_file_icon_update_gfile
+ - xfdesktop_regular_file_icon_rename_file
+}
diff --git a/src/xfdesktop-regular-file-icon.c b/src/xfdesktop-regular-file-icon.c
index ced25f9..8e53be7 100644
--- a/src/xfdesktop-regular-file-icon.c
+++ b/src/xfdesktop-regular-file-icon.c
@@ -49,6 +49,8 @@
#include <thunarx/thunarx.h>
#endif
+#include "xfdesktop-job.h"
+#include "xfdesktop-file-jobs.h"
#include "xfdesktop-file-utils.h"
#include "xfdesktop-common.h"
#include "xfdesktop-regular-file-icon.h"
@@ -61,7 +63,6 @@ struct _XfdesktopRegularFileIconPrivate
gchar *tooltip;
guint pix_opacity;
gint cur_pix_size;
- ThunarVfsInfo *info;
GdkScreen *gscreen;
};
@@ -77,10 +78,11 @@ static gboolean xfdesktop_regular_file_icon_do_drop_dest(XfdesktopIcon *icon,
XfdesktopIcon *src_icon,
GdkDragAction action);
-static G_CONST_RETURN ThunarVfsInfo *xfdesktop_regular_file_icon_peek_info(XfdesktopFileIcon *icon);
-static void xfdesktop_regular_file_icon_update_info(XfdesktopFileIcon *icon,
- ThunarVfsInfo *info);
-static gboolean xfdesktop_regular_file_can_write_parent(XfdesktopFileIcon *icon);
+static void xfdesktop_regular_file_icon_update_gfile(XfdesktopFileIcon *icon,
+ GFile *gfile);
+
+static gboolean xfdesktop_regular_file_can_rename_file(XfdesktopFileIcon *icon);
+static gboolean xfdesktop_regular_file_can_delete_file(XfdesktopFileIcon *icon);
static gboolean xfdesktop_regular_file_icon_rename_file(XfdesktopFileIcon *icon,
const gchar *new_name);
static gboolean xfdesktop_regular_file_icon_delete_file(XfdesktopFileIcon *icon);
@@ -89,7 +91,7 @@ static gboolean xfdesktop_regular_file_icon_delete_file(XfdesktopFileIcon *icon)
static void xfdesktop_regular_file_icon_tfi_init(ThunarxFileInfoIface *iface);
#endif
-static void xfdesktop_delete_file_finished(ThunarVfsJob *job,
+static void xfdesktop_delete_file_finished(XfdesktopJob *job,
gpointer user_data);
static inline void xfdesktop_regular_file_icon_invalidate_pixbuf(XfdesktopRegularFileIcon *icon);
@@ -125,12 +127,12 @@ xfdesktop_regular_file_icon_class_init(XfdesktopRegularFileIconClass *klass)
icon_class->get_allowed_drag_actions = xfdesktop_regular_file_icon_get_allowed_drag_actions;
icon_class->get_allowed_drop_actions = xfdesktop_regular_file_icon_get_allowed_drop_actions;
icon_class->do_drop_dest = xfdesktop_regular_file_icon_do_drop_dest;
-
- file_icon_class->peek_info = xfdesktop_regular_file_icon_peek_info;
- file_icon_class->update_info = xfdesktop_regular_file_icon_update_info;
- file_icon_class->can_rename_file = xfdesktop_regular_file_can_write_parent;
+
+ file_icon_class->update_gfile = xfdesktop_regular_file_icon_update_gfile;
+
+ file_icon_class->can_rename_file = xfdesktop_regular_file_can_rename_file;
file_icon_class->rename_file = xfdesktop_regular_file_icon_rename_file;
- file_icon_class->can_delete_file = xfdesktop_regular_file_can_write_parent;
+ file_icon_class->can_delete_file = xfdesktop_regular_file_can_delete_file;
file_icon_class->delete_file = xfdesktop_regular_file_icon_delete_file;
}
@@ -156,9 +158,6 @@ xfdesktop_regular_file_icon_finalize(GObject *obj)
if(icon->priv->pix)
g_object_unref(G_OBJECT(icon->priv->pix));
- if(icon->priv->info)
- thunar_vfs_info_unref(icon->priv->info);
-
if(icon->priv->tooltip)
g_free(icon->priv->tooltip);
@@ -176,7 +175,9 @@ xfdesktop_regular_file_icon_tfi_init(ThunarxFileInfoIface *iface)
iface->get_mime_type = xfdesktop_thunarx_file_info_get_mime_type;
iface->has_mime_type = xfdesktop_thunarx_file_info_has_mime_type;
iface->is_directory = xfdesktop_thunarx_file_info_is_directory;
- iface->get_vfs_info = xfdesktop_thunarx_file_info_get_vfs_info;
+ iface->get_file_info = xfdesktop_thunarx_file_info_get_file_info;
+ iface->get_filesystem_info = xfdesktop_thunarx_file_info_get_filesystem_info;
+ iface->get_location = xfdesktop_thunarx_file_info_get_location;
}
#endif
@@ -194,22 +195,26 @@ static GdkPixbuf *
xfdesktop_regular_file_icon_peek_pixbuf(XfdesktopIcon *icon,
gint size)
{
- XfdesktopRegularFileIcon *file_icon = XFDESKTOP_REGULAR_FILE_ICON(icon);
- const gchar *icon_name = NULL;
+ XfdesktopFileIcon *file_icon = XFDESKTOP_FILE_ICON(icon);
+ XfdesktopRegularFileIcon *regular_file_icon = XFDESKTOP_REGULAR_FILE_ICON(icon);
+ gchar *icon_name = NULL;
GdkPixbuf *emblem_pix = NULL;
+
+ g_return_val_if_fail(XFDESKTOP_IS_FILE_ICON(file_icon), NULL);
+ g_return_val_if_fail(G_IS_FILE(file_icon->gfile), NULL);
+
+ if(size != regular_file_icon->priv->cur_pix_size)
+ xfdesktop_regular_file_icon_invalidate_pixbuf(regular_file_icon);
- if(size != file_icon->priv->cur_pix_size)
- xfdesktop_regular_file_icon_invalidate_pixbuf(file_icon);
-
- if(!file_icon->priv->pix) {
+ if(!regular_file_icon->priv->pix) {
/* check the application's binary name like thunar does (bug 1956) */
- if(!file_icon->priv->pix
- && file_icon->priv->info->flags & THUNAR_VFS_FILE_FLAGS_EXECUTABLE)
+ if(!regular_file_icon->priv->pix
+ && xfdesktop_file_utils_is_executable(file_icon))
{
- icon_name = thunar_vfs_path_get_name(file_icon->priv->info->path);
+ icon_name = g_file_get_basename(file_icon->gfile);
}
- if(file_icon->priv->info->flags & THUNAR_VFS_FILE_FLAGS_SYMLINK) {
+ if(xfdesktop_file_utils_is_symlink(file_icon)) {
GtkIconTheme *itheme = gtk_icon_theme_get_default();
gint sym_pix_size = size * 2 / 3;
@@ -230,53 +235,64 @@ xfdesktop_regular_file_icon_peek_pixbuf(XfdesktopIcon *icon,
}
}
- file_icon->priv->pix = xfdesktop_file_utils_get_file_icon(icon_name,
- file_icon->priv->info,
+ regular_file_icon->priv->pix = xfdesktop_file_utils_get_file_icon(icon_name,
+ file_icon,
size,
emblem_pix,
- file_icon->priv->pix_opacity);
+ regular_file_icon->priv->pix_opacity);
if(emblem_pix)
g_object_unref(G_OBJECT(emblem_pix));
-
- file_icon->priv->cur_pix_size = size;
+
+ if(icon_name)
+ g_free(icon_name);
+
+ regular_file_icon->priv->cur_pix_size = size;
}
-
- return file_icon->priv->pix;
+
+ return regular_file_icon->priv->pix;
}
static G_CONST_RETURN gchar *
xfdesktop_regular_file_icon_peek_label(XfdesktopIcon *icon)
{
- g_return_val_if_fail(XFDESKTOP_IS_REGULAR_FILE_ICON(icon), NULL);
- return XFDESKTOP_REGULAR_FILE_ICON(icon)->priv->info->display_name;
+ XfdesktopFileIcon *file_icon = XFDESKTOP_FILE_ICON(icon);
+
+ g_return_val_if_fail(XFDESKTOP_IS_FILE_ICON(file_icon), NULL);
+ g_return_val_if_fail(G_IS_FILE_INFO(file_icon->info), NULL);
+
+ return g_file_info_get_display_name(file_icon->info);
}
static GdkDragAction
xfdesktop_regular_file_icon_get_allowed_drag_actions(XfdesktopIcon *icon)
{
- const ThunarVfsInfo *info = xfdesktop_file_icon_peek_info(XFDESKTOP_FILE_ICON(icon));
+ XfdesktopFileIcon *file_icon = XFDESKTOP_FILE_ICON(icon);
GdkDragAction actions = GDK_ACTION_LINK; /* we can always link */
-
- if(!info)
- return 0;
-
- if(info->flags & THUNAR_VFS_FILE_FLAGS_READABLE) {
- ThunarVfsPath *parent_path;
- ThunarVfsInfo *parent_info;
+
+ g_return_val_if_fail(XFDESKTOP_IS_FILE_ICON(file_icon), 0);
+ g_return_val_if_fail(G_IS_FILE(file_icon->gfile), 0);
+
+ if(xfdesktop_file_utils_is_readable(file_icon)) {
+ GFile *parent_path;
+ GFileInfo *parent_info;
actions |= GDK_ACTION_COPY;
/* we can only move if the parent is writable */
- parent_path = thunar_vfs_path_get_parent(info->path);
- parent_info = thunar_vfs_info_new_for_path(parent_path, NULL);
- if(parent_info) {
- if(parent_info->flags & THUNAR_VFS_FILE_FLAGS_WRITABLE)
- actions |= GDK_ACTION_MOVE;
- thunar_vfs_info_unref(parent_info);
+ parent_path = g_file_get_parent(file_icon->gfile);
+ if(parent_path) {
+ parent_info = xfdesktop_file_utils_get_file_info(parent_path, NULL);
+ if(parent_info) {
+ if(g_file_info_get_attribute_boolean(parent_info,
+ G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE)) {
+ actions |= GDK_ACTION_MOVE;
+ }
+ g_object_unref(parent_info);
+ }
+
+ g_object_unref(parent_path);
}
-
- /* |parent_path| is owned by |info| */
}
return actions;
@@ -285,17 +301,16 @@ xfdesktop_regular_file_icon_get_allowed_drag_actions(XfdesktopIcon *icon)
static GdkDragAction
xfdesktop_regular_file_icon_get_allowed_drop_actions(XfdesktopIcon *icon)
{
- const ThunarVfsInfo *info = xfdesktop_file_icon_peek_info(XFDESKTOP_FILE_ICON(icon));
-
- if(!info)
- return 0;
-
+ XfdesktopFileIcon *file_icon = XFDESKTOP_FILE_ICON(icon);
+
+ g_return_val_if_fail(XFDESKTOP_IS_FILE_ICON(file_icon), 0);
+
/* if it's executable we can 'copy'. if it's a folder we can do anything
* if it's writable. */
- if(info->flags & THUNAR_VFS_FILE_FLAGS_EXECUTABLE)
+ if(xfdesktop_file_utils_is_executable(file_icon))
return GDK_ACTION_COPY;
- else if(THUNAR_VFS_FILE_TYPE_DIRECTORY == info->type
- && info->flags & THUNAR_VFS_FILE_FLAGS_WRITABLE)
+ else if(xfdesktop_file_utils_is_directory(file_icon)
+ && xfdesktop_file_utils_is_writable(file_icon))
{
return GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK;
} else
@@ -303,31 +318,32 @@ xfdesktop_regular_file_icon_get_allowed_drop_actions(XfdesktopIcon *icon)
}
static void
-xfdesktop_regular_file_icon_drag_job_error(ThunarVfsJob *job,
+xfdesktop_regular_file_icon_drag_job_error(XfdesktopJob *job,
GError *error,
gpointer user_data)
{
- XfdesktopRegularFileIcon *regular_file_icon = XFDESKTOP_REGULAR_FILE_ICON(user_data);
+ XfdesktopFileIcon *file_icon = XFDESKTOP_FILE_ICON(user_data);
XfdesktopFileIcon *src_file_icon = g_object_get_data(G_OBJECT(job),
"--xfdesktop-src-file-icon");
XfdesktopFileUtilsFileop fileop = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(job),
"--xfdesktop-file-icon-action"));
-
- g_return_if_fail(regular_file_icon);
+
+ g_return_if_fail(file_icon);
if(!src_file_icon)
return;
xfdesktop_file_utils_handle_fileop_error(NULL,
- xfdesktop_file_icon_peek_info(src_file_icon),
- regular_file_icon->priv->info, fileop,
+ src_file_icon,
+ file_icon, fileop,
error);
}
-static ThunarVfsInteractiveJobResponse
-xfdesktop_regular_file_icon_interactive_job_ask(ThunarVfsJob *job,
+#if 0
+static XfdesktopJobResponse
+xfdesktop_regular_file_icon_interactive_job_ask(XfdesktopJob *job,
const gchar *message,
- ThunarVfsInteractiveJobResponse choices,
+ XfdesktopJobResponse choices,
gpointer user_data)
{
GtkWidget *icon_view = xfdesktop_icon_peek_icon_view(XFDESKTOP_ICON(user_data));
@@ -335,9 +351,10 @@ xfdesktop_regular_file_icon_interactive_job_ask(ThunarVfsJob *job,
return xfdesktop_file_utils_interactive_job_ask(GTK_WINDOW(toplevel),
message, choices);
}
+#endif
static void
-xfdesktop_regular_file_icon_drag_job_finished(ThunarVfsJob *job,
+xfdesktop_regular_file_icon_drag_job_finished(XfdesktopJob *job,
gpointer user_data)
{
XfdesktopRegularFileIcon *regular_file_icon = XFDESKTOP_REGULAR_FILE_ICON(user_data);
@@ -345,10 +362,10 @@ xfdesktop_regular_file_icon_drag_job_finished(ThunarVfsJob *job,
"--xfdesktop-src-file-icon");
if(!xfdesktop_file_icon_remove_active_job(XFDESKTOP_FILE_ICON(regular_file_icon), job))
- g_critical("ThunarVfsJob 0x%p not found in active jobs list", job);
+ g_critical("XfdesktopJob 0x%p not found in active jobs list", job);
if(!xfdesktop_file_icon_remove_active_job(src_file_icon, job))
- g_critical("ThunarVfsJob 0x%p not found in active jobs list", job);
+ g_critical("XfdesktopJob 0x%p not found in active jobs list", job);
g_object_unref(G_OBJECT(job));
@@ -361,9 +378,8 @@ xfdesktop_regular_file_icon_do_drop_dest(XfdesktopIcon *icon,
XfdesktopIcon *src_icon,
GdkDragAction action)
{
- XfdesktopRegularFileIcon *regular_file_icon = XFDESKTOP_REGULAR_FILE_ICON(icon);
+ XfdesktopFileIcon *regular_file_icon = XFDESKTOP_FILE_ICON(icon);
XfdesktopFileIcon *src_file_icon = XFDESKTOP_FILE_ICON(src_icon);
- const ThunarVfsInfo *src_info;
DBG("entering");
@@ -371,11 +387,11 @@ xfdesktop_regular_file_icon_do_drop_dest(XfdesktopIcon *icon,
g_return_val_if_fail(xfdesktop_regular_file_icon_get_allowed_drop_actions(icon) != 0,
FALSE);
- src_info = xfdesktop_file_icon_peek_info(src_file_icon);
- if(!src_info)
- return FALSE;
+ g_return_val_if_fail(G_IS_FILE(regular_file_icon->gfile), FALSE);
+ g_return_val_if_fail(G_IS_FILE(src_file_icon->gfile), FALSE);
- if(regular_file_icon->priv->info->flags & THUNAR_VFS_FILE_FLAGS_EXECUTABLE) {
+ if(xfdesktop_file_utils_is_executable(regular_file_icon)) {
+#if 0
GList *path_list = g_list_prepend(NULL, src_info->path);
GError *error = NULL;
gboolean succeeded;
@@ -398,46 +414,48 @@ xfdesktop_regular_file_icon_do_drop_dest(XfdesktopIcon *icon,
return FALSE;
}
-
+#endif
return TRUE;
} else {
- ThunarVfsJob *job = NULL;
- const gchar *name;
- ThunarVfsPath *dest_path;
+ XfdesktopJob *job = NULL;
+ gchar *name;
+ GFile *dest_path;
- if(thunar_vfs_path_is_root(src_info->path))
+ if(xfdesktop_file_utils_is_root(src_file_icon))
return FALSE;
- name = thunar_vfs_path_get_name(src_info->path);
+ name = g_file_get_basename(src_file_icon->gfile);
if(!name)
return FALSE;
- dest_path = thunar_vfs_path_relative(regular_file_icon->priv->info->path,
- name);
+ dest_path = g_file_resolve_relative_path(regular_file_icon->gfile,
+ name);
+ g_free(name);
+
if(!dest_path)
return FALSE;
switch(action) {
case GDK_ACTION_MOVE:
DBG("doing move");
- job = thunar_vfs_move_file(src_info->path, dest_path, NULL);
+ job = xfdesktop_file_jobs_move_file(src_file_icon->gfile, dest_path);
break;
case GDK_ACTION_COPY:
DBG("doing copy");
- job = thunar_vfs_copy_file(src_info->path, dest_path, NULL);
+ job = xfdesktop_file_jobs_copy_file(src_file_icon->gfile, dest_path);
break;
case GDK_ACTION_LINK:
DBG("doing link");
- job = thunar_vfs_link_file(src_info->path, dest_path, NULL);
+ job = xfdesktop_file_jobs_link_file(src_file_icon->gfile, dest_path);
break;
default:
g_warning("Unsupported drag action: %d", action);
}
- thunar_vfs_path_unref(dest_path);
+ g_object_unref(dest_path);
if(job) {
DBG("got job, action initiated");
@@ -464,9 +482,11 @@ xfdesktop_regular_file_icon_do_drop_dest(XfdesktopIcon *icon,
g_signal_connect(G_OBJECT(job), "error",
G_CALLBACK(xfdesktop_regular_file_icon_drag_job_error),
regular_file_icon);
+#if 0
g_signal_connect(G_OBJECT(job), "ask",
G_CALLBACK(xfdesktop_regular_file_icon_interactive_job_ask),
regular_file_icon);
+#endif
g_signal_connect(G_OBJECT(job), "finished",
G_CALLBACK(xfdesktop_regular_file_icon_drag_job_finished),
regular_file_icon);
@@ -482,66 +502,59 @@ xfdesktop_regular_file_icon_do_drop_dest(XfdesktopIcon *icon,
static G_CONST_RETURN gchar *
xfdesktop_regular_file_icon_peek_tooltip(XfdesktopIcon *icon)
{
+ XfdesktopFileIcon *file_icon = XFDESKTOP_FILE_ICON(icon);
XfdesktopRegularFileIcon *regular_file_icon = XFDESKTOP_REGULAR_FILE_ICON(icon);
- if(!regular_file_icon->priv->info)
- return NULL; /* FIXME: implement something here */
-
if(!regular_file_icon->priv->tooltip) {
- gchar mod[64], *kind, sizebuf[64], *size;
- struct tm *tm = localtime(®ular_file_icon->priv->info->mtime);
-
- strftime(mod, 64, "%Y-%m-%d %H:%M:%S", tm);
- kind = xfdesktop_file_utils_get_file_kind(regular_file_icon->priv->info, NULL);
- thunar_vfs_humanize_size(regular_file_icon->priv->info->size, sizebuf, 64);
- size = g_strdup_printf(_("%s (%" G_GINT64_FORMAT " Bytes)"), sizebuf,
- (gint64)regular_file_icon->priv->info->size);
+ guint64 fSize;
+ gchar *mod, *kind, *size, *buffSize;
+
+ kind = xfdesktop_file_utils_get_file_kind(file_icon, NULL);
+
+ mod = xfdesktop_file_utils_get_file_date(file_icon,
+ G_FILE_ATTRIBUTE_TIME_MODIFIED);
+
+ fSize = xfdesktop_file_utils_get_file_size(file_icon,
+ &buffSize);
+
+ size = g_strdup_printf(_("%s (%" G_GINT64_FORMAT " Bytes)"),
+ buffSize,
+ (gint64)fSize);
regular_file_icon->priv->tooltip = g_strdup_printf(_("Kind: %s\nModified:%s\nSize: %s"),
kind, mod, size);
g_free(kind);
g_free(size);
+ g_free(mod);
+ g_free(buffSize);
}
return regular_file_icon->priv->tooltip;
}
static gboolean
-xfdesktop_regular_file_can_write_parent(XfdesktopFileIcon *icon)
+xfdesktop_regular_file_can_rename_file(XfdesktopFileIcon *icon)
{
- XfdesktopRegularFileIcon *file_icon = XFDESKTOP_REGULAR_FILE_ICON(icon);
- ThunarVfsPath *parent;
- ThunarVfsInfo *parent_info;
- gboolean writable;
-
- g_return_val_if_fail(file_icon && file_icon->priv->info, FALSE);
-
- parent = thunar_vfs_path_get_parent(file_icon->priv->info->path);
- if(!parent)
- return FALSE;
-
- parent_info = thunar_vfs_info_new_for_path(parent, NULL);
- if(!parent_info)
- return FALSE;
-
- writable = (parent_info->flags & THUNAR_VFS_FILE_FLAGS_WRITABLE);
- thunar_vfs_info_unref(parent_info);
-
- return writable;
+ return xfdesktop_file_utils_can_rename(icon);
+}
+static gboolean
+xfdesktop_regular_file_can_delete_file(XfdesktopFileIcon *icon)
+{
+ return xfdesktop_file_utils_can_delete(icon);
}
static void
-xfdesktop_delete_file_error(ThunarVfsJob *job,
+xfdesktop_delete_file_error(XfdesktopJob *job,
GError *error,
gpointer user_data)
{
- XfdesktopRegularFileIcon *icon = XFDESKTOP_REGULAR_FILE_ICON(user_data);
+ XfdesktopFileIcon *icon = XFDESKTOP_FILE_ICON(user_data);
GtkWidget *icon_view = xfdesktop_icon_peek_icon_view(XFDESKTOP_ICON(icon));
GtkWidget *toplevel = gtk_widget_get_toplevel(icon_view);
gchar *primary = g_markup_printf_escaped("There was an error deleting \"%s\":",
- icon->priv->info->display_name);
+ g_file_info_get_display_name(icon->info));
xfce_message_dialog(GTK_WINDOW(toplevel), _("Error"),
GTK_STOCK_DIALOG_ERROR, primary,
@@ -552,13 +565,13 @@ xfdesktop_delete_file_error(ThunarVfsJob *job,
}
static void
-xfdesktop_delete_file_finished(ThunarVfsJob *job,
+xfdesktop_delete_file_finished(XfdesktopJob *job,
gpointer user_data)
{
- XfdesktopRegularFileIcon *icon = XFDESKTOP_REGULAR_FILE_ICON(user_data);
+ XfdesktopFileIcon *icon = XFDESKTOP_FILE_ICON(user_data);
if(!xfdesktop_file_icon_remove_active_job(XFDESKTOP_FILE_ICON(icon), job))
- g_critical("ThunarVfsJob 0x%p not found in active jobs list", job);
+ g_critical("XfdesktopJob 0x%p not found in active jobs list", job);
g_object_unref(G_OBJECT(job));
g_object_unref(G_OBJECT(icon));
@@ -567,17 +580,18 @@ xfdesktop_delete_file_finished(ThunarVfsJob *job,
static gboolean
xfdesktop_regular_file_icon_delete_file(XfdesktopFileIcon *icon)
{
- XfdesktopRegularFileIcon *regular_file_icon = XFDESKTOP_REGULAR_FILE_ICON(icon);
- ThunarVfsJob *job;
-
- job = thunar_vfs_unlink_file(regular_file_icon->priv->info->path, NULL);
-
+ XfdesktopFileIcon *file_icon = XFDESKTOP_FILE_ICON(icon);
+ XfdesktopJob *job;
+
+ g_return_val_if_fail(G_IS_FILE(file_icon->gfile), FALSE);
+
+ job = xfdesktop_file_jobs_unlink_file(file_icon->gfile);
+
if(job) {
g_object_set_data(G_OBJECT(job), "--xfdesktop-file-icon-callback",
G_CALLBACK(xfdesktop_delete_file_finished));
g_object_set_data(G_OBJECT(job), "--xfdesktop-file-icon-data", icon);
- xfdesktop_file_icon_add_active_job(XFDESKTOP_FILE_ICON(regular_file_icon),
- job);
+ xfdesktop_file_icon_add_active_job(file_icon, job);
g_signal_connect(G_OBJECT(job), "error",
G_CALLBACK(xfdesktop_delete_file_error), icon);
@@ -595,17 +609,24 @@ static gboolean
xfdesktop_regular_file_icon_rename_file(XfdesktopFileIcon *icon,
const gchar *new_name)
{
- XfdesktopRegularFileIcon *regular_file_icon = XFDESKTOP_REGULAR_FILE_ICON(icon);
+ XfdesktopFileIcon *file_icon = XFDESKTOP_FILE_ICON(icon);
GError *error = NULL;
+ GFile *new_gfile;
g_return_val_if_fail(XFDESKTOP_IS_REGULAR_FILE_ICON(icon) && new_name
&& *new_name, FALSE);
-
- if(!thunar_vfs_info_rename(regular_file_icon->priv->info, new_name, &error)) {
+
+ g_return_val_if_fail(G_IS_FILE(file_icon->gfile), FALSE);
+ g_return_val_if_fail(G_IS_FILE_INFO(file_icon->info), FALSE);
+
+ new_gfile = g_file_set_display_name(file_icon->gfile, new_name, NULL, &error);
+
+ if(new_gfile == NULL)
+ {
GtkWidget *icon_view = xfdesktop_icon_peek_icon_view(XFDESKTOP_ICON(icon));
GtkWidget *toplevel = gtk_widget_get_toplevel(icon_view);
gchar *primary = g_markup_printf_escaped(_("Failed to rename \"%s\" to \"%s\":"),
- regular_file_icon->priv->info->display_name,
+ g_file_info_get_display_name(file_icon->info),
new_name);
xfce_message_dialog(GTK_WINDOW(toplevel), _("Error"),
GTK_STOCK_DIALOG_ERROR,
@@ -616,52 +637,57 @@ xfdesktop_regular_file_icon_rename_file(XfdesktopFileIcon *icon,
return FALSE;
}
-
- return TRUE;
-}
-static G_CONST_RETURN ThunarVfsInfo *
-xfdesktop_regular_file_icon_peek_info(XfdesktopFileIcon *icon)
-{
- g_return_val_if_fail(XFDESKTOP_IS_REGULAR_FILE_ICON(icon), NULL);
- return XFDESKTOP_REGULAR_FILE_ICON(icon)->priv->info;
+ /* Update references */
+ g_object_unref (file_icon->gfile);
+ g_object_unref (file_icon->info);
+
+ file_icon->gfile = new_gfile;
+ file_icon->info= xfdesktop_file_utils_get_file_info(file_icon->gfile, NULL);
+
+ return TRUE;
}
static void
-xfdesktop_regular_file_icon_update_info(XfdesktopFileIcon *icon,
- ThunarVfsInfo *info)
+xfdesktop_regular_file_icon_update_gfile(XfdesktopFileIcon *icon,
+ GFile *gfile)
{
- XfdesktopRegularFileIcon *regular_file_icon = XFDESKTOP_REGULAR_FILE_ICON(icon);
- gboolean label_changed = TRUE;
-
- g_return_if_fail(XFDESKTOP_IS_REGULAR_FILE_ICON(icon) && info);
-
- if(!strcmp(regular_file_icon->priv->info->display_name, info->display_name))
- label_changed = FALSE;
-
- thunar_vfs_info_unref(regular_file_icon->priv->info);
- regular_file_icon->priv->info = thunar_vfs_info_ref(info);
-
- if(label_changed)
- xfdesktop_icon_label_changed(XFDESKTOP_ICON(icon));
-
- /* not really easy to check if this changed or not, so just invalidate it */
- xfdesktop_regular_file_icon_invalidate_pixbuf(regular_file_icon);
- xfdesktop_icon_pixbuf_changed(XFDESKTOP_ICON(icon));
-}
+ g_return_if_fail(XFDESKTOP_IS_FILE_ICON(icon) && G_IS_FILE(gfile));
+
+ if(icon->gfile)
+ g_object_unref(icon->gfile);
+ if(icon->info)
+ g_object_unref(icon->info);
+ icon->gfile = gfile;
+ icon->info= xfdesktop_file_utils_get_file_info(gfile, NULL);
+}
/* public API */
XfdesktopRegularFileIcon *
-xfdesktop_regular_file_icon_new(ThunarVfsInfo *info,
+xfdesktop_regular_file_icon_new(GFile *gfile,
GdkScreen *screen)
{
- XfdesktopRegularFileIcon *regular_file_icon = g_object_new(XFDESKTOP_TYPE_REGULAR_FILE_ICON, NULL);
- regular_file_icon->priv->info = thunar_vfs_info_ref(info);
+ XfdesktopRegularFileIcon *regular_file_icon;
+ XfdesktopFileIcon *file_icon;
+
+ g_return_val_if_fail(G_IS_FILE(gfile), NULL);
+
+ regular_file_icon = g_object_new(XFDESKTOP_TYPE_REGULAR_FILE_ICON, NULL);
+ file_icon = XFDESKTOP_FILE_ICON(regular_file_icon);
+
regular_file_icon->priv->gscreen = screen;
-
+ file_icon->gfile = g_object_ref(gfile);
+ file_icon->info = xfdesktop_file_utils_get_file_info(file_icon->gfile, NULL);
+
+ if(!file_icon->info) {
+ g_object_unref(regular_file_icon);
+ return NULL;
+ }
+
+
g_signal_connect_swapped(G_OBJECT(gtk_icon_theme_get_for_screen(screen)),
"changed",
G_CALLBACK(xfdesktop_regular_file_icon_invalidate_pixbuf),
diff --git a/src/xfdesktop-regular-file-icon.h b/src/xfdesktop-regular-file-icon.h
index 6014627..3ebb866 100644
--- a/src/xfdesktop-regular-file-icon.h
+++ b/src/xfdesktop-regular-file-icon.h
@@ -23,7 +23,7 @@
#include <glib-object.h>
-#include <thunar-vfs/thunar-vfs.h>
+#include <gio/gio.h>
#include "xfdesktop-file-icon.h"
@@ -52,7 +52,7 @@ struct _XfdesktopRegularFileIconClass
GType xfdesktop_regular_file_icon_get_type(void) G_GNUC_CONST;
-XfdesktopRegularFileIcon *xfdesktop_regular_file_icon_new(ThunarVfsInfo *info,
+XfdesktopRegularFileIcon *xfdesktop_regular_file_icon_new(GFile *gfile,
GdkScreen *screen);
void xfdesktop_regular_file_icon_set_pixbuf_opacity(XfdesktopRegularFileIcon *icon,
More information about the Xfce4-commits
mailing list