From 4b0be687592bb98a533eb47058d29850e7c6bc20 Mon Sep 17 00:00:00 2001 From: Jannis Pohlmann <jannis@xfce.org> Date: Thu, 3 Sep 2009 16:01:12 +0200 Subject: [PATCH] Check trash/network support before showing them in the side panes. With this commit, the trash icon is only displayed when the trash:// URI scheme is supported by GIO. It also adds a network icon if network:// is supported. Items have been re-arranged a bit. The order now is: home, desktop, trash, file system, network. --- thunar/thunar-shortcuts-model.c | 15 +++++++--- thunar/thunar-tree-model.c | 49 +++++++++++++++++++++++---------- 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/thunar/thunar-shortcuts-model.c b/thunar/thunar-shortcuts-model.c index 618278cd6..2916aa919 100644 --- a/thunar/thunar-shortcuts-model.c +++ b/thunar/thunar-shortcuts-model.c @@ -241,21 +241,28 @@ thunar_shortcuts_model_init (ThunarShortcutsModel *model) g_signal_connect (model->volume_monitor, "volume-removed", G_CALLBACK (thunar_shortcuts_model_volume_removed), model); g_signal_connect (model->volume_monitor, "volume-changed", G_CALLBACK (thunar_shortcuts_model_volume_changed), model); + /* add the home folder to the system paths */ home = thunar_g_file_new_for_home (); - - /* determine the system-defined paths */ system_paths = g_list_append (system_paths, g_object_ref (home)); - system_paths = g_list_append (system_paths, thunar_g_file_new_for_trash ()); + /* append the user's desktop folder */ desktop = thunar_g_file_new_for_desktop (); - if (!g_file_equal (desktop, home)) system_paths = g_list_append (system_paths, desktop); else g_object_unref (desktop); + /* append the trash icon if the trash is supported */ + if (thunar_g_vfs_is_uri_scheme_supported ("trash")) + system_paths = g_list_append (system_paths, thunar_g_file_new_for_trash ()); + + /* append the root file system */ system_paths = g_list_append (system_paths, thunar_g_file_new_for_root ()); + /* append the network icon if browsing the network is supported */ + if (thunar_g_vfs_is_uri_scheme_supported ("network")) + system_paths = g_list_append (system_paths, g_file_new_for_uri ("network://")); + /* will be used to append the shortcuts to the list */ path = gtk_tree_path_new_from_indices (0, -1); diff --git a/thunar/thunar-tree-model.c b/thunar/thunar-tree-model.c index c1e5069a5..a79d8b7ea 100644 --- a/thunar/thunar-tree-model.c +++ b/thunar/thunar-tree-model.c @@ -276,11 +276,9 @@ thunar_tree_model_init (ThunarTreeModel *model) { ThunarTreeModelItem *item; ThunarFile *file; - GFile *system_path_list[3] = { - thunar_g_file_new_for_home (), - thunar_g_file_new_for_trash (), - thunar_g_file_new_for_root () - }; + GFile *desktop; + GFile *home; + GList *system_paths = NULL; GList *volumes; GList *lp; GNode *node; @@ -311,16 +309,37 @@ thunar_tree_model_init (ThunarTreeModel *model) g_signal_connect (model->volume_monitor, "volume-removed", G_CALLBACK (thunar_tree_model_volume_removed), model); g_signal_connect (model->volume_monitor, "volume-changed", G_CALLBACK (thunar_tree_model_volume_changed), model); + /* add the home folder to the system paths */ + home = thunar_g_file_new_for_home (); + system_paths = g_list_append (system_paths, g_object_ref (home)); + + /* append the user's desktop folder */ + desktop = thunar_g_file_new_for_desktop (); + if (!g_file_equal (desktop, home)) + system_paths = g_list_append (system_paths, desktop); + else + g_object_unref (desktop); + + /* append the trash icon if the trash is supported */ + if (thunar_g_vfs_is_uri_scheme_supported ("trash")) + system_paths = g_list_append (system_paths, thunar_g_file_new_for_trash ()); + + /* append the root file system */ + system_paths = g_list_append (system_paths, thunar_g_file_new_for_root ()); + + /* append the network icon if browsing the network is supported */ + if (thunar_g_vfs_is_uri_scheme_supported ("network")) + system_paths = g_list_append (system_paths, g_file_new_for_uri ("network://")); + /* append the system defined nodes ('Home', 'Trash', 'File System') */ - for (n = 0; n < G_N_ELEMENTS (system_path_list); ++n) + for (lp = system_paths; lp != NULL; lp = lp->next) { /* determine the file for the path */ - file = thunar_file_get (system_path_list[n], NULL); + file = thunar_file_get (lp->data, NULL); if (G_LIKELY (file != NULL)) { - /* watch the trash bin for changes */ - if (thunar_file_is_trashed (file) && thunar_file_is_root (file)) - thunar_file_watch (file); + /* watch the file for changes */ + thunar_file_watch (file); /* create and append the new node */ item = thunar_tree_model_item_new_with_file (model, file); @@ -332,9 +351,12 @@ thunar_tree_model_init (ThunarTreeModel *model) } /* release the system defined path */ - g_object_unref (system_path_list[n]); + g_object_unref (lp->data); } + g_list_free (system_paths); + g_object_unref (home); + /* setup the initial volumes */ volumes = g_volume_monitor_get_volumes (model->volume_monitor); for (lp = volumes; lp != NULL; lp = lp->next) @@ -1249,9 +1271,8 @@ thunar_tree_model_item_reset (ThunarTreeModelItem *item) /* disconnect from the file */ if (G_LIKELY (item->file != NULL)) { - /* unwatch the trash bin */ - if (thunar_file_is_trashed (item->file) && thunar_file_is_root (item->file)) - thunar_file_unwatch (item->file); + /* unwatch the file */ + thunar_file_unwatch (item->file); /* release and reset the file */ g_object_unref (G_OBJECT (item->file)); -- GitLab