Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:dliang
nautilus
nautilus-142860-vfs-drive-for-extensions.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File nautilus-142860-vfs-drive-for-extensions.diff of Package nautilus
https://bugzilla.novell.com/show_bug.cgi?id=142860 2006-05-09 Federico Mena Quintero <federico@novell.com> Let an extension query for the GnomeVFSDrive that may correspond to a NautilusFileInfo: * libnautilus-extension/nautilus-file-info.h: Added prototype for nautilus_file_info_get_drive(). (struct _NautilusFileInfoIface): Added a "get_drive" method. * libnautilus-extension/nautilus-file-info.c (nautilus_file_info_get_drive): New public function; gets the GnomeVFSDrive that may correspond to a NautilusFileInfo. Implementation of NautilusFileInfo::get_drive() for NautilusDesktopIconFile: * libnautilus-private/nautilus-desktop-icon-file.c: Use G_DEFINE_TYPE_WITH_CODE() instead of EEL_CLASS_BOILERPLATE() so that we can implement an interface. (file_info_iface_init): New function, initializes the NautilusFileInfoIface for the desktop icon file class. (nautilus_desktop_icon_file_get_drive): Implement the ::get_drive() method from NautilusFileInfoIface. Index: nautilus/libnautilus-extension/nautilus-file-info.c =================================================================== RCS file: /cvsroot/novell/nautilus/libnautilus-extension/nautilus-file-info.c,v retrieving revision 1.1.1.1 diff -u -p -r1.1.1.1 nautilus-file-info.c --- nautilus/libnautilus-extension/nautilus-file-info.c 7 Apr 2006 20:12:27 -0000 1.1.1.1 +++ nautilus/libnautilus-extension/nautilus-file-info.c 9 May 2006 22:19:00 -0000 @@ -156,6 +156,21 @@ nautilus_file_info_is_directory (Nautilu return NAUTILUS_FILE_INFO_GET_IFACE (file)->is_directory (file); } +GnomeVFSDrive * +nautilus_file_info_get_drive (NautilusFileInfo *file) +{ + NautilusFileInfoIface *iface; + + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL); + + iface = NAUTILUS_FILE_INFO_GET_IFACE (file); + + if (iface->get_drive) + return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_drive (file); + else + return NULL; +} + GnomeVFSFileInfo * nautilus_file_info_get_vfs_file_info (NautilusFileInfo *file) { Index: nautilus/libnautilus-extension/nautilus-file-info.h =================================================================== RCS file: /cvsroot/novell/nautilus/libnautilus-extension/nautilus-file-info.h,v retrieving revision 1.1.1.1 diff -u -p -r1.1.1.1 nautilus-file-info.h --- nautilus/libnautilus-extension/nautilus-file-info.h 7 Apr 2006 20:12:27 -0000 1.1.1.1 +++ nautilus/libnautilus-extension/nautilus-file-info.h 9 May 2006 23:04:59 -0000 @@ -27,6 +27,7 @@ #define NAUTILUS_FILE_INFO_H #include <glib-object.h> +#include <libgnomevfs/gnome-vfs-drive.h> #include <libgnomevfs/gnome-vfs-file-info.h> G_BEGIN_DECLS @@ -74,6 +75,7 @@ struct _NautilusFileInfoIface const char *attribute_name, const char *value); void (*invalidate_extension_info) (NautilusFileInfo *file); + GnomeVFSDrive * (*get_drive) (NautilusFileInfo *file); }; GList *nautilus_file_info_list_copy (GList *files); @@ -95,6 +97,9 @@ gboolean nautilus_file_info_is_ const char *mime_type); gboolean nautilus_file_info_is_directory (NautilusFileInfo *file); +/* Drive */ +GnomeVFSDrive *nautilus_file_info_get_drive (NautilusFileInfo *file); + /* Other File Info */ Index: nautilus/libnautilus-private/nautilus-desktop-icon-file.c =================================================================== RCS file: /cvsroot/novell/nautilus/libnautilus-private/nautilus-desktop-icon-file.c,v retrieving revision 1.2 diff -u -p -r1.2 nautilus-desktop-icon-file.c --- nautilus/libnautilus-private/nautilus-desktop-icon-file.c 11 Apr 2006 16:46:34 -0000 1.2 +++ nautilus/libnautilus-private/nautilus-desktop-icon-file.c 10 May 2006 00:24:37 -0000 @@ -43,13 +43,16 @@ struct NautilusDesktopIconFileDetails { NautilusDesktopLink *link; }; -static void nautilus_desktop_icon_file_init (gpointer object, - gpointer klass); -static void nautilus_desktop_icon_file_class_init (gpointer klass); - -EEL_CLASS_BOILERPLATE (NautilusDesktopIconFile, - nautilus_desktop_icon_file, - NAUTILUS_TYPE_FILE) +static void nautilus_desktop_icon_file_init (NautilusDesktopIconFile *icon_file); +static void nautilus_desktop_icon_file_class_init (NautilusDesktopIconFileClass *klass); + +static void file_info_iface_init (NautilusFileInfoIface *iface); + +G_DEFINE_TYPE_WITH_CODE (NautilusDesktopIconFile, + nautilus_desktop_icon_file, + NAUTILUS_TYPE_FILE, + G_IMPLEMENT_INTERFACE (NAUTILUS_TYPE_FILE_INFO, + file_info_iface_init)); static void desktop_icon_file_monitor_add (NautilusFile *file, @@ -164,13 +167,9 @@ desktop_icon_file_get_where_string (Naut } static void -nautilus_desktop_icon_file_init (gpointer object, gpointer klass) +nautilus_desktop_icon_file_init (NautilusDesktopIconFile *icon_file) { - NautilusDesktopIconFile *desktop_file; - - desktop_file = NAUTILUS_DESKTOP_ICON_FILE (object); - - desktop_file->details = g_new0 (NautilusDesktopIconFileDetails, 1); + icon_file->details = g_new0 (NautilusDesktopIconFileDetails, 1); } static void @@ -342,11 +341,13 @@ desktop_icon_file_finalize (GObject *obj g_free (desktop_file->details); - EEL_CALL_PARENT (G_OBJECT_CLASS, finalize, (object)); + if (G_OBJECT_CLASS (nautilus_desktop_icon_file_parent_class)->finalize) { + G_OBJECT_CLASS (nautilus_desktop_icon_file_parent_class)->finalize (object); + } } static void -nautilus_desktop_icon_file_class_init (gpointer klass) +nautilus_desktop_icon_file_class_init (NautilusDesktopIconFileClass *klass) { GObjectClass *object_class; NautilusFileClass *file_class; @@ -367,3 +368,36 @@ nautilus_desktop_icon_file_class_init (g file_class->get_date = desktop_icon_file_get_date; file_class->get_where_string = desktop_icon_file_get_where_string; } + +static GnomeVFSDrive * +nautilus_desktop_icon_file_get_drive (NautilusFileInfo *file) +{ + NautilusDesktopIconFile *icon_file; + NautilusDesktopLink *link; + GObject *drive_or_volume; + + icon_file = NAUTILUS_DESKTOP_ICON_FILE (file); + link = icon_file->details->link; + + if (nautilus_desktop_link_get_link_type (link) != NAUTILUS_DESKTOP_LINK_VOLUME) { + return NULL; + } + + drive_or_volume = nautilus_desktop_link_get_drive_or_volume (link); + if (GNOME_IS_VFS_DRIVE (drive_or_volume)) { + return GNOME_VFS_DRIVE (drive_or_volume); /* comes with a new reference count */ + } else { + GnomeVFSDrive *drive; + + drive = gnome_vfs_volume_get_drive (GNOME_VFS_VOLUME (drive_or_volume)); /* comes with a new reference count */ + gnome_vfs_volume_unref (GNOME_VFS_VOLUME (drive_or_volume)); + + return drive; + } +} + +static void +file_info_iface_init (NautilusFileInfoIface *iface) +{ + iface->get_drive = nautilus_desktop_icon_file_get_drive; +}
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor