X-Git-Url: https://git.wpitchoune.net/gitweb/?p=ptask-pkg-ubuntu.git;a=blobdiff_plain;f=src%2Fui_tasktree.c;h=7b2d2c6d20f995a5bcd357624562426ff8718660;hp=506e8f9e3d5eead11573da7c39713932bf742826;hb=refs%2Fheads%2Fupstream;hpb=5e92def4de768cd195a32fd75fca8491d0671a1b diff --git a/src/ui_tasktree.c b/src/ui_tasktree.c index 506e8f9..7b2d2c6 100644 --- a/src/ui_tasktree.c +++ b/src/ui_tasktree.c @@ -47,6 +47,7 @@ static const char * const MENU_NAMES[] = { static GtkTreeView *w_treeview; static GtkMenu *w_menu; static struct task **current_tasks; +static gchar *search_keywords; enum { COL_ID, @@ -291,16 +292,63 @@ 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); -void ui_tasktree_update(struct task **tasks, const char *prj_filter) + 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) { GtkTreeModel *model; struct task **tasks_cur; struct task *task; GtkTreeIter iter; - const char *prj; + const char *prj, *prj_filter; char *s; + prj_filter = ui_projecttree_get_project(); + current_tasks = tasks; model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview)); @@ -318,6 +366,9 @@ void ui_tasktree_update(struct task **tasks, const char *prj_filter) if (prj_filter && strcmp(prj, prj_filter)) continue; + if (!match_search_keywords(task)) + continue; + gtk_list_store_append(GTK_LIST_STORE(model), &iter); gtk_list_store_set(GTK_LIST_STORE(model), @@ -373,11 +424,6 @@ void ui_tasktree_update(struct task **tasks, const char *prj_filter) } -void ui_tasktree_update_filter(const char *prj_filter) -{ - ui_tasktree_update(current_tasks, prj_filter); -} - gboolean tasktree_button_press_event_cbk(GtkWidget *widget, GdkEventButton *evt, gpointer data) @@ -477,3 +523,19 @@ void tasktree_stop_activate_cbk(GtkAction *action, gpointer data) log_fct_exit(); } + +void +ui_tasktree_search_changed_cbk(GtkEntry *entry, gchar *preedit, gpointer data) +{ + if (search_keywords) + g_free(search_keywords); + + search_keywords = g_ascii_strup(gtk_entry_get_text(entry), -1); + + ui_tasktree_update(current_tasks); +} + +void ui_tasktree_update_filter(const char *prj) +{ + ui_tasktree_update(current_tasks); +}