X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fgunixvolumemonitor.c;h=26ec48369c49b519e4936009e4f99f1e62c2c87d;hb=928d2cea616db45a1a0d870fd73aed2570170288;hp=395a8206a57aaf4bd670417ea8239ad3e4f7b090;hpb=3ca9fd4dbb134088bf70f2f6584f14a559e6820a;p=platform%2Fupstream%2Fglib.git diff --git a/gio/gunixvolumemonitor.c b/gio/gunixvolumemonitor.c index 395a820..26ec483 100644 --- a/gio/gunixvolumemonitor.c +++ b/gio/gunixvolumemonitor.c @@ -23,7 +23,7 @@ * David Zeuthen */ -#include +#include "config.h" #include @@ -32,10 +32,11 @@ #include "gunixmounts.h" #include "gunixmount.h" #include "gunixvolume.h" +#include "gmount.h" #include "gmountprivate.h" +#include "giomodule.h" #include "glibintl.h" -#include "gioalias.h" struct _GUnixVolumeMonitor { GNativeVolumeMonitor parent; @@ -57,7 +58,11 @@ static void update_volumes (GUnixVolumeMonitor *monitor); static void update_mounts (GUnixVolumeMonitor *monitor); #define g_unix_volume_monitor_get_type _g_unix_volume_monitor_get_type -G_DEFINE_TYPE (GUnixVolumeMonitor, g_unix_volume_monitor, G_TYPE_NATIVE_VOLUME_MONITOR); +G_DEFINE_TYPE_WITH_CODE (GUnixVolumeMonitor, g_unix_volume_monitor, G_TYPE_NATIVE_VOLUME_MONITOR, + g_io_extension_point_implement (G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME, + g_define_type_id, + "unix", + 0)); static void g_unix_volume_monitor_finalize (GObject *object) @@ -71,18 +76,29 @@ g_unix_volume_monitor_finalize (GObject *object) g_object_unref (monitor->mount_monitor); - g_list_foreach (monitor->last_mountpoints, (GFunc)g_unix_mount_point_free, NULL); - g_list_free (monitor->last_mountpoints); - g_list_foreach (monitor->last_mounts, (GFunc)g_unix_mount_free, NULL); - g_list_free (monitor->last_mounts); + g_list_free_full (monitor->last_mountpoints, (GDestroyNotify) g_unix_mount_point_free); + g_list_free_full (monitor->last_mounts, (GDestroyNotify) g_unix_mount_free); - g_list_foreach (monitor->volumes, (GFunc)g_object_unref, NULL); - g_list_free (monitor->volumes); - g_list_foreach (monitor->mounts, (GFunc)g_object_unref, NULL); - g_list_free (monitor->mounts); + g_list_free_full (monitor->volumes, g_object_unref); + g_list_free_full (monitor->mounts, g_object_unref); + + G_OBJECT_CLASS (g_unix_volume_monitor_parent_class)->finalize (object); +} + +static void +g_unix_volume_monitor_dispose (GObject *object) +{ + GUnixVolumeMonitor *monitor; + + monitor = G_UNIX_VOLUME_MONITOR (object); + + g_list_free_full (monitor->volumes, g_object_unref); + monitor->volumes = NULL; + + g_list_free_full (monitor->mounts, g_object_unref); + monitor->mounts = NULL; - if (G_OBJECT_CLASS (g_unix_volume_monitor_parent_class)->finalize) - (*G_OBJECT_CLASS (g_unix_volume_monitor_parent_class)->finalize) (object); + G_OBJECT_CLASS (g_unix_volume_monitor_parent_class)->dispose (object); } static GList * @@ -119,17 +135,41 @@ get_connected_drives (GVolumeMonitor *volume_monitor) return NULL; } +static GVolume * +get_volume_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid) +{ + return NULL; +} + static GMount * -get_mount_for_mount_path (const char *mount_path) +get_mount_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid) +{ + return NULL; +} + +static gboolean +is_supported (void) +{ + return TRUE; +} + +static GMount * +get_mount_for_mount_path (const char *mount_path, + GCancellable *cancellable) { GUnixMountEntry *mount_entry; GUnixMount *mount; - mount_entry = g_get_unix_mount_at (mount_path, NULL); - + mount_entry = g_unix_mount_at (mount_path, NULL); + + if (!mount_entry) + return NULL; + /* TODO: Set mountable volume? */ mount = _g_unix_mount_new (NULL, mount_entry, NULL); + g_unix_mount_free (mount_entry); + return G_MOUNT (mount); } @@ -141,12 +181,15 @@ g_unix_volume_monitor_class_init (GUnixVolumeMonitorClass *klass) GNativeVolumeMonitorClass *native_class = G_NATIVE_VOLUME_MONITOR_CLASS (klass); gobject_class->finalize = g_unix_volume_monitor_finalize; + gobject_class->dispose = g_unix_volume_monitor_dispose; monitor_class->get_mounts = get_mounts; monitor_class->get_volumes = get_volumes; monitor_class->get_connected_drives = get_connected_drives; + monitor_class->get_volume_for_uuid = get_volume_for_uuid; + monitor_class->get_mount_for_uuid = get_mount_for_uuid; + monitor_class->is_supported = is_supported; - native_class->priority = 0; native_class->get_mount_for_mount_path = get_mount_for_mount_path; } @@ -179,22 +222,17 @@ g_unix_volume_monitor_init (GUnixVolumeMonitor *unix_monitor) unix_monitor->mount_monitor = g_unix_mount_monitor_new (); g_signal_connect (unix_monitor->mount_monitor, - "mounts_changed", G_CALLBACK (mounts_changed), + "mounts-changed", G_CALLBACK (mounts_changed), unix_monitor); g_signal_connect (unix_monitor->mount_monitor, - "mountpoints_changed", G_CALLBACK (mountpoints_changed), + "mountpoints-changed", G_CALLBACK (mountpoints_changed), unix_monitor); update_volumes (unix_monitor); update_mounts (unix_monitor); } -/** - * g_unix_volume_monitor_new: - * - * Returns: a new #GVolumeMonitor. - **/ GVolumeMonitor * _g_unix_volume_monitor_new (void) { @@ -249,13 +287,6 @@ diff_sorted_lists (GList *list1, } } -/** - * _g_unix_volume_monitor_lookup_volume_for_mount_path: - * @monitor: - * @mount_path: - * - * Returns: #GUnixVolume for the given @mount_path. - **/ GUnixVolume * _g_unix_volume_monitor_lookup_volume_for_mount_path (GUnixVolumeMonitor *monitor, const char *mount_path) @@ -298,7 +329,7 @@ update_volumes (GUnixVolumeMonitor *monitor) GList *l; GUnixVolume *volume; - new_mountpoints = g_get_unix_mount_points (NULL); + new_mountpoints = g_unix_mount_points_get (NULL); new_mountpoints = g_list_sort (new_mountpoints, (GCompareFunc) g_unix_mount_point_compare); @@ -316,7 +347,8 @@ update_volumes (GUnixVolumeMonitor *monitor) { _g_unix_volume_disconnected (volume); monitor->volumes = g_list_remove (monitor->volumes, volume); - g_signal_emit_by_name (monitor, "volume_removed", volume); + g_signal_emit_by_name (monitor, "volume-removed", volume); + g_signal_emit_by_name (volume, "removed"); g_object_unref (volume); } } @@ -329,15 +361,13 @@ update_volumes (GUnixVolumeMonitor *monitor) if (volume) { monitor->volumes = g_list_prepend (monitor->volumes, volume); - g_signal_emit_by_name (monitor, "volume_added", volume); + g_signal_emit_by_name (monitor, "volume-added", volume); } } g_list_free (added); g_list_free (removed); - g_list_foreach (monitor->last_mountpoints, - (GFunc)g_unix_mount_point_free, NULL); - g_list_free (monitor->last_mountpoints); + g_list_free_full (monitor->last_mountpoints, (GDestroyNotify) g_unix_mount_point_free); monitor->last_mountpoints = new_mountpoints; } @@ -351,7 +381,7 @@ update_mounts (GUnixVolumeMonitor *monitor) GUnixVolume *volume; const char *mount_path; - new_mounts = g_get_unix_mounts (NULL); + new_mounts = g_unix_mounts_get (NULL); new_mounts = g_list_sort (new_mounts, (GCompareFunc) g_unix_mount_compare); @@ -363,16 +393,13 @@ update_mounts (GUnixVolumeMonitor *monitor) { GUnixMountEntry *mount_entry = l->data; - g_warning ("%s %s removed", - g_unix_mount_get_mount_path (mount_entry), - g_unix_mount_get_device_path (mount_entry)); - mount = find_mount_by_mountpath (monitor, g_unix_mount_get_mount_path (mount_entry)); if (mount) { _g_unix_mount_unmounted (mount); monitor->mounts = g_list_remove (monitor->mounts, mount); - g_signal_emit_by_name (monitor, "mount_removed", mount); + g_signal_emit_by_name (monitor, "mount-removed", mount); + g_signal_emit_by_name (mount, "unmounted"); g_object_unref (mount); } } @@ -388,14 +415,12 @@ update_mounts (GUnixVolumeMonitor *monitor) if (mount) { monitor->mounts = g_list_prepend (monitor->mounts, mount); - g_signal_emit_by_name (monitor, "mount_added", mount); + g_signal_emit_by_name (monitor, "mount-added", mount); } } g_list_free (added); g_list_free (removed); - g_list_foreach (monitor->last_mounts, - (GFunc)g_unix_mount_free, NULL); - g_list_free (monitor->last_mounts); + g_list_free_full (monitor->last_mounts, (GDestroyNotify) g_unix_mount_free); monitor->last_mounts = new_mounts; }