1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 3 /* GIO - GLib Input, Output and Streaming Library 4 * 5 * Copyright (C) 2006-2007 Red Hat, Inc. 6 * 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. 11 * 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. 16 * 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. 21 * 22 * Author: Alexander Larsson <alexl (at) redhat.com> 23 * David Zeuthen <davidz (at) redhat.com> 24 */ 25 26 #include "config.h" 27 #include "gvolumemonitor.h" 28 #include "gvolume.h" 29 #include "gmount.h" 30 #include "gdrive.h" 31 #include "glibintl.h" 32 33 #include "gioalias.h" 34 35 /** 36 * SECTION:gvolumemonitor 37 * @short_description: Volume Monitor 38 * @include: gio/gio.h 39 * @see_also: #GFileMonitor 40 * 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. 44 **/ 45 46 G_DEFINE_TYPE (GVolumeMonitor, g_volume_monitor, G_TYPE_OBJECT); 47 48 enum { 49 VOLUME_ADDED, 50 VOLUME_REMOVED, 51 VOLUME_CHANGED, 52 MOUNT_ADDED, 53 MOUNT_REMOVED, 54 MOUNT_PRE_UNMOUNT, 55 MOUNT_CHANGED, 56 DRIVE_CONNECTED, 57 DRIVE_DISCONNECTED, 58 DRIVE_CHANGED, 59 DRIVE_EJECT_BUTTON, 60 LAST_SIGNAL 61 }; 62 63 static guint signals[LAST_SIGNAL] = { 0 }; 64 65 66 static void 67 g_volume_monitor_finalize (GObject *object) 68 { 69 GVolumeMonitor *monitor; 70 71 monitor = G_VOLUME_MONITOR (object); 72 73 G_OBJECT_CLASS (g_volume_monitor_parent_class)->finalize (object); 74 } 75 76 static void 77 g_volume_monitor_class_init (GVolumeMonitorClass *klass) 78 { 79 GObjectClass *gobject_class = G_OBJECT_CLASS (klass); 80 81 gobject_class->finalize = g_volume_monitor_finalize; 82 83 /** 84 * GVolumeMonitor::volume-added: 85 * @volume_monitor: The volume monitor emitting the signal. 86 * @volume: a #GVolume that was added. 87 * 88 * Emitted when a mountable volume is added to the system. 89 **/ 90 signals[VOLUME_ADDED] = g_signal_new (I_("volume-added"), 91 G_TYPE_VOLUME_MONITOR, 92 G_SIGNAL_RUN_LAST, 93 G_STRUCT_OFFSET (GVolumeMonitorClass, volume_added), 94 NULL, NULL, 95 g_cclosure_marshal_VOID__OBJECT, 96 G_TYPE_NONE, 1, G_TYPE_VOLUME); 97 98 /** 99 * GVolumeMonitor::volume-removed: 100 * @volume_monitor: The volume monitor emitting the signal. 101 * @volume: a #GVolume that was removed. 102 * 103 * Emitted when a mountable volume is removed from the system. 104 **/ 105 signals[VOLUME_REMOVED] = g_signal_new (I_("volume-removed"), 106 G_TYPE_VOLUME_MONITOR, 107 G_SIGNAL_RUN_LAST, 108 G_STRUCT_OFFSET (GVolumeMonitorClass, volume_removed), 109 NULL, NULL, 110 g_cclosure_marshal_VOID__OBJECT, 111 G_TYPE_NONE, 1, G_TYPE_VOLUME); 112 113 /** 114 * GVolumeMonitor::volume-changed: 115 * @volume_monitor: The volume monitor emitting the signal. 116 * @volume: a #GVolume that changed. 117 * 118 * Emitted when mountable volume is changed. 119 **/ 120 signals[VOLUME_CHANGED] = g_signal_new (I_("volume-changed"), 121 G_TYPE_VOLUME_MONITOR, 122 G_SIGNAL_RUN_LAST, 123 G_STRUCT_OFFSET (GVolumeMonitorClass, volume_changed), 124 NULL, NULL, 125 g_cclosure_marshal_VOID__OBJECT, 126 G_TYPE_NONE, 1, G_TYPE_VOLUME); 127 128 /** 129 * GVolumeMonitor::mount-added: 130 * @volume_monitor: The volume monitor emitting the signal. 131 * @mount: a #GMount that was added. 132 * 133 * Emitted when a mount is added. 134 **/ 135 signals[MOUNT_ADDED] = g_signal_new (I_("mount-added"), 136 G_TYPE_VOLUME_MONITOR, 137 G_SIGNAL_RUN_LAST, 138 G_STRUCT_OFFSET (GVolumeMonitorClass, mount_added), 139 NULL, NULL, 140 g_cclosure_marshal_VOID__OBJECT, 141 G_TYPE_NONE, 1, G_TYPE_MOUNT); 142 143 /** 144 * GVolumeMonitor::mount-removed: 145 * @volume_monitor: The volume monitor emitting the signal. 146 * @mount: a #GMount that was removed. 147 * 148 * Emitted when a mount is removed. 149 **/ 150 signals[MOUNT_REMOVED] = g_signal_new (I_("mount-removed"), 151 G_TYPE_VOLUME_MONITOR, 152 G_SIGNAL_RUN_LAST, 153 G_STRUCT_OFFSET (GVolumeMonitorClass, mount_removed), 154 NULL, NULL, 155 g_cclosure_marshal_VOID__OBJECT, 156 G_TYPE_NONE, 1, G_TYPE_MOUNT); 157 158 /** 159 * GVolumeMonitor::mount-pre-unmount: 160 * @volume_monitor: The volume monitor emitting the signal. 161 * @mount: a #GMount that is being unmounted. 162 * 163 * Emitted when a mount is about to be removed. 164 **/ 165 signals[MOUNT_PRE_UNMOUNT] = g_signal_new (I_("mount-pre-unmount"), 166 G_TYPE_VOLUME_MONITOR, 167 G_SIGNAL_RUN_LAST, 168 G_STRUCT_OFFSET (GVolumeMonitorClass, mount_pre_unmount), 169 NULL, NULL, 170 g_cclosure_marshal_VOID__OBJECT, 171 G_TYPE_NONE, 1, G_TYPE_MOUNT); 172 173 /** 174 * GVolumeMonitor::mount-changed: 175 * @volume_monitor: The volume monitor emitting the signal. 176 * @mount: a #GMount that changed. 177 * 178 * Emitted when a mount changes. 179 **/ 180 signals[MOUNT_CHANGED] = g_signal_new (I_("mount-changed"), 181 G_TYPE_VOLUME_MONITOR, 182 G_SIGNAL_RUN_LAST, 183 G_STRUCT_OFFSET (GVolumeMonitorClass, mount_changed), 184 NULL, NULL, 185 g_cclosure_marshal_VOID__OBJECT, 186 G_TYPE_NONE, 1, G_TYPE_MOUNT); 187 188 /** 189 * GVolumeMonitor::drive-connected: 190 * @volume_monitor: The volume monitor emitting the signal. 191 * @drive: a #GDrive that was connected. 192 * 193 * Emitted when a drive is connected to the system. 194 **/ 195 signals[DRIVE_CONNECTED] = g_signal_new (I_("drive-connected"), 196 G_TYPE_VOLUME_MONITOR, 197 G_SIGNAL_RUN_LAST, 198 G_STRUCT_OFFSET (GVolumeMonitorClass, drive_connected), 199 NULL, NULL, 200 g_cclosure_marshal_VOID__OBJECT, 201 G_TYPE_NONE, 1, G_TYPE_DRIVE); 202 203 /** 204 * GVolumeMonitor::drive-disconnected: 205 * @volume_monitor: The volume monitor emitting the signal. 206 * @drive: a #GDrive that was disconnected. 207 * 208 * Emitted when a drive is disconnected from the system. 209 **/ 210 signals[DRIVE_DISCONNECTED] = g_signal_new (I_("drive-disconnected"), 211 G_TYPE_VOLUME_MONITOR, 212 G_SIGNAL_RUN_LAST, 213 G_STRUCT_OFFSET (GVolumeMonitorClass, drive_disconnected), 214 NULL, NULL, 215 g_cclosure_marshal_VOID__OBJECT, 216 G_TYPE_NONE, 1, G_TYPE_DRIVE); 217 218 /** 219 * GVolumeMonitor::drive-changed: 220 * @volume_monitor: The volume monitor emitting the signal. 221 * @drive: the drive that changed 222 * 223 * Emitted when a drive changes. 224 **/ 225 signals[DRIVE_CHANGED] = g_signal_new (I_("drive-changed"), 226 G_TYPE_VOLUME_MONITOR, 227 G_SIGNAL_RUN_LAST, 228 G_STRUCT_OFFSET (GVolumeMonitorClass, drive_changed), 229 NULL, NULL, 230 g_cclosure_marshal_VOID__OBJECT, 231 G_TYPE_NONE, 1, G_TYPE_DRIVE); 232 233 /** 234 * GVolumeMonitor::drive-eject-button: 235 * @volume_monitor: The volume monitor emitting the signal. 236 * @drive: the drive where the eject button was pressed 237 * 238 * Emitted when the eject button is pressed on @drive. 239 * 240 * Since: 2.18 241 **/ 242 signals[DRIVE_EJECT_BUTTON] = g_signal_new (I_("drive-eject-button"), 243 G_TYPE_VOLUME_MONITOR, 244 G_SIGNAL_RUN_LAST, 245 G_STRUCT_OFFSET (GVolumeMonitorClass, drive_eject_button), 246 NULL, NULL, 247 g_cclosure_marshal_VOID__OBJECT, 248 G_TYPE_NONE, 1, G_TYPE_DRIVE); 249 250 } 251 252 static void 253 g_volume_monitor_init (GVolumeMonitor *monitor) 254 { 255 } 256 257 258 /** 259 * g_volume_monitor_get_connected_drives: 260 * @volume_monitor: a #GVolumeMonitor. 261 * 262 * Gets a list of drives connected to the system. 263 * 264 * The returned list should be freed with g_list_free(), after 265 * its elements have been unreffed with g_object_unref(). 266 * 267 * Returns: a #GList of connected #GDrive objects. 268 **/ 269 GList * 270 g_volume_monitor_get_connected_drives (GVolumeMonitor *volume_monitor) 271 { 272 GVolumeMonitorClass *class; 273 274 g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL); 275 276 class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor); 277 278 return class->get_connected_drives (volume_monitor); 279 } 280 281 /** 282 * g_volume_monitor_get_volumes: 283 * @volume_monitor: a #GVolumeMonitor. 284 * 285 * Gets a list of the volumes on the system. 286 * 287 * The returned list should be freed with g_list_free(), after 288 * its elements have been unreffed with g_object_unref(). 289 * 290 * Returns: a #GList of #GVolume objects. 291 **/ 292 GList * 293 g_volume_monitor_get_volumes (GVolumeMonitor *volume_monitor) 294 { 295 GVolumeMonitorClass *class; 296 297 g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL); 298 299 class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor); 300 301 return class->get_volumes (volume_monitor); 302 } 303 304 /** 305 * g_volume_monitor_get_mounts: 306 * @volume_monitor: a #GVolumeMonitor. 307 * 308 * Gets a list of the mounts on the system. 309 * 310 * The returned list should be freed with g_list_free(), after 311 * its elements have been unreffed with g_object_unref(). 312 * 313 * Returns: a #GList of #GMount objects. 314 **/ 315 GList * 316 g_volume_monitor_get_mounts (GVolumeMonitor *volume_monitor) 317 { 318 GVolumeMonitorClass *class; 319 320 g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL); 321 322 class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor); 323 324 return class->get_mounts (volume_monitor); 325 } 326 327 /** 328 * g_volume_monitor_get_volume_for_uuid: 329 * @volume_monitor: a #GVolumeMonitor. 330 * @uuid: the UUID to look for 331 * 332 * Finds a #GVolume object by its UUID (see g_volume_get_uuid()) 333 * 334 * Returns: a #GVolume or %NULL if no such volume is available. 335 * Free the returned object with g_object_unref(). 336 **/ 337 GVolume * 338 g_volume_monitor_get_volume_for_uuid (GVolumeMonitor *volume_monitor, 339 const char *uuid) 340 { 341 GVolumeMonitorClass *class; 342 343 g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL); 344 g_return_val_if_fail (uuid != NULL, NULL); 345 346 class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor); 347 348 return class->get_volume_for_uuid (volume_monitor, uuid); 349 } 350 351 /** 352 * g_volume_monitor_get_mount_for_uuid: 353 * @volume_monitor: a #GVolumeMonitor. 354 * @uuid: the UUID to look for 355 * 356 * Finds a #GMount object by its UUID (see g_mount_get_uuid()) 357 * 358 * Returns: a #GMount or %NULL if no such mount is available. 359 * Free the returned object with g_object_unref(). 360 **/ 361 GMount * 362 g_volume_monitor_get_mount_for_uuid (GVolumeMonitor *volume_monitor, 363 const char *uuid) 364 { 365 GVolumeMonitorClass *class; 366 367 g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL); 368 g_return_val_if_fail (uuid != NULL, NULL); 369 370 class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor); 371 372 return class->get_mount_for_uuid (volume_monitor, uuid); 373 } 374 375 376 #define __G_VOLUME_MONITOR_C__ 377 #include "gioaliasdef.c" 378