X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fgvolumemonitor.c;h=441afc66719237284bff8cb1961c9fe2e2e04a63;hb=c3842d1969feace4bfb12919be730e75e53877d9;hp=c2be9c1799f02be89914eb765f0b4bbdf350d7b5;hpb=442e8df1b833e3311a214ae1bf02337b0c831544;p=platform%2Fupstream%2Fglib.git diff --git a/gio/gvolumemonitor.c b/gio/gvolumemonitor.c index c2be9c1..441afc6 100644 --- a/gio/gvolumemonitor.c +++ b/gio/gvolumemonitor.c @@ -1,3 +1,5 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ + /* GIO - GLib Input, Output and Streaming Library * * Copyright (C) 2006-2007 Red Hat, Inc. @@ -13,34 +15,51 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. + * Public License along with this library; if not, see . * * Author: Alexander Larsson + * David Zeuthen */ -#include +#include "config.h" #include "gvolumemonitor.h" +#include "gvolume.h" +#include "gmount.h" +#include "gdrive.h" #include "glibintl.h" + /** * SECTION:gvolumemonitor * @short_description: Volume Monitor - * @see_also: #GDirectoryMonitor, #GFileMonitor + * @include: gio/gio.h + * @see_also: #GFileMonitor * - * Monitors a mounted volume for changes. + * #GVolumeMonitor is for listing the user interesting devices and volumes + * on the computer. In other words, what a file selector or file manager + * would show in a sidebar. * + * #GVolumeMonitor is not + * [thread-default-context aware][g-main-context-push-thread-default], + * and so should not be used other than from the main thread, with no + * thread-default-context active. **/ G_DEFINE_TYPE (GVolumeMonitor, g_volume_monitor, G_TYPE_OBJECT); enum { - VOLUME_MOUNTED, - VOLUME_PRE_UNMOUNT, - VOLUME_UNMOUNTED, + VOLUME_ADDED, + VOLUME_REMOVED, + VOLUME_CHANGED, + MOUNT_ADDED, + MOUNT_REMOVED, + MOUNT_PRE_UNMOUNT, + MOUNT_CHANGED, DRIVE_CONNECTED, DRIVE_DISCONNECTED, + DRIVE_CHANGED, + DRIVE_EJECT_BUTTON, + DRIVE_STOP_BUTTON, LAST_SIGNAL }; @@ -50,12 +69,7 @@ static guint signals[LAST_SIGNAL] = { 0 }; static void g_volume_monitor_finalize (GObject *object) { - GVolumeMonitor *monitor; - - monitor = G_VOLUME_MONITOR (object); - - if (G_OBJECT_CLASS (g_volume_monitor_parent_class)->finalize) - (*G_OBJECT_CLASS (g_volume_monitor_parent_class)->finalize) (object); + G_OBJECT_CLASS (g_volume_monitor_parent_class)->finalize (object); } static void @@ -66,47 +80,110 @@ g_volume_monitor_class_init (GVolumeMonitorClass *klass) gobject_class->finalize = g_volume_monitor_finalize; /** - * GVolumeMonitor::volume-mounted: + * GVolumeMonitor::volume-added: * @volume_monitor: The volume monitor emitting the signal. - * @volume: the volume that was mounted. - * - * Emitted when a volume is mounted. + * @volume: a #GVolume that was added. + * + * Emitted when a mountable volume is added to the system. **/ - signals[VOLUME_MOUNTED] = g_signal_new (I_("volume_mounted"), - G_TYPE_VOLUME_MONITOR, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GVolumeMonitorClass, volume_mounted), - NULL, NULL, - g_cclosure_marshal_VOID__OBJECT, - G_TYPE_NONE, 1, G_TYPE_VOLUME); + signals[VOLUME_ADDED] = g_signal_new (I_("volume-added"), + G_TYPE_VOLUME_MONITOR, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GVolumeMonitorClass, volume_added), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, G_TYPE_VOLUME); + /** - * GVolumeMonitor::volume-pre-unmount: + * GVolumeMonitor::volume-removed: * @volume_monitor: The volume monitor emitting the signal. - * @volume: the volume that is being unmounted. - * - * Emitted when a volume is about to be unmounted. - **/ - signals[VOLUME_PRE_UNMOUNT] = g_signal_new (I_("volume_pre_unmount"), - G_TYPE_VOLUME_MONITOR, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GVolumeMonitorClass, volume_pre_unmount), - NULL, NULL, - g_cclosure_marshal_VOID__OBJECT, - G_TYPE_NONE, 1, G_TYPE_VOLUME); + * @volume: a #GVolume that was removed. + * + * Emitted when a mountable volume is removed from the system. + **/ + signals[VOLUME_REMOVED] = g_signal_new (I_("volume-removed"), + G_TYPE_VOLUME_MONITOR, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GVolumeMonitorClass, volume_removed), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, G_TYPE_VOLUME); + /** - * GVolumeMonitor::volume-unmounted: + * GVolumeMonitor::volume-changed: * @volume_monitor: The volume monitor emitting the signal. - * @volume: the volume that was unmounted. + * @volume: a #GVolume that changed. * - * Emitted when a volume is unmounted. + * Emitted when mountable volume is changed. **/ - signals[VOLUME_UNMOUNTED] = g_signal_new (I_("volume_unmounted"), - G_TYPE_VOLUME_MONITOR, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GVolumeMonitorClass, volume_unmounted), - NULL, NULL, - g_cclosure_marshal_VOID__OBJECT, - G_TYPE_NONE, 1, G_TYPE_VOLUME); + signals[VOLUME_CHANGED] = g_signal_new (I_("volume-changed"), + G_TYPE_VOLUME_MONITOR, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GVolumeMonitorClass, volume_changed), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, G_TYPE_VOLUME); + + /** + * GVolumeMonitor::mount-added: + * @volume_monitor: The volume monitor emitting the signal. + * @mount: a #GMount that was added. + * + * Emitted when a mount is added. + **/ + signals[MOUNT_ADDED] = g_signal_new (I_("mount-added"), + G_TYPE_VOLUME_MONITOR, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GVolumeMonitorClass, mount_added), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, G_TYPE_MOUNT); + + /** + * GVolumeMonitor::mount-removed: + * @volume_monitor: The volume monitor emitting the signal. + * @mount: a #GMount that was removed. + * + * Emitted when a mount is removed. + **/ + signals[MOUNT_REMOVED] = g_signal_new (I_("mount-removed"), + G_TYPE_VOLUME_MONITOR, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GVolumeMonitorClass, mount_removed), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, G_TYPE_MOUNT); + + /** + * GVolumeMonitor::mount-pre-unmount: + * @volume_monitor: The volume monitor emitting the signal. + * @mount: a #GMount that is being unmounted. + * + * Emitted when a mount is about to be removed. + **/ + signals[MOUNT_PRE_UNMOUNT] = g_signal_new (I_("mount-pre-unmount"), + G_TYPE_VOLUME_MONITOR, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GVolumeMonitorClass, mount_pre_unmount), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, G_TYPE_MOUNT); + + /** + * GVolumeMonitor::mount-changed: + * @volume_monitor: The volume monitor emitting the signal. + * @mount: a #GMount that changed. + * + * Emitted when a mount changes. + **/ + signals[MOUNT_CHANGED] = g_signal_new (I_("mount-changed"), + G_TYPE_VOLUME_MONITOR, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GVolumeMonitorClass, mount_changed), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, G_TYPE_MOUNT); + /** * GVolumeMonitor::drive-connected: * @volume_monitor: The volume monitor emitting the signal. @@ -114,7 +191,7 @@ g_volume_monitor_class_init (GVolumeMonitorClass *klass) * * Emitted when a drive is connected to the system. **/ - signals[DRIVE_CONNECTED] = g_signal_new (I_("drive_connected"), + signals[DRIVE_CONNECTED] = g_signal_new (I_("drive-connected"), G_TYPE_VOLUME_MONITOR, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GVolumeMonitorClass, drive_connected), @@ -129,13 +206,63 @@ g_volume_monitor_class_init (GVolumeMonitorClass *klass) * * Emitted when a drive is disconnected from the system. **/ - signals[DRIVE_DISCONNECTED] = g_signal_new (I_("drive_disconnected"), + signals[DRIVE_DISCONNECTED] = g_signal_new (I_("drive-disconnected"), G_TYPE_VOLUME_MONITOR, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GVolumeMonitorClass, drive_disconnected), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_DRIVE); + + /** + * GVolumeMonitor::drive-changed: + * @volume_monitor: The volume monitor emitting the signal. + * @drive: the drive that changed + * + * Emitted when a drive changes. + **/ + signals[DRIVE_CHANGED] = g_signal_new (I_("drive-changed"), + G_TYPE_VOLUME_MONITOR, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GVolumeMonitorClass, drive_changed), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, G_TYPE_DRIVE); + + /** + * GVolumeMonitor::drive-eject-button: + * @volume_monitor: The volume monitor emitting the signal. + * @drive: the drive where the eject button was pressed + * + * Emitted when the eject button is pressed on @drive. + * + * Since: 2.18 + **/ + signals[DRIVE_EJECT_BUTTON] = g_signal_new (I_("drive-eject-button"), + G_TYPE_VOLUME_MONITOR, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GVolumeMonitorClass, drive_eject_button), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, G_TYPE_DRIVE); + + /** + * GVolumeMonitor::drive-stop-button: + * @volume_monitor: The volume monitor emitting the signal. + * @drive: the drive where the stop button was pressed + * + * Emitted when the stop button is pressed on @drive. + * + * Since: 2.22 + **/ + signals[DRIVE_STOP_BUTTON] = g_signal_new (I_("drive-stop-button"), + G_TYPE_VOLUME_MONITOR, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GVolumeMonitorClass, drive_stop_button), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, G_TYPE_DRIVE); + } static void @@ -143,16 +270,20 @@ g_volume_monitor_init (GVolumeMonitor *monitor) { } + /** - * g_volume_monitor_get_mounted_volumes: + * g_volume_monitor_get_connected_drives: * @volume_monitor: a #GVolumeMonitor. * - * Gets a list of volumes mounted on the computer. + * Gets a list of drives connected to the system. * - * Returns: a #GList of mounted #GVolumes. + * The returned list should be freed with g_list_free(), after + * its elements have been unreffed with g_object_unref(). + * + * Returns: (element-type GDrive) (transfer full): a #GList of connected #GDrive objects. **/ GList * -g_volume_monitor_get_mounted_volumes (GVolumeMonitor *volume_monitor) +g_volume_monitor_get_connected_drives (GVolumeMonitor *volume_monitor) { GVolumeMonitorClass *class; @@ -160,19 +291,22 @@ g_volume_monitor_get_mounted_volumes (GVolumeMonitor *volume_monitor) class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor); - return class->get_mounted_volumes (volume_monitor); + return class->get_connected_drives (volume_monitor); } /** - * g_volume_monitor_get_connected_drives: + * g_volume_monitor_get_volumes: * @volume_monitor: a #GVolumeMonitor. * - * Gets a list of drives connected to the computer. + * Gets a list of the volumes on the system. * - * Returns: a #GList of connected #GDrives. + * The returned list should be freed with g_list_free(), after + * its elements have been unreffed with g_object_unref(). + * + * Returns: (element-type GVolume) (transfer full): a #GList of #GVolume objects. **/ GList * -g_volume_monitor_get_connected_drives (GVolumeMonitor *volume_monitor) +g_volume_monitor_get_volumes (GVolumeMonitor *volume_monitor) { GVolumeMonitorClass *class; @@ -180,6 +314,76 @@ g_volume_monitor_get_connected_drives (GVolumeMonitor *volume_monitor) class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor); - return class->get_connected_drives (volume_monitor); + return class->get_volumes (volume_monitor); } +/** + * g_volume_monitor_get_mounts: + * @volume_monitor: a #GVolumeMonitor. + * + * Gets a list of the mounts on the system. + * + * The returned list should be freed with g_list_free(), after + * its elements have been unreffed with g_object_unref(). + * + * Returns: (element-type GMount) (transfer full): a #GList of #GMount objects. + **/ +GList * +g_volume_monitor_get_mounts (GVolumeMonitor *volume_monitor) +{ + GVolumeMonitorClass *class; + + g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL); + + class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor); + + return class->get_mounts (volume_monitor); +} + +/** + * g_volume_monitor_get_volume_for_uuid: + * @volume_monitor: a #GVolumeMonitor. + * @uuid: the UUID to look for + * + * Finds a #GVolume object by its UUID (see g_volume_get_uuid()) + * + * Returns: (transfer full): a #GVolume or %NULL if no such volume is available. + * Free the returned object with g_object_unref(). + **/ +GVolume * +g_volume_monitor_get_volume_for_uuid (GVolumeMonitor *volume_monitor, + const char *uuid) +{ + GVolumeMonitorClass *class; + + g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL); + g_return_val_if_fail (uuid != NULL, NULL); + + class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor); + + return class->get_volume_for_uuid (volume_monitor, uuid); +} + +/** + * g_volume_monitor_get_mount_for_uuid: + * @volume_monitor: a #GVolumeMonitor. + * @uuid: the UUID to look for + * + * Finds a #GMount object by its UUID (see g_mount_get_uuid()) + * + * Returns: (transfer full): a #GMount or %NULL if no such mount is available. + * Free the returned object with g_object_unref(). + **/ +GMount * +g_volume_monitor_get_mount_for_uuid (GVolumeMonitor *volume_monitor, + const char *uuid) +{ + GVolumeMonitorClass *class; + + g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL); + g_return_val_if_fail (uuid != NULL, NULL); + + class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor); + + return class->get_mount_for_uuid (volume_monitor, uuid); +}