1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
3 /* GIO - GLib Input, Output and Streaming Library
5 * Copyright (C) 2006-2007 Red Hat, Inc.
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General
18 * Public License along with this library; if not, write to the
19 * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
20 * Boston, MA 02111-1307, USA.
22 * Author: Alexander Larsson <alexl@redhat.com>
23 * David Zeuthen <davidz@redhat.com>
27 #include "gvolumemonitor.h"
36 * SECTION:gvolumemonitor
37 * @short_description: Volume Monitor
39 * @see_also: #GFileMonitor
41 * #GVolumeMonitor is for listing the user interesting devices and volumes
42 * on the computer. In other words, what a file selector or file manager
43 * would show in a sidebar.
45 * #GVolumeMonitor is not <link
46 * linkend="g-main-context-push-thread-default">thread-default-context
47 * aware</link>, and so should not be used other than from the main
48 * thread, with no thread-default-context active.
51 G_DEFINE_TYPE (GVolumeMonitor, g_volume_monitor, G_TYPE_OBJECT);
69 static guint signals[LAST_SIGNAL] = { 0 };
73 g_volume_monitor_finalize (GObject *object)
75 G_OBJECT_CLASS (g_volume_monitor_parent_class)->finalize (object);
79 g_volume_monitor_class_init (GVolumeMonitorClass *klass)
81 GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
83 gobject_class->finalize = g_volume_monitor_finalize;
86 * GVolumeMonitor::volume-added:
87 * @volume_monitor: The volume monitor emitting the signal.
88 * @volume: a #GVolume that was added.
90 * Emitted when a mountable volume is added to the system.
92 signals[VOLUME_ADDED] = g_signal_new (I_("volume-added"),
93 G_TYPE_VOLUME_MONITOR,
95 G_STRUCT_OFFSET (GVolumeMonitorClass, volume_added),
97 g_cclosure_marshal_VOID__OBJECT,
98 G_TYPE_NONE, 1, G_TYPE_VOLUME);
101 * GVolumeMonitor::volume-removed:
102 * @volume_monitor: The volume monitor emitting the signal.
103 * @volume: a #GVolume that was removed.
105 * Emitted when a mountable volume is removed from the system.
107 signals[VOLUME_REMOVED] = g_signal_new (I_("volume-removed"),
108 G_TYPE_VOLUME_MONITOR,
110 G_STRUCT_OFFSET (GVolumeMonitorClass, volume_removed),
112 g_cclosure_marshal_VOID__OBJECT,
113 G_TYPE_NONE, 1, G_TYPE_VOLUME);
116 * GVolumeMonitor::volume-changed:
117 * @volume_monitor: The volume monitor emitting the signal.
118 * @volume: a #GVolume that changed.
120 * Emitted when mountable volume is changed.
122 signals[VOLUME_CHANGED] = g_signal_new (I_("volume-changed"),
123 G_TYPE_VOLUME_MONITOR,
125 G_STRUCT_OFFSET (GVolumeMonitorClass, volume_changed),
127 g_cclosure_marshal_VOID__OBJECT,
128 G_TYPE_NONE, 1, G_TYPE_VOLUME);
131 * GVolumeMonitor::mount-added:
132 * @volume_monitor: The volume monitor emitting the signal.
133 * @mount: a #GMount that was added.
135 * Emitted when a mount is added.
137 signals[MOUNT_ADDED] = g_signal_new (I_("mount-added"),
138 G_TYPE_VOLUME_MONITOR,
140 G_STRUCT_OFFSET (GVolumeMonitorClass, mount_added),
142 g_cclosure_marshal_VOID__OBJECT,
143 G_TYPE_NONE, 1, G_TYPE_MOUNT);
146 * GVolumeMonitor::mount-removed:
147 * @volume_monitor: The volume monitor emitting the signal.
148 * @mount: a #GMount that was removed.
150 * Emitted when a mount is removed.
152 signals[MOUNT_REMOVED] = g_signal_new (I_("mount-removed"),
153 G_TYPE_VOLUME_MONITOR,
155 G_STRUCT_OFFSET (GVolumeMonitorClass, mount_removed),
157 g_cclosure_marshal_VOID__OBJECT,
158 G_TYPE_NONE, 1, G_TYPE_MOUNT);
161 * GVolumeMonitor::mount-pre-unmount:
162 * @volume_monitor: The volume monitor emitting the signal.
163 * @mount: a #GMount that is being unmounted.
165 * Emitted when a mount is about to be removed.
167 signals[MOUNT_PRE_UNMOUNT] = g_signal_new (I_("mount-pre-unmount"),
168 G_TYPE_VOLUME_MONITOR,
170 G_STRUCT_OFFSET (GVolumeMonitorClass, mount_pre_unmount),
172 g_cclosure_marshal_VOID__OBJECT,
173 G_TYPE_NONE, 1, G_TYPE_MOUNT);
176 * GVolumeMonitor::mount-changed:
177 * @volume_monitor: The volume monitor emitting the signal.
178 * @mount: a #GMount that changed.
180 * Emitted when a mount changes.
182 signals[MOUNT_CHANGED] = g_signal_new (I_("mount-changed"),
183 G_TYPE_VOLUME_MONITOR,
185 G_STRUCT_OFFSET (GVolumeMonitorClass, mount_changed),
187 g_cclosure_marshal_VOID__OBJECT,
188 G_TYPE_NONE, 1, G_TYPE_MOUNT);
191 * GVolumeMonitor::drive-connected:
192 * @volume_monitor: The volume monitor emitting the signal.
193 * @drive: a #GDrive that was connected.
195 * Emitted when a drive is connected to the system.
197 signals[DRIVE_CONNECTED] = g_signal_new (I_("drive-connected"),
198 G_TYPE_VOLUME_MONITOR,
200 G_STRUCT_OFFSET (GVolumeMonitorClass, drive_connected),
202 g_cclosure_marshal_VOID__OBJECT,
203 G_TYPE_NONE, 1, G_TYPE_DRIVE);
206 * GVolumeMonitor::drive-disconnected:
207 * @volume_monitor: The volume monitor emitting the signal.
208 * @drive: a #GDrive that was disconnected.
210 * Emitted when a drive is disconnected from the system.
212 signals[DRIVE_DISCONNECTED] = g_signal_new (I_("drive-disconnected"),
213 G_TYPE_VOLUME_MONITOR,
215 G_STRUCT_OFFSET (GVolumeMonitorClass, drive_disconnected),
217 g_cclosure_marshal_VOID__OBJECT,
218 G_TYPE_NONE, 1, G_TYPE_DRIVE);
221 * GVolumeMonitor::drive-changed:
222 * @volume_monitor: The volume monitor emitting the signal.
223 * @drive: the drive that changed
225 * Emitted when a drive changes.
227 signals[DRIVE_CHANGED] = g_signal_new (I_("drive-changed"),
228 G_TYPE_VOLUME_MONITOR,
230 G_STRUCT_OFFSET (GVolumeMonitorClass, drive_changed),
232 g_cclosure_marshal_VOID__OBJECT,
233 G_TYPE_NONE, 1, G_TYPE_DRIVE);
236 * GVolumeMonitor::drive-eject-button:
237 * @volume_monitor: The volume monitor emitting the signal.
238 * @drive: the drive where the eject button was pressed
240 * Emitted when the eject button is pressed on @drive.
244 signals[DRIVE_EJECT_BUTTON] = g_signal_new (I_("drive-eject-button"),
245 G_TYPE_VOLUME_MONITOR,
247 G_STRUCT_OFFSET (GVolumeMonitorClass, drive_eject_button),
249 g_cclosure_marshal_VOID__OBJECT,
250 G_TYPE_NONE, 1, G_TYPE_DRIVE);
253 * GVolumeMonitor::drive-stop-button:
254 * @volume_monitor: The volume monitor emitting the signal.
255 * @drive: the drive where the stop button was pressed
257 * Emitted when the stop button is pressed on @drive.
261 signals[DRIVE_STOP_BUTTON] = g_signal_new (I_("drive-stop-button"),
262 G_TYPE_VOLUME_MONITOR,
264 G_STRUCT_OFFSET (GVolumeMonitorClass, drive_stop_button),
266 g_cclosure_marshal_VOID__OBJECT,
267 G_TYPE_NONE, 1, G_TYPE_DRIVE);
272 g_volume_monitor_init (GVolumeMonitor *monitor)
278 * g_volume_monitor_get_connected_drives:
279 * @volume_monitor: a #GVolumeMonitor.
281 * Gets a list of drives connected to the system.
283 * The returned list should be freed with g_list_free(), after
284 * its elements have been unreffed with g_object_unref().
286 * Returns: a #GList of connected #GDrive objects.
289 g_volume_monitor_get_connected_drives (GVolumeMonitor *volume_monitor)
291 GVolumeMonitorClass *class;
293 g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL);
295 class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor);
297 return class->get_connected_drives (volume_monitor);
301 * g_volume_monitor_get_volumes:
302 * @volume_monitor: a #GVolumeMonitor.
304 * Gets a list of the volumes on the system.
306 * The returned list should be freed with g_list_free(), after
307 * its elements have been unreffed with g_object_unref().
309 * Returns: a #GList of #GVolume objects.
312 g_volume_monitor_get_volumes (GVolumeMonitor *volume_monitor)
314 GVolumeMonitorClass *class;
316 g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL);
318 class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor);
320 return class->get_volumes (volume_monitor);
324 * g_volume_monitor_get_mounts:
325 * @volume_monitor: a #GVolumeMonitor.
327 * Gets a list of the mounts on the system.
329 * The returned list should be freed with g_list_free(), after
330 * its elements have been unreffed with g_object_unref().
332 * Returns: a #GList of #GMount objects.
335 g_volume_monitor_get_mounts (GVolumeMonitor *volume_monitor)
337 GVolumeMonitorClass *class;
339 g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL);
341 class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor);
343 return class->get_mounts (volume_monitor);
347 * g_volume_monitor_get_volume_for_uuid:
348 * @volume_monitor: a #GVolumeMonitor.
349 * @uuid: the UUID to look for
351 * Finds a #GVolume object by its UUID (see g_volume_get_uuid())
353 * Returns: a #GVolume or %NULL if no such volume is available.
354 * Free the returned object with g_object_unref().
357 g_volume_monitor_get_volume_for_uuid (GVolumeMonitor *volume_monitor,
360 GVolumeMonitorClass *class;
362 g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL);
363 g_return_val_if_fail (uuid != NULL, NULL);
365 class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor);
367 return class->get_volume_for_uuid (volume_monitor, uuid);
371 * g_volume_monitor_get_mount_for_uuid:
372 * @volume_monitor: a #GVolumeMonitor.
373 * @uuid: the UUID to look for
375 * Finds a #GMount object by its UUID (see g_mount_get_uuid())
377 * Returns: a #GMount or %NULL if no such mount is available.
378 * Free the returned object with g_object_unref().
381 g_volume_monitor_get_mount_for_uuid (GVolumeMonitor *volume_monitor,
384 GVolumeMonitorClass *class;
386 g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL);
387 g_return_val_if_fail (uuid != NULL, NULL);
389 class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor);
391 return class->get_mount_for_uuid (volume_monitor, uuid);
395 #define __G_VOLUME_MONITOR_C__
396 #include "gioaliasdef.c"