summaryrefslogtreecommitdiffstats
path: root/apps/tagtree.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/tagtree.c')
-rw-r--r--apps/tagtree.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/apps/tagtree.c b/apps/tagtree.c
index 417b6f28f0..9eef38b5e6 100644
--- a/apps/tagtree.c
+++ b/apps/tagtree.c
@@ -53,6 +53,7 @@
#include "storage.h"
#include "dir.h"
#include "playback.h"
+#include "strnatcmp.h"
#include "panic.h"
#define str_or_empty(x) (x ? x : "(NULL)")
@@ -791,6 +792,17 @@ static int compare(const void *p1, const void *p2)
return strncasecmp(e1->name, e2->name, MAX_PATH);
}
+static int nat_compare(const void *p1, const void *p2)
+{
+ struct tagentry *e1 = (struct tagentry *)p1;
+ struct tagentry *e2 = (struct tagentry *)p2;
+
+ if (sort_inverse)
+ return strnatcasecmp(e2->name, e1->name);
+
+ return strnatcasecmp(e1->name, e2->name);
+}
+
static void tagtree_buffer_event(void *data)
{
struct tagcache_search tcs;
@@ -1530,7 +1542,8 @@ static int retrieve_entries(struct tree_context *c, int offset, bool init)
struct tagentry *entries = get_entries(c);
qsort(&entries[special_entry_count],
current_entry_count - special_entry_count,
- sizeof(struct tagentry), compare);
+ sizeof(struct tagentry),
+ global_settings.interpret_numbers ? nat_compare : compare);
}
if (!init)