From 35afd588d16b19495ea061d12abb737eea1a806a Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Sat, 22 Nov 2014 12:28:40 +0100 Subject: [PATCH] search on tags --- NEWS | 2 +- src/ui_tasktree.c | 64 ++++++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 48 insertions(+), 18 deletions(-) diff --git a/NEWS b/NEWS index bebc53a..472094a 100644 --- a/NEWS +++ b/NEWS @@ -5,7 +5,7 @@ v0.0.9 ------ * fixed potential memory leak when failing to convert time to string which is unlikely. - * added incremental search (ctrl-shift f). + * added incremental search (ctrl-shift f) on description and tags. * ctrl-n for new task. * ctrl-r for refresh. diff --git a/src/ui_tasktree.c b/src/ui_tasktree.c index 00dd1d3..7b2d2c6 100644 --- a/src/ui_tasktree.c +++ b/src/ui_tasktree.c @@ -292,6 +292,51 @@ void ui_tasktree_set_selected_task(const char *uuid) log_fct_exit(); } +static int match_search_keywords(struct task *task) +{ + gchar *desc; + int ret; + char **tags; + gchar *tag; + + if (!search_keywords || !strlen(search_keywords)) + return 1; + + if (!task->description || !strlen(task->description)) + return 0; + + desc = g_ascii_strup(task->description, -1); + + if (strstr(desc, search_keywords)) + ret = 1; + else + ret = 0; + + free(desc); + + if (ret) + return 1; + + tags = task->tags; + if (!tags) + return 0; + + while (*tags) { + tag = g_ascii_strup(*tags, -1); + + if (strstr(tag, search_keywords)) + ret = 1; + + free(tag); + + if (ret) + return 1; + + tags++; + } + + return 0; +} void ui_tasktree_update(struct task **tasks) { @@ -301,8 +346,6 @@ void ui_tasktree_update(struct task **tasks) GtkTreeIter iter; const char *prj, *prj_filter; char *s; - gchar *desc; - int ok; prj_filter = ui_projecttree_get_project(); @@ -323,21 +366,8 @@ void ui_tasktree_update(struct task **tasks) if (prj_filter && strcmp(prj, prj_filter)) continue; - if (search_keywords - && strlen(search_keywords) - && task->description) { - desc = g_ascii_strup(task->description, -1); - - if (strstr(desc, search_keywords)) - ok = 1; - else - ok = 0; - - free(desc); - - if (!ok) - continue; - } + if (!match_search_keywords(task)) + continue; gtk_list_store_append(GTK_LIST_STORE(model), &iter); -- 2.7.4