summaryrefslogtreecommitdiffstats
path: root/source/dialogs
diff options
context:
space:
mode:
authorDave Davenport <qball@gmpclient.org>2017-06-02 18:13:11 +0200
committerDave Davenport <qball@gmpclient.org>2017-06-02 18:13:11 +0200
commit1e0fb75189901246e06592bb131e55ca99d9b16d (patch)
tree65b619c485ff520727fbcf7a82f9ae63776b764d /source/dialogs
parentb3b01b1973d70bdb1e249056ff87606163ea6df5 (diff)
Filter scanning same directory twice for same desktop files.
Diffstat (limited to 'source/dialogs')
-rw-r--r--source/dialogs/drun.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/source/dialogs/drun.c b/source/dialogs/drun.c
index 8b201c42..47feb891 100644
--- a/source/dialogs/drun.c
+++ b/source/dialogs/drun.c
@@ -309,7 +309,7 @@ static void walk_dir ( DRunModePrivateData *pd, const char *root, const char *di
{
DIR *dir;
- g_debug ( "Checking directory %s for desktop files.", root );
+ g_debug ( "Checking directory %s for desktop files.", dirname );
dir = opendir ( dirname );
if ( dir == NULL ) {
return;
@@ -412,10 +412,20 @@ static void get_apps ( DRunModePrivateData *pd )
TICK_N ( "Get Desktop apps (user dir)" );
// Then read thee system data dirs.
const gchar * const * sys = g_get_system_data_dirs ();
- for (; *sys != NULL; ++sys ) {
- dir = g_build_filename ( *sys, "applications", NULL );
- walk_dir ( pd, dir, dir );
- g_free ( dir );
+ for (const gchar * const *iter = sys ; *iter != NULL; ++iter ) {
+ gboolean unique = TRUE;
+ // Stupid duplicate detection, better then walking dir.
+ for ( const gchar *const *iterd = sys ; iterd != iter; ++iterd ){
+ if ( g_strcmp0 ( *iter, *iterd ) == 0 ) {
+ unique = FALSE;
+ }
+ }
+ // Check, we seem to be getting empty string...
+ if ( unique && (**iter) != '\0') {
+ dir = g_build_filename ( *iter, "applications", NULL );
+ walk_dir ( pd, dir, dir );
+ g_free ( dir );
+ }
}
TICK_N ( "Get Desktop apps (system dirs)" );
}