[gnome-builder] load-directory-task: deal with missing special dirs more gracefully
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] load-directory-task: deal with missing special dirs more gracefully
- Date: Wed, 1 Apr 2015 18:51:21 +0000 (UTC)
commit a6bfe621c71413ba7d9ec49a70e1ecdd883ad636
Author: Christian Hergert <christian hergert me>
Date: Wed Apr 1 11:51:12 2015 -0700
load-directory-task: deal with missing special dirs more gracefully
g_get_user_special_dir() can return NULL values for various special dirs.
So we will use g_strcmp0() instead. Additionally, cache the values to
avoid the extra function calls for every directory.
libide/tasks/ide-load-directory-task.c | 35 ++++++++++++++++++++++++-------
1 files changed, 27 insertions(+), 8 deletions(-)
---
diff --git a/libide/tasks/ide-load-directory-task.c b/libide/tasks/ide-load-directory-task.c
index de4d515..e697479 100644
--- a/libide/tasks/ide-load-directory-task.c
+++ b/libide/tasks/ide-load-directory-task.c
@@ -39,6 +39,21 @@ typedef struct
gsize current_files;
} IdeLoadDirectoryTask;
+static gboolean gSpecialDirsInit;
+static const gchar *gSpecialDirs [7];
+
+static void
+load_special_dirs (void)
+{
+ gSpecialDirs [0] = g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP);
+ gSpecialDirs [1] = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS);
+ gSpecialDirs [2] = g_get_user_special_dir (G_USER_DIRECTORY_DOWNLOAD);
+ gSpecialDirs [3] = g_get_user_special_dir (G_USER_DIRECTORY_MUSIC);
+ gSpecialDirs [4] = g_get_user_special_dir (G_USER_DIRECTORY_PICTURES);
+ gSpecialDirs [5] = g_get_user_special_dir (G_USER_DIRECTORY_TEMPLATES);
+ gSpecialDirs [6] = g_get_user_special_dir (G_USER_DIRECTORY_VIDEOS);
+}
+
static void
ide_load_directory_task_free (gpointer data)
{
@@ -61,6 +76,7 @@ is_special_directory (GFile *directory)
{
g_autofree gchar *path = NULL;
g_autofree gchar *name = NULL;
+ guint i;
/* ignore dot directories */
name = g_file_get_basename (directory);
@@ -73,14 +89,11 @@ is_special_directory (GFile *directory)
return FALSE;
/* check for various xdg special dirs */
- if (g_str_equal (path, g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP)) ||
- g_str_equal (path, g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS)) ||
- g_str_equal (path, g_get_user_special_dir (G_USER_DIRECTORY_DOWNLOAD)) ||
- g_str_equal (path, g_get_user_special_dir (G_USER_DIRECTORY_MUSIC)) ||
- g_str_equal (path, g_get_user_special_dir (G_USER_DIRECTORY_PICTURES)) ||
- g_str_equal (path, g_get_user_special_dir (G_USER_DIRECTORY_TEMPLATES)) ||
- g_str_equal (path, g_get_user_special_dir (G_USER_DIRECTORY_VIDEOS)))
- return TRUE;
+ for (i = 0; i < G_N_ELEMENTS (gSpecialDirs); i++)
+ {
+ if (0 == g_strcmp0 (path, gSpecialDirs [i]))
+ return TRUE;
+ }
return FALSE;
}
@@ -391,6 +404,12 @@ ide_load_directory_task_new (gpointer source_object,
g_return_val_if_fail (IDE_IS_PROJECT_ITEM (parent), NULL);
g_return_val_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable), NULL);
+ if (gSpecialDirsInit == FALSE)
+ {
+ load_special_dirs ();
+ gSpecialDirsInit = TRUE;
+ }
+
context = ide_object_get_context (IDE_OBJECT (parent));
task = g_task_new (source_object, cancellable, callback, user_data);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]