From 1101026d193991dd83e9121e94124841e895a75c Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Fri, 3 Feb 2017 20:57:14 +0100 Subject: [PATCH] Added text search filter --- src/mainwindow.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/mainwindow.c b/src/mainwindow.c index 386fff6..899c112 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -182,9 +182,41 @@ static void mainWindow_list_add_entry(struct mainWindow *mainWindow, */ static gboolean mainWindow_list_entry_visible(GtkTreeModel *model, GtkTreeIter *iter, struct mainWindow *mainWindow) { + GRegex *regex; + GMatchInfo *match_info; + gchar *searchString; + gchar *temp; + + gboolean search_matched = 0; + GDateTime *datetime; guint time; + /* Check text search */ + searchString = (gchar *)gtk_entry_get_text(GTK_ENTRY(mainWindow->searchEntry)); + if (searchString[0] != 0) { + regex = g_regex_new(searchString, G_REGEX_CASELESS, 0, NULL); + + gtk_tree_model_get(model, iter, COL_TEXT, &temp, -1); + if (g_regex_match(regex, temp, 0, &match_info) && g_match_info_matches(match_info)) + search_matched = 1; + g_free(temp); + + gtk_tree_model_get(model, iter, COL_TAGS_TEXT, &temp, -1); + if (g_regex_match(regex, temp, 0, &match_info) && g_match_info_matches(match_info)) + search_matched = 1; + g_free(temp); + + gtk_tree_model_get(model, iter, COL_TITLE, &temp, -1); + if (g_regex_match(regex, temp, 0, &match_info) && g_match_info_matches(match_info)) + search_matched = 1; + g_free(temp); + + if (!search_matched) + return 0; + } + + /* Check time span */ gtk_tree_model_get(model, iter, COL_TIMESTAMP, &datetime, -1); if (datetime) { time = g_date_time_to_unix(datetime); @@ -515,9 +547,6 @@ void mainWindow_filterChanged(GtkWidget *widget, gpointer user_data) g_date_time_unref(datetime); } } - if (!widget || widget == mainWindow->searchEntry) { - NULL; - } gtk_tree_model_filter_refilter(mainWindow->entryListFiltered); }