r1735 - trunk/src/target/OM-2007/applications/openmoko-rssreader/src
zecke at sita.openmoko.org
zecke at sita.openmoko.org
Fri Apr 13 01:35:33 CEST 2007
Author: zecke
Date: 2007-04-13 01:35:33 +0200 (Fri, 13 Apr 2007)
New Revision: 1735
Modified:
trunk/src/target/OM-2007/applications/openmoko-rssreader/src/callbacks.c
trunk/src/target/OM-2007/applications/openmoko-rssreader/src/main.c
Log:
openmoko-rssreader: Implement as-you-type filtering on RSS articles
Use the search bar to filter items on the fly. Fix the refcounting
when using _get of the GtkTreeModel.
Modified: trunk/src/target/OM-2007/applications/openmoko-rssreader/src/callbacks.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-rssreader/src/callbacks.c 2007-04-12 21:55:28 UTC (rev 1734)
+++ trunk/src/target/OM-2007/applications/openmoko-rssreader/src/callbacks.c 2007-04-12 23:35:33 UTC (rev 1735)
@@ -208,8 +208,6 @@
}
}
-void cb_searchbox_visible( MokoToolBox *box, struct RSSReaderData *data ) {}
-void cb_searchbox_invisible( MokoToolBox *box, struct RSSReaderData *data ) {}
/*
* TODO: Update the text and make it rich text.
@@ -235,6 +233,31 @@
}
}
-gboolean cb_treeview_keypress_event( GtkWidget *entry, GdkEventKey *key, struct RSSReaderData *data ) { return TRUE; }
-void cb_search_entry_changed ( GtkWidget *entry, struct RSSReaderData *data ) {}
+/*
+ * search functionality
+ */
+void cb_searchbox_visible( MokoToolBox *box, struct RSSReaderData *data ) {
+ cb_search_entry_changed (moko_tool_box_get_entry (box), data);
+}
+void cb_searchbox_invisible( MokoToolBox *box, struct RSSReaderData *data ) {
+ if ( data->current_search_text ) {
+ g_free (data->current_search_text);
+ data->current_search_text = NULL;
+ }
+
+ filter_feeds (data);
+}
+
+gboolean cb_treeview_keypress_event( GtkWidget *entry, GdkEventKey *key, struct RSSReaderData *data ) {
+ return TRUE;
+}
+
+void cb_search_entry_changed ( GtkWidget *entry, struct RSSReaderData *data ) {
+ if ( data->current_search_text )
+ g_free (data->current_search_text);
+
+ data->current_search_text = g_strdup (gtk_entry_get_text (GTK_ENTRY(entry)));
+ filter_feeds (data);
+}
+
Modified: trunk/src/target/OM-2007/applications/openmoko-rssreader/src/main.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-rssreader/src/main.c 2007-04-12 21:55:28 UTC (rev 1734)
+++ trunk/src/target/OM-2007/applications/openmoko-rssreader/src/main.c 2007-04-12 23:35:33 UTC (rev 1735)
@@ -23,6 +23,7 @@
*
* Current Version: $Rev$ ($Date$) [$Author$]
*/
+#define _GNU_SOURCE
#include "config.h"
#include <glib/gi18n.h>
@@ -50,16 +51,42 @@
gchar *category;
gtk_tree_model_get (model, iter, RSS_READER_COLUMN_CATEGORY, &category, -1);
+ /*
+ * how does this happen?
+ */
+ if ( !category )
+ return FALSE;
if ( strcmp(category, data->current_filter) != 0 )
return FALSE;
+
+ g_free (category);
}
/*
* filter the text according to the search now
*/
+ if ( data->current_search_text ) {
+ gchar *text;
+ #define FILTER_SEARCH(column) \
+ gtk_tree_model_get (model, iter, column, &text, -1); \
+ if ( text && strcasestr (text, data->current_search_text) != NULL ) { \
+ g_free (text); \
+ return TRUE; \
+ }
+
+ FILTER_SEARCH(RSS_READER_COLUMN_AUTHOR)
+ FILTER_SEARCH(RSS_READER_COLUMN_SUBJECT)
+ FILTER_SEARCH(RSS_READER_COLUMN_SOURCE)
+ FILTER_SEARCH(RSS_READER_COLUMN_LINK)
+ FILTER_SEARCH(RSS_READER_COLUMN_TEXT)
+
+ #undef FILTER_SEARCH
+ return FALSE;
+ }
+
return TRUE;
}
@@ -73,12 +100,20 @@
gtk_tree_model_get (model, _left, RSS_READER_COLUMN_DATE, &left, -1);
gtk_tree_model_get (model, _right, RSS_READER_COLUMN_DATE, &right, -1);
+ int result;
if ( left == NULL )
- return -1;
+ result = -1;
else if ( right == NULL )
- return 1;
+ result = 1;
else
- return rss_rfc_date_compare (left, right);
+ result = rss_rfc_date_compare (left, right);
+
+ if ( left )
+ g_object_unref (left);
+ if ( right )
+ g_object_unref (right);
+
+ return result;
}
static void
@@ -89,6 +124,7 @@
g_assert (date);
g_object_set ( G_OBJECT(renderer), "text", rss_rfc_date_as_string(date), NULL);
+ g_object_unref (G_OBJECT(date));
}
/*
More information about the commitlog
mailing list