[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