[Xfce4-commits] <xfdesktop:master> Port xfdesktop to Thunarx 2. XfceVolumeIcon is somewhat broken.
Jannis Pohlmann
noreply at xfce.org
Tue Nov 2 01:14:05 CET 2010
Updating branch refs/heads/master
to f03b85e151321baaacb3a4c5a1ada0fd3e08a78a (commit)
from 6b07a68709e7f5dd1e2827a3b14d937c337a0919 (commit)
commit f03b85e151321baaacb3a4c5a1ada0fd3e08a78a
Author: Jannis Pohlmann <jannis at xfce.org>
Date: Sun Oct 17 18:32:16 2010 +0200
Port xfdesktop to Thunarx 2. XfceVolumeIcon is somewhat broken.
common/xfdesktop-common.h | 1 +
configure.ac.in | 9 +++---
src/xfdesktop-file-icon-manager.c | 1 +
src/xfdesktop-file-icon.c | 46 +++++++++++++++++++++++++++++++
src/xfdesktop-file-icon.h | 8 +++++
src/xfdesktop-file-utils.c | 25 ++++++++++++++---
src/xfdesktop-file-utils.h | 5 +++-
src/xfdesktop-regular-file-icon.c | 45 +++++++++++++++++++++++++-----
src/xfdesktop-special-file-icon.c | 55 ++++++++++++++++++++++++++++++++++++-
src/xfdesktop-volume-icon.c | 37 ++++++++++++++++++++++++-
10 files changed, 213 insertions(+), 19 deletions(-)
diff --git a/common/xfdesktop-common.h b/common/xfdesktop-common.h
index 9e220d5..58a6f45 100644
--- a/common/xfdesktop-common.h
+++ b/common/xfdesktop-common.h
@@ -2,6 +2,7 @@
* xfdesktop - xfce4's desktop manager
*
* Copyright (c) 2004 Brian Tarricone, <bjt23 at cornell.edu>
+ * Copyright (c) 2010 Jannis Pohlmann, <jannis at xfce.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/configure.ac.in b/configure.ac.in
index 309e09a..6a3ba6d 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -20,7 +20,8 @@ m4_define([libxfce4ui_minimum_version], [4.7.0])
m4_define([xfce_minimum_version], [4.6.0])
m4_define([garcon_minimum_version], [0.1.1])
m4_define([exo_minimum_version], [0.3.100])
-m4_define([thunar_minimum_version], [1.0.0])
+m4_define([thunar_vfs_minimum_version], [1.0.0])
+m4_define([thunar_minimum_version], [1.1.0])
m4_define([dbus_minimum_version], [0.34])
m4_define([wnck_minimum_version], [2.12])
m4_define([intltool_minimum_version], [0.31])
@@ -116,7 +117,7 @@ fi
if test "x$enable_desktop_icons" = "xyes" -a "x$enable_file_icons" = "xyes"; then
dnl here i shall abuse the XDT_CHECK_PACKAGE macro
XDT_CHECK_PACKAGE([THUNAR_VFS], [thunar-vfs-1],
- [thunar_minimum_version], [], [
+ [thunar_vfs_minimum_version], [], [
echo "*** Optional package thunar-vfs-1 was either not found on your system"
echo "*** or is too old. Please install or upgrade to at least version"
echo "*** thunar_minimum_version, or adjust the PKG_CONFIG_PATH environment variable"
@@ -148,7 +149,7 @@ AM_CONDITIONAL([ENABLE_FILE_ICONS], [test "x$enable_file_icons" = "xyes"])
dnl i'd rather have these two only checked conditionally, but this macro also
dnl calls AM_CONDITIONAL(), which cannot be in an 'if' block
-XDT_CHECK_OPTIONAL_PACKAGE([THUNARX], [thunarx-1], [thunar_minimum_version],
+XDT_CHECK_OPTIONAL_PACKAGE([THUNARX], [thunarx-2], [thunar_minimum_version],
[thunarx],
[Thunar's extension mechanism, to add external features to the desktop icon implementation])
XDT_CHECK_OPTIONAL_PACKAGE([LIBEXO], [exo-1], [exo_minimum_version], [exo],
@@ -191,7 +192,7 @@ AC_ARG_ENABLE([desktop-menu-dir-monitor],
if test "x$want_thunar_vfs" = "xyes" -a "x$build_desktop_menu" = "xyes"; then
if test "x$already_have_thunar_vfs" != "xyes"; then
XDT_CHECK_PACKAGE([THUNAR_VFS], [thunar-vfs-1],
- [thunar_minimum_version], [have_thunar_vfs=yes], [
+ [thunar_vfs_minimum_version], [have_thunar_vfs=yes], [
echo "*** Optional package thunar-vfs-1 was either not found on your system"
echo "*** or is too old. Please install or upgrade to at least version"
echo "*** thunar_minimum_version, or adjust the PKG_CONFIG_PATH environment variable"
diff --git a/src/xfdesktop-file-icon-manager.c b/src/xfdesktop-file-icon-manager.c
index 472367e..4e3216f 100644
--- a/src/xfdesktop-file-icon-manager.c
+++ b/src/xfdesktop-file-icon-manager.c
@@ -3,6 +3,7 @@
*
* Copyright(c) 2006 Brian Tarricone, <bjt23 at cornell.edu>
* Copyright(c) 2006 Benedikt Meurer, <benny at xfce.org>
+ * Copyright(c) 2010 Jannis Pohlmann, <jannis at xfce.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/xfdesktop-file-icon.c b/src/xfdesktop-file-icon.c
index 4c97463..124e178 100644
--- a/src/xfdesktop-file-icon.c
+++ b/src/xfdesktop-file-icon.c
@@ -2,6 +2,7 @@
* xfdesktop - xfce4's desktop manager
*
* Copyright (c) 2006 Brian Tarricone, <bjt23 at cornell.edu>
+ * Copyright (c) 2010 Jannis Pohlmann, <jannis at xfce.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -178,6 +179,51 @@ xfdesktop_file_icon_peek_info(XfdesktopFileIcon *icon)
return NULL;
}
+GFileInfo *
+xfdesktop_file_icon_peek_file_info(XfdesktopFileIcon *icon)
+{
+ XfdesktopFileIconClass *klass;
+
+ g_return_val_if_fail(XFDESKTOP_IS_FILE_ICON(icon), NULL);
+
+ klass = XFDESKTOP_FILE_ICON_GET_CLASS(icon);
+
+ if(klass->peek_file_info)
+ return klass->peek_file_info(icon);
+ else
+ return NULL;
+}
+
+GFileInfo *
+xfdesktop_file_icon_peek_filesystem_info(XfdesktopFileIcon *icon)
+{
+ XfdesktopFileIconClass *klass;
+
+ g_return_val_if_fail(XFDESKTOP_IS_FILE_ICON(icon), NULL);
+
+ klass = XFDESKTOP_FILE_ICON_GET_CLASS(icon);
+
+ if(klass->peek_filesystem_info)
+ return klass->peek_filesystem_info(icon);
+ else
+ return NULL;
+}
+
+GFile *
+xfdesktop_file_icon_peek_file(XfdesktopFileIcon *icon)
+{
+ XfdesktopFileIconClass *klass;
+
+ g_return_val_if_fail(XFDESKTOP_IS_FILE_ICON(icon), NULL);
+
+ klass = XFDESKTOP_FILE_ICON_GET_CLASS(icon);
+
+ if(klass->peek_file)
+ return klass->peek_file(icon);
+ else
+ return NULL;
+}
+
void
xfdesktop_file_icon_update_info(XfdesktopFileIcon *icon,
ThunarVfsInfo *info)
diff --git a/src/xfdesktop-file-icon.h b/src/xfdesktop-file-icon.h
index 050a160..515fc5a 100644
--- a/src/xfdesktop-file-icon.h
+++ b/src/xfdesktop-file-icon.h
@@ -2,6 +2,7 @@
* xfdesktop - xfce4's desktop manager
*
* Copyright (c) 2006 Brian Tarricone, <bjt23 at cornell.edu>
+ * Copyright (c) 2010 Jannis Pohlmann, <jannis at xfce.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,6 +22,7 @@
#ifndef __XFDESKTOP_FILE_ICON_H__
#define __XFDESKTOP_FILE_ICON_H__
+#include <gio/gio.h>
#include <gtk/gtk.h>
#include <thunar-vfs/thunar-vfs.h>
@@ -52,6 +54,9 @@ struct _XfdesktopFileIconClass
/*< virtual functions >*/
G_CONST_RETURN ThunarVfsInfo *(*peek_info)(XfdesktopFileIcon *icon);
+ GFileInfo *(*peek_file_info)(XfdesktopFileIcon *icon);
+ GFileInfo *(*peek_filesystem_info)(XfdesktopFileIcon *icon);
+ GFile *(*peek_file)(XfdesktopFileIcon *icon);
void (*update_info)(XfdesktopFileIcon *icon, ThunarVfsInfo *info);
gboolean (*can_rename_file)(XfdesktopFileIcon *icon);
@@ -64,6 +69,9 @@ struct _XfdesktopFileIconClass
GType xfdesktop_file_icon_get_type(void) G_GNUC_CONST;
G_CONST_RETURN ThunarVfsInfo *xfdesktop_file_icon_peek_info(XfdesktopFileIcon *icon);
+GFileInfo *xfdesktop_file_icon_peek_file_info(XfdesktopFileIcon *icon);
+GFileInfo *xfdesktop_file_icon_peek_filesystem_info(XfdesktopFileIcon *icon);
+GFile *xfdesktop_file_icon_peek_file(XfdesktopFileIcon *icon);
void xfdesktop_file_icon_update_info(XfdesktopFileIcon *icon,
ThunarVfsInfo *info);
diff --git a/src/xfdesktop-file-utils.c b/src/xfdesktop-file-utils.c
index cdb1c18..3099664 100644
--- a/src/xfdesktop-file-utils.c
+++ b/src/xfdesktop-file-utils.c
@@ -2,6 +2,7 @@
* xfdesktop - xfce4's desktop manager
*
* Copyright(c) 2006 Brian Tarricone, <bjt23 at cornell.edu>
+ * Copyright(c) 2010 Jannis Pohlmann, <jannis at xfce.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -623,12 +624,28 @@ xfdesktop_thunarx_file_info_is_directory(ThunarxFileInfo *file_info)
return (info && info->type == THUNAR_VFS_FILE_TYPE_DIRECTORY);
}
-ThunarVfsInfo *
-xfdesktop_thunarx_file_info_get_vfs_info(ThunarxFileInfo *file_info)
+GFileInfo *
+xfdesktop_thunarx_file_info_get_file_info(ThunarxFileInfo *file_info)
{
XfdesktopFileIcon *icon = XFDESKTOP_FILE_ICON(file_info);
- const ThunarVfsInfo *info = xfdesktop_file_icon_peek_info(icon);
- return info ? thunar_vfs_info_copy(info) : NULL;
+ GFileInfo *info = xfdesktop_file_icon_peek_file_info(icon);
+ return info ? g_object_ref (info) : NULL;
+}
+
+GFileInfo *
+xfdesktop_thunarx_file_info_get_filesystem_info(ThunarxFileInfo *file_info)
+{
+ XfdesktopFileIcon *icon = XFDESKTOP_FILE_ICON(file_info);
+ GFileInfo *info = xfdesktop_file_icon_peek_filesystem_info(icon);
+ return info ? g_object_ref (info) : NULL;
+}
+
+GFile *
+xfdesktop_thunarx_file_info_get_location(ThunarxFileInfo *file_info)
+{
+ XfdesktopFileIcon *icon = XFDESKTOP_FILE_ICON(file_info);
+ GFile *file = xfdesktop_file_icon_peek_file(icon);
+ return g_object_ref (file);
}
#endif /* HAVE_THUNARX */
diff --git a/src/xfdesktop-file-utils.h b/src/xfdesktop-file-utils.h
index d88c299..6827cfb 100644
--- a/src/xfdesktop-file-utils.h
+++ b/src/xfdesktop-file-utils.h
@@ -2,6 +2,7 @@
* xfdesktop - xfce4's desktop manager
*
* Copyright(c) 2006 Brian Tarricone, <bjt23 at cornell.edu>
+ * Copyright(c) 2010 Jannis Pohlmann, <jannis at xfce.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -95,7 +96,9 @@ gchar *xfdesktop_thunarx_file_info_get_mime_type(ThunarxFileInfo *file_info);
gboolean xfdesktop_thunarx_file_info_has_mime_type(ThunarxFileInfo *file_info,
const gchar *mime_type);
gboolean xfdesktop_thunarx_file_info_is_directory(ThunarxFileInfo *file_info);
-ThunarVfsInfo *xfdesktop_thunarx_file_info_get_vfs_info(ThunarxFileInfo *file_info);
+GFile *xfdesktop_thunarx_file_info_get_location(ThunarxFileInfo *file_info);
+GFileInfo *xfdesktop_thunarx_file_info_get_file_info(ThunarxFileInfo *file_info);
+GFileInfo *xfdesktop_thunarx_file_info_get_filesystem_info(ThunarxFileInfo *file_info);
#endif
#endif
diff --git a/src/xfdesktop-regular-file-icon.c b/src/xfdesktop-regular-file-icon.c
index 32e928f..8a09ca3 100644
--- a/src/xfdesktop-regular-file-icon.c
+++ b/src/xfdesktop-regular-file-icon.c
@@ -64,7 +64,7 @@ struct _XfdesktopRegularFileIconPrivate
gchar *tooltip;
guint pix_opacity;
gint cur_pix_size;
- GFileInfo *ginfo;
+ GFileInfo *file_info;
GFileInfo *filesystem_info;
GFile *file;
ThunarVfsInfo *info;
@@ -84,6 +84,9 @@ static gboolean xfdesktop_regular_file_icon_do_drop_dest(XfdesktopIcon *icon,
GdkDragAction action);
static G_CONST_RETURN ThunarVfsInfo *xfdesktop_regular_file_icon_peek_info(XfdesktopFileIcon *icon);
+static GFileInfo *xfdesktop_regular_file_icon_peek_file_info(XfdesktopFileIcon *icon);
+static GFileInfo *xfdesktop_regular_file_icon_peek_filesystem_info(XfdesktopFileIcon *icon);
+static GFile *xfdesktop_regular_file_icon_peek_file(XfdesktopFileIcon *icon);
static void xfdesktop_regular_file_icon_update_info(XfdesktopFileIcon *icon,
ThunarVfsInfo *info);
static gboolean xfdesktop_regular_file_can_write_parent(XfdesktopFileIcon *icon);
@@ -133,6 +136,9 @@ xfdesktop_regular_file_icon_class_init(XfdesktopRegularFileIconClass *klass)
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->peek_file_info = xfdesktop_regular_file_icon_peek_file_info;
+ file_icon_class->peek_filesystem_info = xfdesktop_regular_file_icon_peek_filesystem_info;
+ file_icon_class->peek_file = xfdesktop_regular_file_icon_peek_file;
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->rename_file = xfdesktop_regular_file_icon_rename_file;
@@ -165,8 +171,8 @@ xfdesktop_regular_file_icon_finalize(GObject *obj)
if(icon->priv->info)
thunar_vfs_info_unref(icon->priv->info);
- if(icon->priv->ginfo)
- g_object_unref(icon->priv->ginfo);
+ if(icon->priv->file_info)
+ g_object_unref(icon->priv->file_info);
if(icon->priv->filesystem_info)
g_object_unref(icon->priv->filesystem_info);
@@ -190,7 +196,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
@@ -641,6 +649,27 @@ xfdesktop_regular_file_icon_peek_info(XfdesktopFileIcon *icon)
return XFDESKTOP_REGULAR_FILE_ICON(icon)->priv->info;
}
+static GFileInfo *
+xfdesktop_regular_file_icon_peek_file_info(XfdesktopFileIcon *icon)
+{
+ g_return_val_if_fail(XFDESKTOP_IS_REGULAR_FILE_ICON(icon), NULL);
+ return XFDESKTOP_REGULAR_FILE_ICON(icon)->priv->file_info;
+}
+
+static GFileInfo *
+xfdesktop_regular_file_icon_peek_filesystem_info(XfdesktopFileIcon *icon)
+{
+ g_return_val_if_fail(XFDESKTOP_IS_REGULAR_FILE_ICON(icon), NULL);
+ return XFDESKTOP_REGULAR_FILE_ICON(icon)->priv->filesystem_info;
+}
+
+static GFile *
+xfdesktop_regular_file_icon_peek_file(XfdesktopFileIcon *icon)
+{
+ g_return_val_if_fail(XFDESKTOP_IS_REGULAR_FILE_ICON(icon), NULL);
+ return XFDESKTOP_REGULAR_FILE_ICON(icon)->priv->file;
+}
+
static void
xfdesktop_regular_file_icon_update_info(XfdesktopFileIcon *icon,
ThunarVfsInfo *info)
@@ -685,10 +714,10 @@ xfdesktop_regular_file_icon_new(ThunarVfsInfo *info,
g_free(path);
/* query file information from GIO */
- regular_file_icon->priv->ginfo = g_file_query_info(regular_file_icon->priv->file,
- XFDESKTOP_FILE_INFO_NAMESPACE,
- G_FILE_QUERY_INFO_NONE,
- NULL, NULL);
+ regular_file_icon->priv->file_info = g_file_query_info(regular_file_icon->priv->file,
+ XFDESKTOP_FILE_INFO_NAMESPACE,
+ G_FILE_QUERY_INFO_NONE,
+ NULL, NULL);
/* query file system information from GIO */
regular_file_icon->priv->filesystem_info = g_file_query_filesystem_info(regular_file_icon->priv->file,
diff --git a/src/xfdesktop-special-file-icon.c b/src/xfdesktop-special-file-icon.c
index 413bdbe..18342d7 100644
--- a/src/xfdesktop-special-file-icon.c
+++ b/src/xfdesktop-special-file-icon.c
@@ -3,6 +3,7 @@
*
* Copyright(c) 2006 Brian Tarricone, <bjt23 at cornell.edu>
* Copyright(c) 2006 Benedikt Meurer, <benny at xfce.org>
+ * Copyright(c) 2010 Jannis Pohlmann, <jannis at xfce.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -39,6 +40,8 @@
#define PATH_MAX 4096
#endif
+#include <gio/gio.h>
+
#include <libxfce4ui/libxfce4ui.h>
#include <dbus/dbus-glib.h>
@@ -47,6 +50,7 @@
#include <thunarx/thunarx.h>
#endif
+#include "xfdesktop-common.h"
#include "xfdesktop-file-utils.h"
#include "xfdesktop-special-file-icon.h"
#include "xfdesktop-trash-proxy.h"
@@ -58,6 +62,9 @@ struct _XfdesktopSpecialFileIconPrivate
gchar *tooltip;
gint cur_pix_size;
ThunarVfsInfo *info;
+ GFileInfo *file_info;
+ GFileInfo *filesystem_info;
+ GFile *file;
GdkScreen *gscreen;
/* only needed for trash */
@@ -81,6 +88,9 @@ static gboolean xfdesktop_special_file_icon_populate_context_menu(XfdesktopIcon
GtkWidget *menu);
static G_CONST_RETURN ThunarVfsInfo *xfdesktop_special_file_icon_peek_info(XfdesktopFileIcon *icon);
+static GFileInfo *xfdesktop_special_file_icon_peek_file_info(XfdesktopFileIcon *icon);
+static GFileInfo *xfdesktop_special_file_icon_peek_filesystem_info(XfdesktopFileIcon *icon);
+static GFile *xfdesktop_special_file_icon_peek_file(XfdesktopFileIcon *icon);
#ifdef HAVE_THUNARX
static void xfdesktop_special_file_icon_tfi_init(ThunarxFileInfoIface *iface);
@@ -126,6 +136,9 @@ xfdesktop_special_file_icon_class_init(XfdesktopSpecialFileIconClass *klass)
icon_class->populate_context_menu = xfdesktop_special_file_icon_populate_context_menu;
file_icon_class->peek_info = xfdesktop_special_file_icon_peek_info;
+ file_icon_class->peek_file_info = xfdesktop_special_file_icon_peek_file_info;
+ file_icon_class->peek_filesystem_info = xfdesktop_special_file_icon_peek_filesystem_info;
+ file_icon_class->peek_file = xfdesktop_special_file_icon_peek_file;
file_icon_class->can_rename_file = (gboolean (*)(XfdesktopFileIcon *))gtk_false;
file_icon_class->can_delete_file = (gboolean (*)(XfdesktopFileIcon *))gtk_false;
}
@@ -193,7 +206,9 @@ xfdesktop_special_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 /* HAVE_THUNARX */
@@ -680,6 +695,26 @@ xfdesktop_special_file_icon_peek_info(XfdesktopFileIcon *icon)
return XFDESKTOP_SPECIAL_FILE_ICON(icon)->priv->info;
}
+static GFileInfo *
+xfdesktop_special_file_icon_peek_file_info(XfdesktopFileIcon *icon)
+{
+ g_return_val_if_fail(XFDESKTOP_IS_SPECIAL_FILE_ICON(icon), NULL);
+ return XFDESKTOP_SPECIAL_FILE_ICON(icon)->priv->file_info;
+}
+
+static GFileInfo *
+xfdesktop_special_file_icon_peek_filesystem_info(XfdesktopFileIcon *icon)
+{
+ g_return_val_if_fail(XFDESKTOP_IS_SPECIAL_FILE_ICON(icon), NULL);
+ return XFDESKTOP_SPECIAL_FILE_ICON(icon)->priv->filesystem_info;
+}
+
+static GFile *
+xfdesktop_special_file_icon_peek_file(XfdesktopFileIcon *icon)
+{
+ g_return_val_if_fail(XFDESKTOP_IS_SPECIAL_FILE_ICON(icon), NULL);
+ return XFDESKTOP_SPECIAL_FILE_ICON(icon)->priv->file;
+}
static void
xfdesktop_special_file_icon_trash_changed_cb(DBusGProxy *proxy,
@@ -729,6 +764,7 @@ xfdesktop_special_file_icon_new(XfdesktopSpecialFileIconType type,
{
XfdesktopSpecialFileIcon *special_file_icon;
ThunarVfsPath *path = NULL;
+ gchar *pathname;
switch(type) {
case XFDESKTOP_SPECIAL_FILE_ICON_FILESYSTEM:
@@ -752,6 +788,23 @@ xfdesktop_special_file_icon_new(XfdesktopSpecialFileIconType type,
special_file_icon->priv->gscreen = screen;
special_file_icon->priv->info = thunar_vfs_info_new_for_path(path, NULL);
thunar_vfs_path_unref(path);
+
+ /* convert the ThunarVfsPath into a GFile */
+ pathname = thunar_vfs_path_dup_string(special_file_icon->priv->info->path);
+ special_file_icon->priv->file = g_file_new_for_path(pathname);
+ g_free(pathname);
+
+ /* query file information from GIO */
+ special_file_icon->priv->file_info = g_file_query_info(special_file_icon->priv->file,
+ XFDESKTOP_FILE_INFO_NAMESPACE,
+ G_FILE_QUERY_INFO_NONE,
+ NULL, NULL);
+
+ /* query file system information from GIO */
+ special_file_icon->priv->filesystem_info = g_file_query_filesystem_info(special_file_icon->priv->file,
+ XFDESKTOP_FILESYSTEM_INFO_NAMESPACE,
+ NULL, NULL);
+
if(G_UNLIKELY(!special_file_icon->priv->info)) {
g_object_unref(G_OBJECT(special_file_icon));
return NULL;
diff --git a/src/xfdesktop-volume-icon.c b/src/xfdesktop-volume-icon.c
index 4b3648a..107e092 100644
--- a/src/xfdesktop-volume-icon.c
+++ b/src/xfdesktop-volume-icon.c
@@ -3,6 +3,7 @@
*
* Copyright(c) 2006 Brian Tarricone, <bjt23 at cornell.edu>
* Copyright(c) 2006 Benedikt Meurer, <benny at xfce.org>
+ * Copyright(c) 2010 Jannis Pohlmann, <jannis at xfce.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -43,6 +44,8 @@
#define PATH_MAX 4096
#endif
+#include <gio/gio.h>
+
#include <libxfce4ui/libxfce4ui.h>
#ifdef HAVE_THUNARX
@@ -60,6 +63,9 @@ struct _XfdesktopVolumeIconPrivate
gint cur_pix_size;
ThunarVfsVolume *volume;
ThunarVfsInfo *info;
+ GFileInfo *file_info;
+ GFileInfo *filesystem_info;
+ GFile *file;
GdkScreen *gscreen;
};
@@ -78,6 +84,9 @@ static gboolean xfdesktop_volume_icon_populate_context_menu(XfdesktopIcon *icon,
GtkWidget *menu);
static G_CONST_RETURN ThunarVfsInfo *xfdesktop_volume_icon_peek_info(XfdesktopFileIcon *icon);
+static GFileInfo *xfdesktop_volume_icon_peek_file_info(XfdesktopFileIcon *icon);
+static GFileInfo *xfdesktop_volume_icon_peek_filesystem_info(XfdesktopFileIcon *icon);
+static GFile *xfdesktop_volume_icon_peek_file(XfdesktopFileIcon *icon);
static void xfdesktop_volume_icon_update_info(XfdesktopFileIcon *icon,
ThunarVfsInfo *info);
static gboolean xfdesktop_volume_icon_activated(XfdesktopIcon *icon);
@@ -125,6 +134,9 @@ xfdesktop_volume_icon_class_init(XfdesktopVolumeIconClass *klass)
icon_class->activated = xfdesktop_volume_icon_activated;
file_icon_class->peek_info = xfdesktop_volume_icon_peek_info;
+ file_icon_class->peek_file_info = xfdesktop_volume_icon_peek_file_info;
+ file_icon_class->peek_filesystem_info = xfdesktop_volume_icon_peek_filesystem_info;
+ file_icon_class->peek_file = xfdesktop_volume_icon_peek_file;
file_icon_class->update_info = xfdesktop_volume_icon_update_info;
file_icon_class->can_rename_file = (gboolean (*)(XfdesktopFileIcon *))gtk_false;
file_icon_class->can_delete_file = (gboolean (*)(XfdesktopFileIcon *))gtk_false;
@@ -177,7 +189,9 @@ xfdesktop_volume_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 /* HAVE_THUNARX */
@@ -634,6 +648,27 @@ xfdesktop_volume_icon_peek_info(XfdesktopFileIcon *icon)
return XFDESKTOP_VOLUME_ICON(icon)->priv->info;
}
+static GFileInfo *
+xfdesktop_volume_icon_peek_file_info(XfdesktopFileIcon *icon)
+{
+ g_return_val_if_fail(XFDESKTOP_IS_VOLUME_ICON(icon), NULL);
+ return XFDESKTOP_VOLUME_ICON(icon)->priv->file_info;
+}
+
+static GFileInfo *
+xfdesktop_volume_icon_peek_filesystem_info(XfdesktopFileIcon *icon)
+{
+ g_return_val_if_fail(XFDESKTOP_IS_VOLUME_ICON(icon), NULL);
+ return XFDESKTOP_VOLUME_ICON(icon)->priv->filesystem_info;
+}
+
+static GFile *
+xfdesktop_volume_icon_peek_file(XfdesktopFileIcon *icon)
+{
+ g_return_val_if_fail(XFDESKTOP_IS_VOLUME_ICON(icon), NULL);
+ return XFDESKTOP_VOLUME_ICON(icon)->priv->file;
+}
+
static void
xfdesktop_volume_icon_update_info(XfdesktopFileIcon *icon,
ThunarVfsInfo *info)
More information about the Xfce4-commits
mailing list