Enlightenment CVS committal
Author : azundris
Project : misc
Module : erss
Dir : misc/erss/src
Modified Files:
erss.c erss.h gui.c gui.h net.c net.h parse.c parse.h
parse_config.c parse_config.h tooltip.c tooltip.h
Log Message:
2003-02-21 Azundris <[EMAIL PROTECTED]>
* refactoring: remove most global variables (=> Erss_Feed)
* refactoring: make unecessarily global functions static
* refactoring: separate data handling from presentation --
this may be a Good Thing, but it is also a
solid foundation for conditional redraws
(don't flicker when there is no new data)
and stream aggregation (show ten latest of
these five sites (giving 1o, not 5o items))
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/erss.c,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -3 -r1.37 -r1.38
--- erss.c 21 Feb 2004 08:53:36 -0000 1.37
+++ erss.c 21 Feb 2004 11:12:18 -0000 1.38
@@ -66,9 +66,9 @@
char theme_file[PATH_MAX];
char *config=NULL;
struct stat statbuf;
- erss_feed f;
+ Erss_Feed f;
- memset(&f,0,sizeof(erss_feed));
+ memset(&f,0,sizeof(Erss_Feed));
cfg = NULL;
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/erss.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- erss.h 21 Feb 2004 09:20:55 -0000 1.12
+++ erss.h 21 Feb 2004 11:12:18 -0000 1.13
@@ -62,7 +62,7 @@
Ewd_List *list;
xmlDocPtr doc;
Erss_Article *item;
-} erss_feed;
+} Erss_Feed;
char *erss_time_format ();
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/gui.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- gui.c 21 Feb 2004 08:53:36 -0000 1.1
+++ gui.c 21 Feb 2004 11:12:18 -0000 1.2
@@ -1,5 +1,15 @@
#include "erss.h"
-#include "parse_config.h"
+#include "parse_config.h" /* rc, cfg */
+#include "tooltip.h" /* Erss_Tooltip, erss_tooltip_new() */
+
+
+
+typedef enum {
+ ERSS_GAI_SUCC=0,
+ ERSS_GAI_FAIL=-1,
+ ERSS_GAI_NOFEED=-2,
+ ERSS_GAI_NOITEM=-3
+} erss_gai_error;
@@ -13,9 +23,12 @@
+
+
+
int erss_set_time (void *data)
{
- erss_feed *f=(erss_feed *)data;
+ Erss_Feed *f=(Erss_Feed *)data;
char *str;
char text[100];
@@ -77,8 +90,8 @@
-void erss_mouse_click_item (void *data, Evas_Object *o, const char *sig,
- const char *src)
+static void erss_mouse_click_item (void *data, Evas_Object *o,
+ const char *sig, const char *src)
{
char *url = data;
char c[1024];
@@ -92,8 +105,8 @@
ecore_exe_run (c, NULL);
}
-void erss_mouse_in_cursor_change (void *data, Evas *e, Evas_Object *obj,
- void *event_info)
+static void erss_mouse_in_cursor_change (void *data, Evas *e, Evas_Object *obj,
+ void *event_info)
{
Ecore_X_Window win;
@@ -102,8 +115,8 @@
ecore_x_cursor_shape_set(win, ECORE_X_CURSOR_HAND2);
}
-void erss_mouse_out_cursor_change (void *data, Evas *e, Evas_Object *obj,
- void *event_info)
+static void erss_mouse_out_cursor_change (void *data, Evas *e,
+ Evas_Object *obj, void *event_info)
{
Ecore_X_Window win;
@@ -116,6 +129,64 @@
+erss_gai_error erss_gui_add_item(Erss_Feed *f,Erss_Article *item) {
+ if(!f)
+ return ERSS_GAI_NOFEED;
+ if(!item)
+ return ERSS_GAI_NOITEM;
+
+ /* fprintf(stderr, "%s: %p -- %s\n", __FUNCTION__, item, item->title); */
+
+ if(item->title) {
+ item->obj = edje_object_add (evas);
+ edje_object_file_set (item->obj, cfg->theme, "erss_item");
+ evas_object_show (item->obj);
+
+ evas_object_event_callback_add (item->obj,
+ EVAS_CALLBACK_MOUSE_IN,
erss_mouse_in_cursor_change, NULL);
+ evas_object_event_callback_add (item->obj,
+ EVAS_CALLBACK_MOUSE_OUT,
erss_mouse_out_cursor_change, NULL);
+
+ e_container_element_append(cont, item->obj);
+ edje_object_part_text_set (item->obj, "article", item->title);
+ }
+
+ if(item->url) {
+ edje_object_signal_callback_add (item->obj, "exec*", "*",
+ erss_mouse_click_item, item->url);
+ edje_object_signal_emit (item->obj, "mouse,in", "article");
+ edje_object_signal_emit (item->obj, "mouse,out", "article");
+ }
+
+ if (item->description && item->obj)
+ erss_tooltip_for(item);
+
+ return ERSS_GAI_SUCC;
+}
+
+
+
+int erss_gui_add_items(Erss_Feed *f) {
+ int c=0;
+
+ if (!f)
+ return -1;
+
+ if (f->list) {
+ Erss_Article *item = ewd_list_goto_first (f->list);
+ while ((item = ewd_list_next(f->list))) {
+ if(erss_gui_add_item(f,item)==ERSS_GAI_SUCC)
+ c++;
+ }
+ }
+ return c;
+}
+
+
+
+
+
+
int erss_gui_init (char *config) {
Ecore_X_Window win;
Evas_Object *header;
@@ -153,8 +224,6 @@
evas_font_path_append (evas, PACKAGE_DATA_DIR"/fonts/");
-/* erss_net_connect(&f); */
-
ecore_evas_geometry_get (ee, &x, &y, &w, &h);
bg = esmart_trans_x11_new (evas);
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/gui.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- gui.h 21 Feb 2004 08:53:36 -0000 1.1
+++ gui.h 21 Feb 2004 11:12:18 -0000 1.2
@@ -1,13 +1,8 @@
-void erss_mouse_click_item (void *data, Evas_Object *o,
- const char *sig, const char *src);
-void erss_mouse_in_cursor_change (void *data, Evas *e, Evas_Object *obj,
- void *event_info);
-void erss_mouse_out_cursor_change (void *data, Evas *e, Evas_Object *obj,
- void *event_info);
-
void erss_window_resize (Ecore_Evas *);
int erss_set_time (void *);
+int erss_gui_add_items(Erss_Feed *);
+
int erss_gui_init (char *);
int erss_gui_exit (void);
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/net.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- net.c 21 Feb 2004 09:20:55 -0000 1.2
+++ net.c 21 Feb 2004 11:12:18 -0000 1.3
@@ -1,11 +1,11 @@
#include "erss.h"
#include "parse.h" /* erss_parse() */
#include "parse_config.h" /* cfg, rc */
-#include "gui.h" /* erss_set_time() */
+#include "gui.h" /* erss_set_time(), erss_gui_add_items() */
int erss_net_poll (void *data)
{
- erss_feed *f=(erss_feed *)data;
+ Erss_Feed *f=(Erss_Feed *)data;
if (f->waiting_for_reply) {
fprintf (stderr, "%s warning: client has not received all information
",
@@ -53,7 +53,7 @@
static int erss_net_server_add (void *data, int type, void *event)
{
- erss_feed *f=(erss_feed *)data;
+ Erss_Feed *f=(Erss_Feed *)data;
char c[1024];
/*
@@ -77,7 +77,7 @@
static int erss_net_server_data (void *data, int type, void *event)
{
- erss_feed *f = (erss_feed *)data;
+ Erss_Feed *f = (Erss_Feed *)data;
Ecore_Con_Event_Server_Data *e = event;
if (f->total_connects == 1)
@@ -96,7 +96,7 @@
static int erss_net_server_del (void *data, int type, void *event)
{
- erss_feed *f=(erss_feed *)data;
+ Erss_Feed *f=(Erss_Feed *)data;
Ecore_Con_Event_Server_Del *e = event;
char *buf = f->main_buffer;
char *temp;
@@ -152,6 +152,7 @@
f->doc = xmlParseMemory (temp, f->main_bufsize - (temp - f->main_buffer));
erss_parse (f);
+ erss_gui_add_items (f);
ecore_con_server_del (e->server);
f->server = NULL;
@@ -159,7 +160,7 @@
if (ewd_list_is_empty (f->list)) {
if (buf)
printf ("%s\n", temp);
- else
+ else
printf ("%s error: could not connect to '%s'\n", PACKAGE,
cfg->url);
fprintf (stderr, "\n%s error: parsing data\n", PACKAGE);
@@ -183,7 +184,7 @@
return 1;
}
-void erss_net_connect(erss_feed *f) {
+void erss_net_connect(Erss_Feed *f) {
ecore_event_handler_add (ECORE_CON_EVENT_SERVER_ADD,
erss_net_server_add, f);
ecore_event_handler_add (ECORE_CON_EVENT_SERVER_DEL,
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/net.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- net.h 21 Feb 2004 08:53:36 -0000 1.1
+++ net.h 21 Feb 2004 11:12:18 -0000 1.2
@@ -1,4 +1,4 @@
#include "erss.h"
-int erss_net_poll (void *data);
-void erss_net_connect(erss_feed *f);
+int erss_net_poll (void *data);
+void erss_net_connect(Erss_Feed *f);
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/parse.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -3 -r1.26 -r1.27
--- parse.c 21 Feb 2004 09:20:55 -0000 1.26
+++ parse.c 21 Feb 2004 11:12:18 -0000 1.27
@@ -1,12 +1,10 @@
#include "erss.h"
-#include "parse.h"
-#include "parse_config.h"
-#include "tooltip.h"
-#include "gui.h"
+#include "parse.h" /* ERSS_PARSE_* */
+#include "parse_config.h" /* cfg */
-static Erss_Article *erss_story_new (erss_feed *f)
+static Erss_Article *erss_story_new (Erss_Feed *f)
{
f->item=malloc(sizeof(Erss_Article));
memset(f->item,0,sizeof(Erss_Article));
@@ -17,13 +15,13 @@
return f->item;
}
-static void erss_story_end (erss_feed *f)
+static void erss_story_end (Erss_Feed *f)
{
ewd_list_append (f->list, f->item);
f->item = NULL;
}
-char *erss_desc_clean (char *description) {
+static char *erss_desc_clean (char *description) {
/* remove potential tags. not using libXML here, contents may not
be well-formed... */
@@ -49,12 +47,11 @@
return description;
}
-static void erss_parse_story (erss_feed *f, xmlNodePtr cur)
+static void erss_parse_story (Erss_Feed *f, xmlNodePtr cur)
{
- Erss_Tooltip *tt = NULL;
- char *text;
+ char *text;
xmlChar *str;
- int i;
+ int i;
cur = cur->xmlChildrenNode;
@@ -77,19 +74,8 @@
snprintf (text, i, " %s %s", cfg->prefix, str);
- f->item->obj = edje_object_add (evas);
- edje_object_file_set (f->item->obj, cfg->theme, "erss_item");
- evas_object_show (f->item->obj);
-
- evas_object_event_callback_add (f->item->obj,
- EVAS_CALLBACK_MOUSE_IN,
erss_mouse_in_cursor_change, NULL);
- evas_object_event_callback_add (f->item->obj,
- EVAS_CALLBACK_MOUSE_OUT,
erss_mouse_out_cursor_change, NULL);
+ f->item->title = text;
- e_container_element_append(cont, f->item->obj);
- edje_object_part_text_set (f->item->obj, "article", text);
-
- free (text);
xmlFree (str);
}
@@ -97,12 +83,6 @@
if (!strcmp(cur->name, cfg->item_url) && f->item) {
str = xmlNodeListGetString(f->doc,
cur->xmlChildrenNode, 1);
f->item->url = strdup (str);
-
- edje_object_signal_callback_add (f->item->obj,
"exec*", "*",
- erss_mouse_click_item, f->item->url);
- edje_object_signal_emit (f->item->obj, "mouse,in",
"article");
- edje_object_signal_emit (f->item->obj, "mouse,out",
"article");
-
xmlFree (str);
}
}
@@ -112,19 +92,8 @@
char *desc;
if((str = xmlNodeListGetString(f->doc,
cur->xmlChildrenNode, 1))) {
- if((desc = erss_desc_clean(str))) {
- if((tt = erss_tooltip_new (desc))) {
- if (f->item->obj) {
-
evas_object_event_callback_add (f->item->obj,
-
EVAS_CALLBACK_MOUSE_IN, erss_tooltip_mouse_in, tt);
-
evas_object_event_callback_add (f->item->obj,
-
EVAS_CALLBACK_MOUSE_OUT, erss_tooltip_mouse_out, tt);
- }
- } /*
- if (f->item->description)
- free (f->item->description); */
+ if((desc = erss_desc_clean(str)))
f->item->description=desc;
- }
xmlFree (str);
}
}
@@ -134,9 +103,10 @@
}
}
-int erss_parse (erss_feed *f)
+int erss_parse (Erss_Feed *f)
{
xmlNodePtr cur;
+ int ret;
if (f->doc == NULL ) {
fprintf(stderr, "%s warn: buffer not parsed successfully.\n", PACKAGE);
@@ -151,21 +121,23 @@
return ERSS_PARSE_EMPTY;
}
+ ret=ewd_list_nodes (f->list);
cur = cur->xmlChildrenNode;
+
while (cur != NULL) {
- if (ewd_list_nodes (f->list) >= cfg->num_stories)
- return cfg->num_stories;
+ if (ewd_list_nodes (f->list) >= cfg->num_stories) {
+ ret=cfg->num_stories;
+ break;
+ }
if (cfg->item_root) {
if (!strcmp(cur->name, cfg->item_root)) {
erss_parse_story (f, cur);
}
- } else {
- if (!strcmp(cur->name, cfg->item_start)) {
- erss_story_new (f);
- erss_parse_story (f, cur);
- erss_story_end (f);
- }
+ } else if (!strcmp(cur->name, cfg->item_start)) {
+ erss_story_new (f);
+ erss_parse_story (f, cur);
+ erss_story_end (f);
}
cur = cur->next;
@@ -173,5 +145,5 @@
xmlFreeDoc(f->doc);
- return ewd_list_nodes (f->list);
+ return ret;
}
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/parse.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- parse.h 21 Feb 2004 09:20:55 -0000 1.10
+++ parse.h 21 Feb 2004 11:12:18 -0000 1.11
@@ -6,4 +6,4 @@
ERSS_PARSE_EMPTY=-2
} erss_parse_error;
-int erss_parse (erss_feed *);
+int erss_parse (Erss_Feed *);
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/parse_config.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- parse_config.c 21 Feb 2004 08:53:36 -0000 1.4
+++ parse_config.c 21 Feb 2004 11:12:18 -0000 1.5
@@ -1,9 +1,8 @@
#include "erss.h"
-#include "parse.h"
-#include "parse_config.h"
-#include "ls.h"
+#include "parse_config.h" /* Erss_Config, Erss_Rc_Config */
+#include "ls.h" /* erss_list_config_files() */
-Erss_Config *cfg = NULL;
+Erss_Config *cfg = NULL;
Erss_Rc_Config *rc = NULL;
@@ -97,6 +96,11 @@
return TRUE;
}
+
+
+
+
+
void erss_parse_config_file (char *file)
{
xmlDocPtr doc;
@@ -283,5 +287,4 @@
if (!cfg->prefix)
cfg->prefix = strdup(" . ");
-
}
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/parse_config.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- parse_config.h 21 Feb 2004 08:53:36 -0000 1.4
+++ parse_config.h 21 Feb 2004 11:12:18 -0000 1.5
@@ -9,14 +9,14 @@
char *item_url;
char *item_description;
- int update_rate;
- int clock;
- int num_stories;
+ int update_rate;
+ int clock;
+ int num_stories;
- int x;
- int y;
+ int x;
+ int y;
- int borderless;
+ int borderless;
char *prefix;
@@ -27,19 +27,19 @@
typedef struct _erss_rc_config {
- char *config;
- char *theme;
- char *browser;
- char *proxy;
- int proxy_port;
- int clock;
- double tooltip_delay;
+ char *config;
+ char *theme;
+ char *browser;
+ char *proxy;
+ int proxy_port;
+ int clock;
+ double tooltip_delay;
} Erss_Rc_Config;
-extern Erss_Config *cfg;
+extern Erss_Config *cfg;
extern Erss_Rc_Config *rc;
-int erss_parse_rc_file ();
+int erss_parse_rc_file ();
void erss_parse_config_file (char *file);
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/tooltip.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- tooltip.c 21 Feb 2004 09:20:55 -0000 1.7
+++ tooltip.c 21 Feb 2004 11:12:18 -0000 1.8
@@ -1,10 +1,29 @@
#include "erss.h"
-#include "parse.h"
-#include "parse_config.h"
-#include "tooltip.h"
-#include "gui.h"
+#include "parse_config.h" /* rc */
+#include "gui.h" /* erss_window_resize() */
+#include "tooltip.h" /* Erss_Tooltip */
-void erss_window_move_tooltip (Ecore_Evas * ee)
+
+
+typedef struct _erss_tooltip {
+ Evas *evas;
+ Ecore_Evas *ee;
+ Ecore_X_Window win;
+ Evas_Object *bg;
+ Evas_Object *etox;
+
+ int x;
+ int y;
+
+ Ecore_Timer *timer;
+} Erss_Tooltip;
+
+
+
+
+
+
+static void erss_window_move_tooltip (Ecore_Evas * ee)
{
int x, y, w, h;
Evas_Object *o = NULL;
@@ -15,7 +34,7 @@
esmart_trans_x11_freshen(o, x, y, w, h);
}
-Erss_Tooltip *erss_tooltip_new (char *description)
+static Erss_Tooltip *erss_tooltip_new (char *description)
{
Erss_Tooltip *tt;
int x, y, w, h;
@@ -82,7 +101,7 @@
return tt;
}
-void erss_tooltip_hide (Erss_Tooltip *tt)
+static void erss_tooltip_hide (Erss_Tooltip *tt)
{
ecore_evas_hide (tt->ee);
@@ -90,7 +109,7 @@
ecore_timer_del (tt->timer);
}
-void erss_tooltip_show (Erss_Tooltip *tt)
+static void erss_tooltip_show (Erss_Tooltip *tt)
{
tt->timer = NULL;
@@ -99,7 +118,7 @@
}
-int erss_tooltip_timer (void *data)
+static int erss_tooltip_timer (void *data)
{
Erss_Tooltip *tt = data;
@@ -108,7 +127,7 @@
return FALSE;
}
-void erss_tooltip_mouse_in (void *data, Evas *e, Evas_Object *obj,
+static void erss_tooltip_mouse_in (void *data, Evas *e, Evas_Object *obj,
void *event_info)
{
Evas_Event_Mouse_In *ev = event_info;
@@ -120,7 +139,7 @@
tt->timer = ecore_timer_add (rc->tooltip_delay, erss_tooltip_timer, tt);
}
-void erss_tooltip_mouse_out (void *data, Evas *e, Evas_Object *obj,
+static void erss_tooltip_mouse_out (void *data, Evas *e, Evas_Object *obj,
void *event_info)
{
Erss_Tooltip *tt = data;
@@ -130,3 +149,16 @@
}
}
+
+int erss_tooltip_for(Erss_Article *item) {
+ Erss_Tooltip *tt;
+
+ if(item && (tt = erss_tooltip_new (item->description))) {
+ evas_object_event_callback_add (item->obj,
+ EVAS_CALLBACK_MOUSE_IN, erss_tooltip_mouse_in,
tt);
+ evas_object_event_callback_add (item->obj,
+ EVAS_CALLBACK_MOUSE_OUT, erss_tooltip_mouse_out,
tt);
+ return TRUE;
+ }
+ return FALSE;
+}
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/tooltip.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- tooltip.h 24 Jan 2004 18:05:22 -0000 1.1
+++ tooltip.h 21 Feb 2004 11:12:18 -0000 1.2
@@ -1,26 +1 @@
-typedef struct _erss_tooltip Erss_Tooltip;
-
-struct _erss_tooltip {
- Evas *evas;
- Ecore_Evas *ee;
- Ecore_X_Window win;
- Evas_Object *bg;
- Evas_Object *etox;
-
- int x;
- int y;
-
- Ecore_Timer *timer;
-};
-
-void erss_window_move_tooltip (Ecore_Evas * ee);
-
-Erss_Tooltip *erss_tooltip_new (char *description);
-void erss_tooltip_hide (Erss_Tooltip *tt);
-void erss_tooltip_show (Erss_Tooltip *tt);
-
-void erss_tooltip_mouse_in (void *data, Evas *e,
- Evas_Object *obj, void *event_info);
-void erss_tooltip_mouse_out (void *data, Evas *e,
- Evas_Object *obj, void *event_info);
-
+int erss_tooltip_for(Erss_Article *item);
-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs