r2623 - in trunk/src/target/OM-2007.2/applications/openmoko-feedreader2: . src

zecke at sita.openmoko.org zecke at sita.openmoko.org
Fri Aug 3 16:17:38 CEST 2007


Author: zecke
Date: 2007-08-03 16:17:18 +0200 (Fri, 03 Aug 2007)
New Revision: 2623

Added:
   trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-configuration.c
   trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.c
   trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-selection-view.h
Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/
   trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/Makefile.am
   trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/application-data.h
   trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-configuration.h
   trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.h
   trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/main.c
Log:
2007-08-03  Holger Hans Peter Freyther  <zecke at selfish.org>

        Start creating the feedreader2, as with every second version
        there might be some over-engineering but as I'm aware of this
        phenomena I try to avoid the bad things.

        Start with creating a Configuration model and the actual FeedData
        model. The implementation will be copied and pasted from main.c
        and callback.c

        Make main.c start to follow the new styleguide and use GtkNotebook
        as well. For icons I would like to use but are not available in
        GtkStock (like configuration) I'm going to use MISSING_IMAGE as well.

        

        * src/Makefile.am:
        * src/application-data.h:
        * src/feed-configuration.c: Added.
        (feed_configuration_class_init):
        (feed_configuration_init):
        (feed_configuration_get_configuration):
        * src/feed-configuration.h:
        * src/feed-data.c: Added.
        (feed_data_init):
        (feed_data_class_init):
        (feed_filter_init):
        (feed_filter_class_init):
        (feed_sort_init):
        (feed_sort_class_init):
        (feed_data_get_instance):
        (feed_data_update_all):
        (feed_data_set_cache):
        (feed_data_load_from_cache):
        (feed_filter_new):
        (feed_filter_reset):
        (feed_filter_filter_category):
        (feed_filter_filter_text):
        (feed_sort_new):
        * src/feed-data.h:
        * src/feed-selection-view.h: Added.
        * src/main.c:
        (window_delete_event):
        (config_new_clicked_closure):
        (config_delete_clicked_closure):
        (create_configuration_ui):
        (create_ui):
        (main):



Modified: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/ChangeLog	2007-08-03 14:08:48 UTC (rev 2622)
+++ trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/ChangeLog	2007-08-03 14:17:18 UTC (rev 2623)
@@ -1,3 +1,52 @@
+2007-08-03  Holger Hans Peter Freyther  <zecke at selfish.org>
+
+        Start creating the feedreader2, as with every second version
+        there might be some over-engineering but as I'm aware of this
+        phenomena I try to avoid the bad things.
+
+        Start with creating a Configuration model and the actual FeedData
+        model. The implementation will be copied and pasted from main.c
+        and callback.c
+
+        Make main.c start to follow the new styleguide and use GtkNotebook
+        as well. For icons I would like to use but are not available in
+        GtkStock (like configuration) I'm going to use MISSING_IMAGE as well.
+
+        
+
+        * src/Makefile.am:
+        * src/application-data.h:
+        * src/feed-configuration.c: Added.
+        (feed_configuration_class_init):
+        (feed_configuration_init):
+        (feed_configuration_get_configuration):
+        * src/feed-configuration.h:
+        * src/feed-data.c: Added.
+        (feed_data_init):
+        (feed_data_class_init):
+        (feed_filter_init):
+        (feed_filter_class_init):
+        (feed_sort_init):
+        (feed_sort_class_init):
+        (feed_data_get_instance):
+        (feed_data_update_all):
+        (feed_data_set_cache):
+        (feed_data_load_from_cache):
+        (feed_filter_new):
+        (feed_filter_reset):
+        (feed_filter_filter_category):
+        (feed_filter_filter_text):
+        (feed_sort_new):
+        * src/feed-data.h:
+        * src/feed-selection-view.h: Added.
+        * src/main.c:
+        (window_delete_event):
+        (config_new_clicked_closure):
+        (config_delete_clicked_closure):
+        (create_configuration_ui):
+        (create_ui):
+        (main):
+
 2007-08-01  Holger Hans Peter Freyther  <zecke at selfish.org>
 
         Sketch some ideas how Configuration, the Feed Data (GtkListStore),


Property changes on: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src
___________________________________________________________________
Name: svn:ignore
   - *.*swp
*.swp
Makefile.in
Makefile
.libs
.deps
openmoko-rssreader

   + *.*swp
*.swp
Makefile.in
Makefile
.libs
.deps
openmoko-feedreader22


Modified: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/Makefile.am	2007-08-03 14:08:48 UTC (rev 2622)
+++ trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/Makefile.am	2007-08-03 14:17:18 UTC (rev 2623)
@@ -7,8 +7,8 @@
 
 bin_PROGRAMS = openmoko-feedreader2
 
-EXTRA_DIST = application-data.h callbacks.h rfcdate.h moko_cache.h
+EXTRA_DIST = rfcdate.h moko_cache.h feed-configuration.h feed-data.h feed-item-view.h feed-selection-view.h application-data.h
 
-openmoko_feedreader2_SOURCES = main.c callbacks.c rfcdate.c moko_cache.c
+openmoko_feedreader2_SOURCES = feed-configuration.c feed-data.c rfcdate.c moko_cache.c main.c
 openmoko_feedreader2_LDADD = @OPENMOKO_LIBS@ @MRSS_LIBS@ @GTHREAD_LIBS@ @WEBKITGTK_LIBS@
 

Modified: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/application-data.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/application-data.h	2007-08-03 14:08:48 UTC (rev 2622)
+++ trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/application-data.h	2007-08-03 14:17:18 UTC (rev 2623)
@@ -27,38 +27,13 @@
 #ifndef APPLICATION_DATA_H
 #define APPLICATION_DATA_H
 
-
-#include <libmokoui/moko-application.h>
-#include <libmokoui/moko-paned-window.h>
-#include <libmokoui/moko-tree-view.h>
-#include <libmokoui/moko-tool-box.h>
-
-#include <webkitgtkpage.h>
-
 #include "moko_cache.h"
-
 #include <gtk/gtk.h>
 
-struct RSSReaderData {
-    MokoApplication   *app;
+struct ApplicationData {
+    GtkWindow         *window;
     MokoCache         *cache;
-    GtkMenu           *menu;
-    GtkMenu           *filter;
-    MokoPanedWindow   *window;
-    MokoToolBox       *box;
-    MokoMenuBox       *menubox;
-
-
-    MokoTreeView      *treeView;
-    GtkListStore      *feed_data;
-    GtkTreeModelFilter *filter_model;
-    GtkTreeModelSort  *sort_model;
-
-    WebKitGtkPage     *textPage;
-
-    gchar             *current_filter;
-    int                is_all_filter;
-    gchar             *current_search_text;
+    GtkNotebook       *notebook;
 };
 
 /*

Added: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-configuration.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-configuration.c	2007-08-03 14:08:48 UTC (rev 2622)
+++ trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-configuration.c	2007-08-03 14:17:18 UTC (rev 2623)
@@ -0,0 +1,81 @@
+/*
+ *  RSS Reader, a simple RSS reader
+ *
+ *  Copyright (C) 2007 Holger Hans Peter Freyther
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
+ *  Software is furnished to do so, subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included
+ *  in all copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ *  OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ *  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *  OTHER DEALINGS IN THE SOFTWARE.
+ *
+ *  Current Version: $Rev$ ($Date$) [$Author$]
+ */
+
+#include "feed-configuration.h"
+
+struct FeedEntry {
+    gchar *category;
+    gchar *url;
+};
+
+static struct FeedEntry s_feeds[] = {
+    { "OpenMoko",   "http://planet.openmoko.org/atom.xml"  },
+    { "GNOME"   ,   "http://planet.gnome.org/atom.xml"     },
+    { "KDE",        "http://planet.kde.org/rss20.xml"      },
+    { "Linux Togo", "http://planet.linuxtogo.org/atom.xml" },
+    { "zecke"   , "http://zecke.blogspot.com/atom.xml"     },
+};
+
+static const int NUMBER_OF_FEEDS = sizeof(s_feeds)/sizeof(s_feeds[0]);
+
+G_DEFINE_TYPE(FeedConfiguration, feed_configuration, GTK_TYPE_LIST_STORE)
+
+static void feed_configuration_class_init (FeedConfigurationClass* klass)
+{
+}
+
+static void feed_configuration_init (FeedConfiguration* config)
+{
+    GType types[FEED_NUMBER_OF_COLUMNS];
+    types[0] = G_TYPE_STRING;
+    types[1] = G_TYPE_STRING;
+    types[2] = G_TYPE_STRING;
+    types[3] = G_TYPE_STRING;
+    types[4] = G_TYPE_INT;
+    gtk_list_store_set_column_types (GTK_LIST_STORE(config), 5, types);
+
+    /*
+     * Add some dummy entries until we have something GConf binding
+     */
+    GtkTreeIter iter;
+    for (int i = 0; i < NUMBER_OF_FEEDS; ++i) {
+        gtk_list_store_append (GTK_LIST_STORE(config), &iter );
+        gtk_list_store_set (GTK_LIST_STORE(config), &iter,
+                            FEED_NAME, g_strdup(s_feeds[i].category),
+                            FEED_URL,  g_strdup(s_feeds[i].url),
+                            -1);
+    }
+}
+
+
+GObject* feed_configuration_get_configuration (void)
+{
+    static FeedConfiguration* config = 0;
+    if (!config)
+        config = RSS_FEED_CONFIGURATION(g_object_new(RSS_TYPE_FEED_CONFIGURATION, NULL));
+
+    return G_OBJECT(config);
+}


Property changes on: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-configuration.c
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-configuration.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-configuration.h	2007-08-03 14:08:48 UTC (rev 2622)
+++ trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-configuration.h	2007-08-03 14:17:18 UTC (rev 2623)
@@ -36,7 +36,6 @@
 
 G_BEGIN_DECLS
 
-#define RSS_TYPE_FEED                           feed_get_type()
 #define RSS_TYPE_FEED_CONFIGURATION             feed_configuration_get_type()
 #define RSS_FEED_CONFIGURATION(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj), RSS_TYPE_FEED_CONFIGURATION, FeedConfiguration))
 #define RSS_FEED_CONFIGURATION_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),  RSS_TYPE_FEED_CONFIGURATION, FeedConfigurationClass))
@@ -44,20 +43,18 @@
 #define RSS_IS_FEED_CONFIGURATION_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),  RSS_TYPE_FEED_CONFIGURATION))
 #define RSS_FEED_CONFIGURATION_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),  RSS_TYPE_FEED_CONFIGURATION, FeedConfigurationClass))
 
-typedef struct _Feed Feed;
-
 typedef struct _FeedConfiguration FeedConfiguration;
 typedef struct _FeedConfigurationClass FeedConfigurationClass;
 
-struct _Feed {
-    gchar* name;
-    gchar* url;
-    gchar* user_name;
-    gchar* password;
-    gint   number_of_items_to_cache;
+enum {
+    FEED_NAME,
+    FEED_URL,
+    FEED_USER_NAME,
+    FEED_PASSWORD,
+    FEED_NUMBER_OF_ITEMS_TO_CACHE,
+    FEED_NUMBER_OF_COLUMNS
 };
 
-
 struct _FeedConfiguration {
     GtkListStore parent;
 };
@@ -67,17 +64,12 @@
 };
 
 
-GType feed_get_type (void);
-Feed* feed_copy (const Feed*);
-void  feed_free (Feed*);
+GType       feed_configuration_get_type             (void);
 
-
-GType feed_configuration_get_type (void);
-
 /*
  * singleton
  */
-GObject* feed_configuration_get_configuration (void),
+GObject*    feed_configuration_get_configuration    (void);
 
 G_END_DECLS
 

Added: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.c	2007-08-03 14:08:48 UTC (rev 2622)
+++ trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.c	2007-08-03 14:17:18 UTC (rev 2623)
@@ -0,0 +1,123 @@
+/*
+ *  RSS Reader, a simple RSS reader
+ *
+ *  Copyright (C) 2007 Holger Hans Peter Freyther
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
+ *  Software is furnished to do so, subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included
+ *  in all copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ *  OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ *  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *  OTHER DEALINGS IN THE SOFTWARE.
+ *
+ *  Current Version: $Rev$ ($Date$) [$Author$]
+ */
+
+#include "feed-data.h"
+
+G_DEFINE_TYPE(FeedData,   feed_data,   GTK_TYPE_LIST_STORE)
+G_DEFINE_TYPE(FeedFilter, feed_filter, GTK_TYPE_TREE_MODEL_FILTER)
+G_DEFINE_TYPE(FeedSort,   feed_sort,   GTK_TYPE_TREE_MODEL_SORT)
+
+static void
+feed_data_init (FeedData *data)
+{
+}
+
+static void
+feed_data_class_init (FeedDataClass *feed_class)
+{
+}
+
+static void
+feed_filter_init (FeedFilter *filter)
+{
+}
+
+static void
+feed_filter_class_init (FeedFilterClass *filter_class)
+{
+}
+
+static void
+feed_sort_init (FeedSort* init)
+{
+}
+
+static void
+feed_sort_class_init (FeedSortClass* sort_class)
+{
+}
+
+GObject*
+feed_data_get_instance (void)
+{
+    static GObject* instance = 0;
+    if (!instance)
+        instance = g_object_new(RSS_TYPE_FEED_DATA, NULL);
+
+    return instance;
+}
+
+void
+feed_data_update_all (FeedData* data)
+{
+}
+
+void
+feed_data_set_cache (FeedData* data, MokoCache* cache)
+{
+}
+
+void
+feed_data_load_from_cache (FeedData* data)
+{
+}
+
+
+GObject*
+feed_filter_new (const FeedData* data)
+{
+    GObject* obj = g_object_new(RSS_TYPE_FEED_FILTER,
+                                "child-model", data,
+                                "root", NULL,
+                                NULL);
+
+    return obj;
+}
+
+void
+feed_filter_reset (FeedFilter* filter)
+{
+}
+
+void
+feed_filter_filter_category (FeedFilter* filter, GtkTreeIter* iter)
+{
+}
+
+void
+feed_filter_filter_text (FeedFilter* filter, const gchar* text)
+{
+}
+
+GObject*
+feed_sort_new (const FeedFilter* filter)
+{
+    GObject* obj = g_object_new (RSS_TYPE_FEED_SORT,
+                                 "model", filter,
+                                 NULL);
+
+    return obj;
+}


Property changes on: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.c
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.h	2007-08-03 14:08:48 UTC (rev 2622)
+++ trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.h	2007-08-03 14:17:18 UTC (rev 2623)
@@ -33,46 +33,98 @@
 #ifndef RSS_READER_FEED_DATA_H
 #define RSS_READER_FEED_DATA_H
 
-#include "feed-configuration.h"
+#include <gtk/gtk.h>
+#include "moko_cache.h"
 
 G_BEGIN_DECLS
 
-#define RSS_TYPE_FEED_DATA              feed_data_get_type()
-#define RSS_FEED_DATA(obj)              (G_TYPE_CHECK_INSTANCE_CAST((obj), RSS_TYPE_FEED_DATA, FeedData))
-#define RSS_FEED_DATA_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST((klass),  RSS_TYPE_FEED_DATA, FeedDataClass))
-#define RSS_IS_FEED_DATA(obj)           (G_TYPE_CHECK_INSTANCE_TYPE((obj), RSS_TYPE_FEED_DATA))
-#define RSS_IS_FEED_DATA_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE((klass),  RSS_TYPE_FEED_DATA))
-#define RSS_FEED_DATA_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS((obj),  RSS_TYPE_FEED_DATA, FeedDataClass))
+#define RSS_TYPE_FEED_DATA                  feed_data_get_type()
+#define RSS_FEED_DATA(obj)                  (G_TYPE_CHECK_INSTANCE_CAST((obj), RSS_TYPE_FEED_DATA, FeedData))
+#define RSS_FEED_DATA_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST((klass),  RSS_TYPE_FEED_DATA, FeedDataClass))
+#define RSS_IS_FEED_DATA(obj)               (G_TYPE_CHECK_INSTANCE_TYPE((obj), RSS_TYPE_FEED_DATA))
+#define RSS_IS_FEED_DATA_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE((klass),  RSS_TYPE_FEED_DATA))
+#define RSS_FEED_DATA_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS((obj),  RSS_TYPE_FEED_DATA, FeedDataClass))
 
-#define RSS_TYPE_FEED_FILTER            feed_filter_get_type()
-#define RSS_TYPE_FEED_SORTER            feed_sorter_get_type()
+#define RSS_TYPE_FEED_FILTER                feed_filter_get_type()
+#define RSS_FEED_FILTER(obj)                (G_TYPE_CHECK_INSTANCE_CAST((obj), RSS_TYPE_FEED_FILTER, FeedFilter))
+#define RSS_FEED_FILTER_CLASS(klass)        (G_TYPE_CHECK_CLASS_CAST((klass),  RSS_TYPE_FEED_FILTER, FeedFilterClass))
+#define RSS_IS_FEED_FILTER(obj)             (G_TYPE_CHECK_INSTANCE_TYPE((obj), RSS_TYPE_FEED_FILTER))
+#define RSS_IS_FEED_FILTER_CLASS(klass)     (G_TYPE_CHECK_CLASS_TYPE((klass),  RSS_TYPE_FEED_FILTER))
+#define RSS_FEED_FILTER_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS((obj),  RSS_TYPE_FEED_FILTER, FeedFilterClass))
 
+
+
+#define RSS_TYPE_FEED_SORT                feed_sort_get_type()
+#define RSS_FEED_SORT(obj)                (G_TYPE_CHECK_INSTANCE_CAST((obj), RSS_TYPE_FEED_SORT, FeedSort))
+#define RSS_FEED_SORT_CLASS(klass)        (G_TYPE_CHECK_CLASS_CAST((klass),  RSS_TYPE_FEED_SORT, FeedSortClass))
+#define RSS_IS_FEED_SORT(obj)             (G_TYPE_CHECK_INSTANCE_TYPE((obj), RSS_TYPE_FEED_SORT))
+#define RSS_IS_FEED_SORT_CLASS(klass)     (G_TYPE_CHECK_CLASS_TYPE((klass),  RSS_TYPE_FEED_SORT))
+#define RSS_FEED_SORT_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS((obj),  RSS_TYPE_FEED_SORT, FeedSortClass))
+
 typedef struct _FeedData FeedData;
 typedef struct _FeedDataClass FeedDataClass;
+typedef struct _FeedFilter FeedFilter;
+typedef struct _FeedFilterClass FeedFilterClass;
+typedef struct _FeedSort FeedSort;
+typedef struct _FeedSortClass FeedSortClass;
 
 struct _FeedData {
     GtkListStore parent;
+    MokoCache    *cache;
 };
 
 struct _FeedDataClass {
     GtkListStoreClass parent;
 };
 
+struct _FeedFilter {
+    GtkTreeModelFilter parent;
 
+    /*
+     * Do we have a filter set at all?
+     */
+    gboolean all_filter;
+
+    /*
+     * The category to filter. Coming from the feed-configuration
+     */
+    gchar   *category;
+
+    /*
+     * The filter string.
+     */
+    gchar  *filter_string;
+};
+
+struct _FeedFilterClass {
+    GtkTreeModelFilterClass parent;
+};
+
+struct _FeedSort {
+    GtkTreeModelSort parent;
+};
+
+struct  _FeedSortClass {
+    GtkTreeModelSortClass parent;
+};
+
+
 GType       feed_data_get_type          (void);
 GObject*    feed_data_get_instance      (void);
 
 void        feed_data_update_all        (FeedData*);
-void        feed_data_update            (FeedData*, Feed*);
+void        feed_data_set_cache         (FeedData*, MokoCache*);
+void        feed_data_load_from_cache   (FeedData*);
 
 
 GType       feed_filter_get_type        (void);
-GObject*    feed_filter_new             (const FeedFilter*);
-void        feed_filter_reset           (const FeedFilter*);
-void        feed_filter_filter          (const FeedFilter*, const Feed*);
+GObject*    feed_filter_new             (const FeedData*);
+void        feed_filter_reset           (FeedFilter*);
+void        feed_filter_filter_category (FeedFilter*, GtkTreeIter*);
+void        feed_filter_filter_text     (FeedFilter*, const gchar*);
 
-GType       feed_sorter_get_type        (void);
-GObject*    feed_sorter_new             (const FeedFilter*);
+GType       feed_sort_get_type        (void);
+GObject*    feed_sort_new             (const FeedFilter*);
 
 G_END_DECLS
 

Added: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-selection-view.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-selection-view.h	2007-08-03 14:08:48 UTC (rev 2622)
+++ trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-selection-view.h	2007-08-03 14:17:18 UTC (rev 2623)
@@ -0,0 +1,64 @@
+/*
+ *  RSS Reader, a simple RSS reader
+ *
+ *  Copyright (C) 2007 Holger Hans Peter Freyther
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
+ *  Software is furnished to do so, subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included
+ *  in all copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ *  OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ *  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *  OTHER DEALINGS IN THE SOFTWARE.
+ *
+ *  Current Version: $Rev$ ($Date$) [$Author$]
+ */
+
+/*
+ * A simple GtkTreeView representing the FeedData
+ */
+
+#ifndef FEED_SELECTION_VIEW_H
+#define FEED_SELECTION_VIEW_H
+
+#include <gtk/gtk.h>
+#include "feed-data.h"
+
+G_BEGIN_DECLS
+
+#define RSS_TYPE_FEED_SELECTION_VIEW            feed_selection_view_get_type()
+#define RSS_FEED_SELECTION_VIEW(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), RSS_TYPE_FEED_SELECTION_VIEW, FeedSelectionView))
+#define RSS_FEED_SELECTION_VIEW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),  RSS_TYPE_FEED_SELECTION_VIEW, FeedSelectionViewClass))
+#define RSS_IS_FEED_SELECTION_VIEW(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), RSS_TYPE_FEED_SELECTION_VIEW))
+#define RSS_IS_FEED_SELECTION_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),  RSS_TYPE_FEED_SELECTION_VIEW))
+#define RSS_FEED_SELECTION_VIEW_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj),  RSS_TYPE_FEED_SELECTION_VIEW, FeedSelectionViewClass))
+
+typedef struct _FeedSelectionView FeedSelectionView;
+typedef struct _FeedSelectionViewClass FeedSelectionViewClass;
+
+struct _FeedSelectionView {
+    GtkTreeView parent;
+};
+
+struct _FeedSelectionViewClass {
+    GtkTreeViewClass parent;
+};
+
+GType feed_selection_view_get_type      (void);
+GObject* feed_selection_new_new         (const FeedData*);
+void feed_selection_set_first_column    (const FeedData*, int);
+void feed_selection_set_second_column   (const FeedData*, int);
+
+G_END_DECLS
+
+#endif


Property changes on: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-selection-view.h
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/main.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/main.c	2007-08-03 14:08:48 UTC (rev 2622)
+++ trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/main.c	2007-08-03 14:17:18 UTC (rev 2623)
@@ -23,288 +23,158 @@
  *
  *  Current Version: $Rev$ ($Date$) [$Author$]
  */
-#define _GNU_SOURCE
-#include "config.h"
+
+#include <gtk/gtk.h>
 #include <glib/gi18n.h>
 
-#include "application-data.h"
-#include "callbacks.h"
-#include "rfcdate.h"
-
-#include <libmokoui/moko-scrolled-pane.h>
-
-#include <webkitgtkpage.h>
 #include <webkitgtkglobal.h>
 
-#include <string.h>
-#include <assert.h>
+#include <moko-finger-scroll.h>
 
-#define ASSERT_X(x, error) assert(x)
+#include "application-data.h"
+#include "feed-data.h"
+#include "feed-configuration.h"
+#include "config.h"
 
-/*
- * filter categories and such terms
- */
-static gboolean
-rss_filter_entries (GtkTreeModel *model, GtkTreeIter *iter, struct RSSReaderData *data)
+static void
+window_delete_event (GtkWidget* widget, GdkEvent* event, struct ApplicationData* data)
 {
-    /*
-     * filter the category
-     */
-    if ( !data->is_all_filter ) {
-        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;
+    gtk_main_quit ();
 }
 
+
 /*
- * sort the dates according to zsort. Ideally they should sort ascending
+ * Config related functions
  */
-static gint
-rss_sort_dates (GtkTreeModel *model, GtkTreeIter *_left, GtkTreeIter *_right, gpointer that)
+static void
+config_new_clicked_closure(GtkWidget* button, struct ApplicationData* data)
 {
-    RSSRFCDate *left, *right;
-    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 )
-        result = -1;
-    else if ( right == NULL )
-        result = 1;
-    else
-        result = rss_rfc_date_compare (left, right);
-
-    if ( left )
-        g_object_unref (left);
-    if ( right )
-        g_object_unref (right);
-
-    return result;
 }
 
 static void
-rss_cell_data_func (GtkTreeViewColumn *tree_column, GtkCellRenderer *renderer, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
+config_delete_clicked_closure(GtkWidget* button, struct ApplicationData* data)
 {
-    RSSRFCDate *date;
-    gtk_tree_model_get (tree_model, iter, RSS_READER_COLUMN_DATE, &date, -1);
-
-    g_assert (date);
-    g_object_set ( G_OBJECT(renderer), "text", rss_rfc_date_as_string(date), NULL);
-    g_object_unref (G_OBJECT(date));
 }
 
-/*
- * setup the toolbar
- */
-static void setup_toolbar( struct RSSReaderData *data ) {
-    GtkButton *a;
-    GtkWidget *anImage;
-    data->box = MOKO_TOOL_BOX(moko_tool_box_new_with_search());
-    gtk_widget_grab_focus( GTK_WIDGET(data->box) );
-    g_signal_connect( G_OBJECT(data->box), "searchbox_visible",   G_CALLBACK(cb_searchbox_visible), data );
-    g_signal_connect( G_OBJECT(data->box), "searchbox_invisible", G_CALLBACK(cb_searchbox_invisible), data );
-
-
-    a = GTK_BUTTON(moko_tool_box_add_action_button( MOKO_TOOL_BOX(data->box) ));
-    anImage = gtk_image_new_from_file( PKGDATADIR "/feedreader2_refresh_all.png" );
-    moko_pixmap_button_set_center_image( MOKO_PIXMAP_BUTTON(a), anImage );
-    g_signal_connect( G_OBJECT(a), "clicked", G_CALLBACK(cb_refresh_all_button_clicked), data );
-
-    a = GTK_BUTTON(moko_tool_box_add_action_button( MOKO_TOOL_BOX(data->box) ));
-    anImage = gtk_image_new_from_file( PKGDATADIR "/feedreader2_subscribe.png" );
-    moko_pixmap_button_set_center_image( MOKO_PIXMAP_BUTTON(a), anImage );
-    g_signal_connect( G_OBJECT(a), "clicked", G_CALLBACK(cb_subscribe_button_clicked), data );
-
-    a = GTK_BUTTON(moko_tool_box_add_action_button( MOKO_TOOL_BOX(data->box)) );
-    gtk_button_set_label( GTK_BUTTON(a), _("Up for rent") );
-    a = GTK_BUTTON(moko_tool_box_add_action_button( MOKO_TOOL_BOX(data->box)) );
-    gtk_button_set_label( GTK_BUTTON(a), _("Buy more Mate") );
-
-    moko_paned_window_add_toolbox( MOKO_PANED_WINDOW(data->window), MOKO_TOOL_BOX(data->box) );
-}
-
-static void create_navigaton_area( struct RSSReaderData *data ) {
-    data->feed_data = gtk_list_store_new( RSS_READER_NUM_COLS,
-                                          G_TYPE_STRING /* Author    */,
-                                          G_TYPE_STRING /* Subject   */,
-                                          RSS_TYPE_RFC_DATE /* Date  */,
-                                          G_TYPE_STRING /* Link      */,
-                                          G_TYPE_STRING /* Text      */,
-                                          G_TYPE_INT    /* Text_Type */,
-                                          G_TYPE_STRING /* Category  */,
-                                          G_TYPE_STRING /* Source    */ );
-
+static void
+create_configuration_ui (struct ApplicationData* data, GtkCellRenderer* text_renderer)
+{
     /*
-     * allow to filter for a search string
+     * toolbar
      */
-    data->filter_model = GTK_TREE_MODEL_FILTER(gtk_tree_model_filter_new(GTK_TREE_MODEL(data->feed_data),NULL));
-    gtk_tree_model_filter_set_visible_func (data->filter_model, (GtkTreeModelFilterVisibleFunc)rss_filter_entries, data, NULL);
+    GtkWidget* box = gtk_vbox_new (FALSE, 0);
+    gtk_notebook_append_page (data->notebook, box, gtk_image_new_from_stock (GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_LARGE_TOOLBAR));
+    gtk_container_child_set (GTK_CONTAINER(data->notebook), box, "tab-expand", TRUE, "tab-fill", TRUE, NULL);
 
-    /*
-     * Allow sorting of the base model
-     */
-    data->sort_model = GTK_TREE_MODEL_SORT(gtk_tree_model_sort_new_with_model( GTK_TREE_MODEL(data->filter_model) ));
-    gtk_tree_sortable_set_sort_column_id( GTK_TREE_SORTABLE(data->sort_model), RSS_READER_COLUMN_DATE,    GTK_SORT_DESCENDING );
-    gtk_tree_sortable_set_sort_func ( GTK_TREE_SORTABLE(data->sort_model), RSS_READER_COLUMN_DATE, rss_sort_dates, NULL, NULL);
+    GtkWidget* toolbar = gtk_toolbar_new ();
+    gtk_box_pack_start (GTK_BOX(box), toolbar, FALSE, FALSE, 0);
 
-    data->treeView = MOKO_TREE_VIEW(moko_tree_view_new_with_model(GTK_TREE_MODEL(data->sort_model)));
-    moko_paned_window_set_navigation_pane( MOKO_PANED_WINDOW(data->window), GTK_WIDGET(moko_tree_view_put_into_scrolled_window(data->treeView)) );
+    GtkToolItem* toolitem = gtk_tool_button_new_from_stock (GTK_STOCK_NEW);
+    gtk_tool_item_set_expand (GTK_TOOL_ITEM(toolitem), TRUE);
+    gtk_toolbar_insert (GTK_TOOLBAR(toolbar), toolitem, 0);
+    g_signal_connect (toolitem, "clicked", G_CALLBACK(config_new_clicked_closure), data);
 
-    /*
-     * Only show the SUBJECT and DATE header
-     */
-    GtkCellRenderer *ren;
-    GtkTreeViewColumn *column;
-    ren = GTK_CELL_RENDERER(gtk_cell_renderer_text_new());
-    column = GTK_TREE_VIEW_COLUMN(gtk_tree_view_column_new_with_attributes( _("Subject"), ren, "text", RSS_READER_COLUMN_SUBJECT, NULL));
-    gtk_tree_view_column_set_expand( column, TRUE );
-    gtk_tree_view_column_set_sizing( column, GTK_TREE_VIEW_COLUMN_FIXED );
-    gtk_tree_view_column_set_sort_column_id( column, RSS_READER_COLUMN_SUBJECT );
-    moko_tree_view_append_column( MOKO_TREE_VIEW(data->treeView), column );
+    gtk_toolbar_insert (GTK_TOOLBAR(toolbar), gtk_separator_tool_item_new (), 1);
 
-    ren = GTK_CELL_RENDERER(gtk_cell_renderer_text_new());
-    column = GTK_TREE_VIEW_COLUMN(gtk_tree_view_column_new_with_attributes( _("Date"), ren, NULL));
+    toolitem = gtk_tool_button_new_from_stock (GTK_STOCK_DELETE);
+    gtk_tool_item_set_expand (GTK_TOOL_ITEM(toolitem), TRUE);
+    gtk_toolbar_insert (GTK_TOOLBAR(toolbar), toolitem, 2);
+    g_signal_connect (toolitem, "clicked", G_CALLBACK(config_delete_clicked_closure), data);
+    
+    /* main view */
+    GtkWidget* scrolled = moko_finger_scroll_new ();
+    gtk_box_pack_start (GTK_BOX(box), scrolled, TRUE, TRUE, 0);
+    GtkWidget* treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL(feed_configuration_get_configuration ()));
+    GtkTreeViewColumn* column = GTK_TREE_VIEW_COLUMN(gtk_tree_view_column_new_with_attributes( _("Name"),
+                                                                                              text_renderer,
+                                                                                              "text", FEED_NAME, NULL));
+    gtk_tree_view_column_set_expand (column, TRUE);
+    gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
+    gtk_tree_view_column_set_sort_column_id (column, FEED_NAME);
+    gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
-    gtk_tree_view_column_set_cell_data_func (column, ren, rss_cell_data_func, NULL, NULL);
-    gtk_tree_view_column_set_expand( column, TRUE );
-    gtk_tree_view_column_set_sizing( column, GTK_TREE_VIEW_COLUMN_FIXED );
-    gtk_tree_view_column_set_sort_column_id( column, RSS_READER_COLUMN_DATE );
-    moko_tree_view_append_column( MOKO_TREE_VIEW(data->treeView), column );
+    column = GTK_TREE_VIEW_COLUMN(gtk_tree_view_column_new_with_attributes( _("Url"),
+                                                                            text_renderer,
+                                                                            "text", FEED_URL, NULL));
+    gtk_tree_view_column_set_expand (column, TRUE);
+    gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
+    gtk_tree_view_column_set_sort_column_id (column, FEED_URL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
-    /*
-     * auto completion and selection updates
-     */
-    GtkTreeSelection *selection = GTK_TREE_SELECTION(gtk_tree_view_get_selection( GTK_TREE_VIEW(data->treeView) ));
-    g_signal_connect( G_OBJECT(selection), "changed", G_CALLBACK(cb_treeview_selection_changed), data );
-
-    GtkWidget *search_entry = GTK_WIDGET(moko_tool_box_get_entry(MOKO_TOOL_BOX(data->box)));
-    g_signal_connect( G_OBJECT(data->treeView), "key_press_event", G_CALLBACK(cb_treeview_keypress_event), data );
-    g_signal_connect( G_OBJECT(search_entry),   "changed", G_CALLBACK(cb_search_entry_changed), data );
+    
+    gtk_container_add (GTK_CONTAINER (scrolled), treeview);
 }
 
-static void create_details_area( struct RSSReaderData* data ) {
-    data->textPage = WEBKIT_GTK_PAGE(webkit_gtk_page_new ());
-
-    GtkWidget *scrollWindow = GTK_WIDGET(moko_scrolled_pane_new());
-    moko_scrolled_pane_pack (MOKO_SCROLLED_PANE(scrollWindow), GTK_WIDGET (data->textPage));
-    moko_paned_window_set_details_pane( MOKO_PANED_WINDOW(data->window), scrollWindow ) ;
-}
-
 /*
- * create the mainwindow
+ *  ToolBar with add and remove
+ *  And a view with available feeds. No filtering for them
+ *
+ *  TODO:
+ *      How to do the actual configuration?
+ *        Name, URL are easy and fit on screen
+ *        What about username, password, number of items to cache?
  */
-static void setup_ui( struct RSSReaderData* data ) {
-    data->window = MOKO_PANED_WINDOW(moko_paned_window_new());
-    g_signal_connect( G_OBJECT(data->window), "delete_event", G_CALLBACK( gtk_main_quit ), NULL );
+static void
+create_ui (struct ApplicationData* data)
+{
+    data->window = GTK_WINDOW(gtk_window_new (GTK_WINDOW_TOPLEVEL));
+    g_signal_connect(data->window, "delete-event", G_CALLBACK(window_delete_event), data);
 
+    data->notebook = GTK_NOTEBOOK(gtk_notebook_new ());
+    gtk_notebook_set_tab_pos (GTK_NOTEBOOK (data->notebook), GTK_POS_BOTTOM);
+    gtk_container_add (GTK_CONTAINER(data->window), GTK_WIDGET(data->notebook));
+
     /*
-     * menu
+     * Create the pages of interest
+     *
+     * 1.) Feed Overview Subject/Date
+     * 2.) Text View
+     * 3.) Configuration
      */
-    data->menu = GTK_MENU(gtk_menu_new());
-    GtkMenuItem *closeitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( _("Close")));
-    g_signal_connect( G_OBJECT(closeitem), "activate", G_CALLBACK(gtk_main_quit), NULL );
-    gtk_menu_shell_append( GTK_MENU_SHELL(data->menu), GTK_WIDGET(closeitem) );
-    moko_paned_window_set_application_menu( MOKO_PANED_WINDOW(data->window), GTK_MENU(data->menu) );
+    GtkCellRenderer *text_renderer = GTK_CELL_RENDERER(gtk_cell_renderer_text_new ());
 
     /*
-     * filter
+     * 3. Configuration
      */
-    data->filter = GTK_MENU(gtk_menu_new());
-    moko_paned_window_set_filter_menu( MOKO_PANED_WINDOW(data->window), GTK_MENU(data->filter) );
-    data->menubox = MOKO_MENU_BOX(moko_paned_window_get_menubox( MOKO_PANED_WINDOW(data->window) ) );
-    g_signal_connect( G_OBJECT(data->menubox), "filter_changed", G_CALLBACK(cb_filter_changed), data );
+    create_configuration_ui (data, text_renderer);
 
 
-    /*
-     * tool bar
-     */
-    setup_toolbar( data );
-    create_navigaton_area( data );
-    create_details_area( data );
+    gtk_widget_show_all (GTK_WIDGET(data->window));
 }
 
-int main( int argc, char** argv )
+
+int main (int argc, char** argv)
 {
-    /*
-     * boiler plate code
-     */
     g_debug( "openmoko-feedreader2 starting up" );
 
     /* i18n boiler plate */
-    bindtextdomain ( GETTEXT_PACKAGE, RSSREADER_LOCALE_DIR );
-    bind_textdomain_codeset ( GETTEXT_PACKAGE, "UTF-8" );
-    textdomain ( GETTEXT_PACKAGE );
+    bindtextdomain (GETTEXT_PACKAGE, RSSREADER_LOCALE_DIR);
+    bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+    textdomain (GETTEXT_PACKAGE);
 
 
     /*
      * initialize threads for fetching the RSS in the background
      */
-    g_thread_init( NULL );
-    gdk_threads_init();
-    gdk_threads_enter();
-    gtk_init( &argc, &argv );
+    g_thread_init (NULL);
+    gdk_threads_init ();
+    gdk_threads_enter ();
+    gtk_init (&argc, &argv);
     webkit_gtk_init ();
-
-    struct RSSReaderData *data = g_new0( struct RSSReaderData, 1 );
-
-
-    data->app = MOKO_APPLICATION( moko_application_get_instance() );
     g_set_application_name( _("FeedReader") );
+
+    struct ApplicationData* data = g_new (struct ApplicationData, 1);
     data->cache = MOKO_CACHE(moko_cache_new ("feed-reader"));
+    feed_data_set_cache (RSS_FEED_DATA(feed_data_get_instance ()), data->cache);
 
-    setup_ui( data );
+    create_ui (data);
+    feed_data_load_from_cache (RSS_FEED_DATA(feed_data_get_instance ()));
 
-    /*
-     * load data
-     */
-    data->is_all_filter = TRUE;
-    refresh_categories( data );
-    load_data_from_cache (data);
-    moko_menu_box_set_active_filter( data->menubox, _("All") );
-
-    gtk_widget_show_all( GTK_WIDGET(data->window) );
-    gtk_widget_grab_focus (GTK_WIDGET(data->treeView));
     gtk_main();
     gdk_threads_leave();
 
+    g_object_unref (data->cache);
+    g_free (data);
+    
     return 0;
 }
-
-





More information about the commitlog mailing list