nexmon – Blame information for rev 1

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