Lines 51-56
Link Here
|
51 |
char *icon; |
51 |
char *icon; |
52 |
char *target_uri; |
52 |
char *target_uri; |
53 |
char *filename; |
53 |
char *filename; |
|
|
54 |
gint vol_id; |
54 |
} NetworkLink; |
55 |
} NetworkLink; |
55 |
|
56 |
|
56 |
typedef struct { |
57 |
typedef struct { |
Lines 154-160
Link Here
|
154 |
static char * |
155 |
static char * |
155 |
get_data_for_link (const char *uri, |
156 |
get_data_for_link (const char *uri, |
156 |
const char *display_name, |
157 |
const char *display_name, |
157 |
const char *icon) |
158 |
const char *icon, |
|
|
159 |
gint vol_id) |
158 |
{ |
160 |
{ |
159 |
char *data; |
161 |
char *data; |
160 |
|
162 |
|
Lines 163-172
Link Here
|
163 |
"Name=%s\n" |
165 |
"Name=%s\n" |
164 |
"Type=FSDevice\n" |
166 |
"Type=FSDevice\n" |
165 |
"Icon=%s\n" |
167 |
"Icon=%s\n" |
166 |
"URL=%s\n", |
168 |
"URL=%s\n" |
|
|
169 |
"%sX-Gnome-Volume=%d\n", |
167 |
display_name, |
170 |
display_name, |
168 |
icon, |
171 |
icon, |
169 |
uri); |
172 |
uri, |
|
|
173 |
vol_id >= 0 ? "" : "#", |
174 |
vol_id); |
170 |
return data; |
175 |
return data; |
171 |
} |
176 |
} |
172 |
|
177 |
|
Lines 235-241
Link Here
|
235 |
add_link (const char *filename, |
240 |
add_link (const char *filename, |
236 |
const char *target_uri, |
241 |
const char *target_uri, |
237 |
const char *display_name, |
242 |
const char *display_name, |
238 |
const char *icon) |
243 |
const char *icon, |
|
|
244 |
gint vol_id) |
239 |
{ |
245 |
{ |
240 |
NetworkLink *link; |
246 |
NetworkLink *link; |
241 |
|
247 |
|
Lines 244-249
Link Here
|
244 |
link->target_uri = g_strdup (target_uri); |
250 |
link->target_uri = g_strdup (target_uri); |
245 |
link->display_name = g_strdup (display_name); |
251 |
link->display_name = g_strdup (display_name); |
246 |
link->icon = g_strdup (icon); |
252 |
link->icon = g_strdup (icon); |
|
|
253 |
link->vol_id = vol_id; |
247 |
|
254 |
|
248 |
active_links = g_list_prepend (active_links, link); |
255 |
active_links = g_list_prepend (active_links, link); |
249 |
do_link_event (filename, |
256 |
do_link_event (filename, |
Lines 264-270
Link Here
|
264 |
add_link (filename, |
271 |
add_link (filename, |
265 |
link_uri, |
272 |
link_uri, |
266 |
domain, |
273 |
domain, |
267 |
"gnome-fs-network"); |
274 |
"gnome-fs-network", |
|
|
275 |
-1); |
268 |
g_free (filename); |
276 |
g_free (filename); |
269 |
g_free (link_uri); |
277 |
g_free (link_uri); |
270 |
} |
278 |
} |
Lines 356-362
Link Here
|
356 |
{ |
364 |
{ |
357 |
return get_data_for_link (link->target_uri, |
365 |
return get_data_for_link (link->target_uri, |
358 |
link->display_name, |
366 |
link->display_name, |
359 |
link->icon); |
367 |
link->icon, |
|
|
368 |
link->vol_id); |
360 |
} |
369 |
} |
361 |
|
370 |
|
362 |
/* Call with lock held */ |
371 |
/* Call with lock held */ |
Lines 477-482
Link Here
|
477 |
|
486 |
|
478 |
} |
487 |
} |
479 |
|
488 |
|
|
|
489 |
/* functions to handle volumes */ |
490 |
static char * |
491 |
build_volume_filename (GnomeVFSVolume *volume) |
492 |
{ |
493 |
char *name, *escaped, *ret; |
494 |
|
495 |
name = gnome_vfs_volume_get_display_name (volume); |
496 |
escaped = gnome_vfs_escape_string (name); |
497 |
ret = g_strconcat ("volume-", escaped, NULL); |
498 |
g_free(escaped); |
499 |
g_free(name); |
500 |
|
501 |
return ret; |
502 |
} |
503 |
|
504 |
static void |
505 |
volume_mounted (GnomeVFSVolumeMonitor *monitor, |
506 |
GnomeVFSVolume *volume, |
507 |
gpointer user_data) |
508 |
{ |
509 |
char *volume_file, *volume_uri; |
510 |
char *volume_name, *volume_icon; |
511 |
|
512 |
G_LOCK (network); |
513 |
if (gnome_vfs_volume_is_user_visible (volume) && |
514 |
gnome_vfs_volume_get_volume_type (volume) == GNOME_VFS_VOLUME_TYPE_CONNECTED_SERVER) { |
515 |
volume_file = build_volume_filename (volume); |
516 |
volume_uri = gnome_vfs_volume_get_activation_uri (volume); |
517 |
volume_name = gnome_vfs_volume_get_display_name (volume); |
518 |
volume_icon = gnome_vfs_volume_get_icon (volume); |
519 |
|
520 |
add_link (volume_file, volume_uri, |
521 |
volume_name, volume_icon, |
522 |
gnome_vfs_volume_get_id (volume)); |
523 |
g_free (volume_icon); |
524 |
g_free (volume_name); |
525 |
g_free (volume_uri); |
526 |
g_free (volume_file); |
527 |
} |
528 |
G_UNLOCK (network); |
529 |
} |
530 |
|
531 |
static void |
532 |
volume_unmounted (GnomeVFSVolumeMonitor *volume_monitor, |
533 |
GnomeVFSVolume *volume, |
534 |
gpointer user_data) |
535 |
{ |
536 |
char *volume_file; |
537 |
|
538 |
G_LOCK (network); |
539 |
|
540 |
volume_file = build_volume_filename (volume); |
541 |
remove_link (volume_file); |
542 |
g_free (volume_file); |
543 |
|
544 |
G_UNLOCK (network); |
545 |
} |
480 |
|
546 |
|
481 |
static GnomeVFSResult |
547 |
static GnomeVFSResult |
482 |
do_open (GnomeVFSMethod *method, |
548 |
do_open (GnomeVFSMethod *method, |
Lines 1338-1343
Link Here
|
1338 |
GConfClient *gconf_client; |
1404 |
GConfClient *gconf_client; |
1339 |
GnomeVFSURI *uri; |
1405 |
GnomeVFSURI *uri; |
1340 |
char *workgroup_uri, *workgroup_escaped, *setting; |
1406 |
char *workgroup_uri, *workgroup_escaped, *setting; |
|
|
1407 |
GnomeVFSVolumeMonitor *monitor; |
1408 |
GList *volumes, *l; |
1341 |
|
1409 |
|
1342 |
gconf_client = gconf_client_get_default (); |
1410 |
gconf_client = gconf_client_get_default (); |
1343 |
|
1411 |
|
Lines 1394-1403
Link Here
|
1394 |
add_link ("smblink-root", |
1462 |
add_link ("smblink-root", |
1395 |
"smb://", |
1463 |
"smb://", |
1396 |
_("Windows Network"), |
1464 |
_("Windows Network"), |
1397 |
"gnome-fs-network"); |
1465 |
"gnome-fs-network", |
|
|
1466 |
-1); |
1398 |
} |
1467 |
} |
1399 |
|
1468 |
|
1400 |
|
1469 |
/* add non-drive volumes to network:/// folder */ |
|
|
1470 |
monitor = gnome_vfs_get_volume_monitor (); |
1471 |
volumes = gnome_vfs_volume_monitor_get_mounted_volumes (monitor); |
1472 |
for (l = volumes; l != NULL; l = l->next) { |
1473 |
GnomeVFSVolume *volume = l->data; |
1474 |
|
1475 |
if (gnome_vfs_volume_is_user_visible (volume) && |
1476 |
gnome_vfs_volume_get_volume_type (volume) == GNOME_VFS_VOLUME_TYPE_CONNECTED_SERVER) { |
1477 |
gchar *volume_file, *volume_uri; |
1478 |
gchar *volume_name, *volume_icon; |
1479 |
|
1480 |
volume_file = build_volume_filename (volume); |
1481 |
volume_uri = gnome_vfs_volume_get_activation_uri (volume); |
1482 |
volume_name = gnome_vfs_volume_get_display_name (volume); |
1483 |
volume_icon = gnome_vfs_volume_get_icon (volume); |
1484 |
|
1485 |
add_link (volume_file, volume_uri, |
1486 |
volume_name, volume_icon, |
1487 |
gnome_vfs_volume_get_id (volume)); |
1488 |
g_free (volume_icon); |
1489 |
g_free (volume_name); |
1490 |
g_free (volume_uri); |
1491 |
g_free (volume_file); |
1492 |
} |
1493 |
} |
1494 |
g_list_foreach (volumes, (GFunc) gnome_vfs_volume_unref, NULL); |
1495 |
g_list_free (volumes); |
1496 |
|
1497 |
g_signal_connect (monitor, "volume_mounted", |
1498 |
G_CALLBACK (volume_mounted), NULL); |
1499 |
g_signal_connect (monitor, "volume_unmounted", |
1500 |
G_CALLBACK (volume_unmounted), NULL); |
1501 |
|
1401 |
return &method; |
1502 |
return &method; |
1402 |
} |
1503 |
} |
1403 |
|
1504 |
|