[Xfce4-commits] <thunar:xfce-4.8> Speed up initial start by adding the Network item later (bug #7373).
Jannis Pohlmann
noreply at xfce.org
Thu May 26 01:50:02 CEST 2011
Updating branch refs/heads/xfce-4.8
to a14345dafd7cb6333317d5ebddf62fbddc946c27 (commit)
from 9efd4b71e449406a90131b6a14b9bac318e204c1 (commit)
commit a14345dafd7cb6333317d5ebddf62fbddc946c27
Author: Jannis Pohlmann <jannis at xfce.org>
Date: Thu May 26 01:16:10 2011 +0200
Speed up initial start by adding the Network item later (bug #7373).
NEWS | 1 +
thunar/thunar-shortcuts-model.c | 113 +++++++++++++++++++++++++++++++++------
2 files changed, 97 insertions(+), 17 deletions(-)
diff --git a/NEWS b/NEWS
index e7a470f..c72ddf2 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,7 @@
- Fix crash when hovering a CD drive with a special icon (bug #7309).
Reported and solved by Ambroz Bizjak.
- Treat backup files as hidden as with thunar-vfs (bug #7615).
+- Speed up initial start by loading the network item later (bug #7373).
1.2.1
=====
diff --git a/thunar/thunar-shortcuts-model.c b/thunar/thunar-shortcuts-model.c
index 2aae575..767064a 100644
--- a/thunar/thunar-shortcuts-model.c
+++ b/thunar/thunar-shortcuts-model.c
@@ -1,23 +1,25 @@
-/* $Id$ */
+/* vi:set et ai sw=2 sts=2 ts=2: */
/*-
* Copyright (c) 2005-2006 Benedikt Meurer <benny at xfce.org>
- * Copyright (c) 2009 Jannis Pohlmann <jannis at xfce.org>
+ * Copyright (c) 2009-2011 Jannis Pohlmann <jannis at xfce.org>
*
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
*/
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -217,6 +219,84 @@ thunar_shortcuts_model_drag_source_init (GtkTreeDragSourceIface *iface)
+static gboolean
+thunar_shortcuts_model_add_network_idle (gpointer user_data)
+{
+ ThunarShortcutsModel *model = THUNAR_SHORTCUTS_MODEL (user_data);
+ ThunarShortcut *shortcut = NULL;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ ThunarFile *file = NULL;
+ GVolume *volume = NULL;
+ gboolean have_iter = FALSE;
+ gboolean is_separator = FALSE;
+ gboolean position_found = FALSE;
+ GFile *location = NULL;
+
+ /* append the network icon if browsing the network is supported */
+ if (thunar_g_vfs_is_uri_scheme_supported ("network"))
+ {
+ /* load the network root file */
+ location = g_file_new_for_uri ("network://");
+ file = thunar_file_get (location, NULL);
+ g_object_unref (location);
+
+ /* create the shortcut */
+ shortcut = g_slice_new0 (ThunarShortcut);
+ shortcut->type = THUNAR_SHORTCUT_SYSTEM_DEFINED;
+ shortcut->file = file;
+
+ /* iterate over all rows in the model in order to find the
+ * first one with a volume or a separator */
+ have_iter = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter);
+ while (have_iter && !position_found)
+ {
+ /* read volume and separator flag from the current row */
+ gtk_tree_model_get (GTK_TREE_MODEL (model), &iter,
+ THUNAR_SHORTCUTS_MODEL_COLUMN_VOLUME, &volume,
+ THUNAR_SHORTCUTS_MODEL_COLUMN_SEPARATOR, &is_separator,
+ -1);
+
+ /* check if a volume row was found */
+ if (volume != NULL)
+ {
+ /* stop searching */
+ position_found = TRUE;
+
+ /* release the volume */
+ g_object_unref (volume);
+ }
+ else if (is_separator)
+ {
+ /* stop searching */
+ position_found = TRUE;
+ }
+ else
+ {
+ /* advance to the next row */
+ have_iter = gtk_tree_model_iter_next (GTK_TREE_MODEL (model), &iter);
+ }
+ }
+
+ /* we always have a volume or separator row */
+ g_assert (position_found);
+
+ /* get the path of the iter */
+ path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter);
+
+ /* append the shortcut to the list */
+ thunar_shortcuts_model_add_shortcut (model, shortcut, path);
+
+ /* release the path */
+ gtk_tree_path_free (path);
+ }
+
+ /* remove this idle handler */
+ return FALSE;
+}
+
+
+
static void
thunar_shortcuts_model_init (ThunarShortcutsModel *model)
{
@@ -259,10 +339,6 @@ thunar_shortcuts_model_init (ThunarShortcutsModel *model)
/* 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);
@@ -340,6 +416,9 @@ thunar_shortcuts_model_init (ThunarShortcutsModel *model)
g_object_unref (bookmarks);
g_object_unref (home);
gtk_tree_path_free (path);
+
+ /* add the network item (and other slow items) in an idle handler */
+ g_idle_add_full (G_PRIORITY_LOW, thunar_shortcuts_model_add_network_idle, model, NULL);
}
More information about the Xfce4-commits
mailing list