X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fgunionvolumemonitor.c;h=4c3049b958014f8cee3db5d5832e188b32e25a05;hb=4482977238ae80f64c2fe318d1500f4662c73980;hp=4115c34663ce0154c2c75e07c5343a53e8960618;hpb=f5483302757a9c03c43e25c86cea4a7bd5aaaf3f;p=platform%2Fupstream%2Fglib.git diff --git a/gio/gunionvolumemonitor.c b/gio/gunionvolumemonitor.c index 4115c34..4c3049b 100644 --- a/gio/gunionvolumemonitor.c +++ b/gio/gunionvolumemonitor.c @@ -15,9 +15,7 @@ * 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 @@ -38,7 +36,6 @@ #include "glibintl.h" -#include "gioalias.h" struct _GUnionVolumeMonitor { GVolumeMonitor parent; @@ -53,7 +50,7 @@ static void g_union_volume_monitor_remove_monitor (GUnionVolumeMonitor *union_mo #define g_union_volume_monitor_get_type _g_union_volume_monitor_get_type G_DEFINE_TYPE (GUnionVolumeMonitor, g_union_volume_monitor, G_TYPE_VOLUME_MONITOR); -static GStaticRecMutex the_volume_monitor_mutex = G_STATIC_REC_MUTEX_INIT; +static GRecMutex the_volume_monitor_mutex; static GUnionVolumeMonitor *the_volume_monitor = NULL; @@ -80,12 +77,21 @@ static void g_union_volume_monitor_dispose (GObject *object) { GUnionVolumeMonitor *monitor; - + GVolumeMonitor *child_monitor; + GList *l; + monitor = G_UNION_VOLUME_MONITOR (object); - g_static_rec_mutex_lock (&the_volume_monitor_mutex); + g_rec_mutex_lock (&the_volume_monitor_mutex); the_volume_monitor = NULL; - g_static_rec_mutex_unlock (&the_volume_monitor_mutex); + + for (l = monitor->monitors; l != NULL; l = l->next) + { + child_monitor = l->data; + g_object_run_dispose (G_OBJECT (child_monitor)); + } + + g_rec_mutex_unlock (&the_volume_monitor_mutex); G_OBJECT_CLASS (g_union_volume_monitor_parent_class)->dispose (object); } @@ -102,7 +108,7 @@ get_mounts (GVolumeMonitor *volume_monitor) res = NULL; - g_static_rec_mutex_lock (&the_volume_monitor_mutex); + g_rec_mutex_lock (&the_volume_monitor_mutex); for (l = monitor->monitors; l != NULL; l = l->next) { @@ -111,7 +117,7 @@ get_mounts (GVolumeMonitor *volume_monitor) res = g_list_concat (res, g_volume_monitor_get_mounts (child_monitor)); } - g_static_rec_mutex_unlock (&the_volume_monitor_mutex); + g_rec_mutex_unlock (&the_volume_monitor_mutex); return res; } @@ -128,7 +134,7 @@ get_volumes (GVolumeMonitor *volume_monitor) res = NULL; - g_static_rec_mutex_lock (&the_volume_monitor_mutex); + g_rec_mutex_lock (&the_volume_monitor_mutex); for (l = monitor->monitors; l != NULL; l = l->next) { @@ -137,7 +143,7 @@ get_volumes (GVolumeMonitor *volume_monitor) res = g_list_concat (res, g_volume_monitor_get_volumes (child_monitor)); } - g_static_rec_mutex_unlock (&the_volume_monitor_mutex); + g_rec_mutex_unlock (&the_volume_monitor_mutex); return res; } @@ -154,7 +160,7 @@ get_connected_drives (GVolumeMonitor *volume_monitor) res = NULL; - g_static_rec_mutex_lock (&the_volume_monitor_mutex); + g_rec_mutex_lock (&the_volume_monitor_mutex); for (l = monitor->monitors; l != NULL; l = l->next) { @@ -163,7 +169,7 @@ get_connected_drives (GVolumeMonitor *volume_monitor) res = g_list_concat (res, g_volume_monitor_get_connected_drives (child_monitor)); } - g_static_rec_mutex_unlock (&the_volume_monitor_mutex); + g_rec_mutex_unlock (&the_volume_monitor_mutex); return res; } @@ -180,7 +186,7 @@ get_volume_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid) volume = NULL; - g_static_rec_mutex_lock (&the_volume_monitor_mutex); + g_rec_mutex_lock (&the_volume_monitor_mutex); for (l = monitor->monitors; l != NULL; l = l->next) { @@ -192,7 +198,7 @@ get_volume_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid) } - g_static_rec_mutex_unlock (&the_volume_monitor_mutex); + g_rec_mutex_unlock (&the_volume_monitor_mutex); return volume; } @@ -209,7 +215,7 @@ get_mount_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid) mount = NULL; - g_static_rec_mutex_lock (&the_volume_monitor_mutex); + g_rec_mutex_lock (&the_volume_monitor_mutex); for (l = monitor->monitors; l != NULL; l = l->next) { @@ -221,7 +227,7 @@ get_mount_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid) } - g_static_rec_mutex_unlock (&the_volume_monitor_mutex); + g_rec_mutex_unlock (&the_volume_monitor_mutex); return mount; } @@ -354,6 +360,16 @@ child_drive_eject_button (GVolumeMonitor *child_monitor, } static void +child_drive_stop_button (GVolumeMonitor *child_monitor, + GDrive *child_drive, + GUnionVolumeMonitor *union_monitor) +{ + g_signal_emit_by_name (union_monitor, + "drive-stop-button", + child_drive); +} + +static void g_union_volume_monitor_add_monitor (GUnionVolumeMonitor *union_monitor, GVolumeMonitor *volume_monitor) { @@ -375,6 +391,7 @@ g_union_volume_monitor_add_monitor (GUnionVolumeMonitor *union_monitor, g_signal_connect (volume_monitor, "drive-disconnected", (GCallback)child_drive_disconnected, union_monitor); g_signal_connect (volume_monitor, "drive-changed", (GCallback)child_drive_changed, union_monitor); g_signal_connect (volume_monitor, "drive-eject-button", (GCallback)child_drive_eject_button, union_monitor); + g_signal_connect (volume_monitor, "drive-stop-button", (GCallback)child_drive_stop_button, union_monitor); } static void @@ -400,6 +417,7 @@ g_union_volume_monitor_remove_monitor (GUnionVolumeMonitor *union_monitor, g_signal_handlers_disconnect_by_func (child_monitor, child_drive_disconnected, union_monitor); g_signal_handlers_disconnect_by_func (child_monitor, child_drive_changed, union_monitor); g_signal_handlers_disconnect_by_func (child_monitor, child_drive_eject_button, union_monitor); + g_signal_handlers_disconnect_by_func (child_monitor, child_drive_stop_button, union_monitor); } static GType @@ -535,7 +553,7 @@ g_union_volume_monitor_new (void) * * Gets the volume monitor used by gio. * - * Returns: a reference to the #GVolumeMonitor used by gio. Call + * Returns: (transfer full): a reference to the #GVolumeMonitor used by gio. Call * g_object_unref() when done with it. **/ GVolumeMonitor * @@ -543,7 +561,7 @@ g_volume_monitor_get (void) { GVolumeMonitor *vm; - g_static_rec_mutex_lock (&the_volume_monitor_mutex); + g_rec_mutex_lock (&the_volume_monitor_mutex); if (the_volume_monitor) vm = G_VOLUME_MONITOR (g_object_ref (the_volume_monitor)); @@ -554,20 +572,13 @@ g_volume_monitor_get (void) vm = G_VOLUME_MONITOR (the_volume_monitor); } - g_static_rec_mutex_unlock (&the_volume_monitor_mutex); + g_rec_mutex_unlock (&the_volume_monitor_mutex); return vm; } -/** - * _g_mount_get_for_mount_path: - * @mountpoint: a string. - * @cancellable: a #GCancellable, or %NULL - * - * Returns: a #GMount for given @mount_path or %NULL. - **/ GMount * -_g_mount_get_for_mount_path (const char *mount_path, +_g_mount_get_for_mount_path (const gchar *mount_path, GCancellable *cancellable) { GNativeVolumeMonitorClass *klass; @@ -581,9 +592,9 @@ _g_mount_get_for_mount_path (const char *mount_path, if (klass->get_mount_for_mount_path) { - g_static_rec_mutex_lock (&the_volume_monitor_mutex); + g_rec_mutex_lock (&the_volume_monitor_mutex); mount = klass->get_mount_for_mount_path (mount_path, cancellable); - g_static_rec_mutex_unlock (&the_volume_monitor_mutex); + g_rec_mutex_unlock (&the_volume_monitor_mutex); } /* TODO: How do we know this succeeded? Keep in mind that the native @@ -626,13 +637,13 @@ _g_mount_get_for_mount_path (const char *mount_path, * blocks of a block device that is already represented by the native * volume monitor (for example a CD Audio file system driver). Such * a driver will generate its own #GMount object that needs to be - * assoicated with the #GVolume object that represents the volume. + * associated with the #GVolume object that represents the volume. * * The other is for implementing a #GVolumeMonitor whose sole purpose * is to return #GVolume objects representing entries in the users * "favorite servers" list or similar. * - * Returns: the #GVolume object that is the parent for @mount or %NULL + * Returns: (transfer full): the #GVolume object that is the parent for @mount or %NULL * if no wants to adopt the #GMount. * * Deprecated: 2.20: Instead of using this function, #GVolumeMonitor @@ -656,7 +667,7 @@ g_volume_monitor_adopt_orphan_mount (GMount *mount) volume = NULL; - g_static_rec_mutex_lock (&the_volume_monitor_mutex); + g_rec_mutex_lock (&the_volume_monitor_mutex); for (l = the_volume_monitor->monitors; l != NULL; l = l->next) { @@ -671,11 +682,7 @@ g_volume_monitor_adopt_orphan_mount (GMount *mount) } } - g_static_rec_mutex_unlock (&the_volume_monitor_mutex); + g_rec_mutex_unlock (&the_volume_monitor_mutex); return volume; } - - -#define __G_UNION_VOLUME_MONITOR_C__ -#include "gioaliasdef.c"