Enlightenment CVS committal Author : englebass Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_exec.c e_order.c e_order.h Log Message: convert ibar to E_Order =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_exec.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- e_exec.c 24 Mar 2007 21:28:14 -0000 1.3 +++ e_exec.c 25 Mar 2007 10:16:05 -0000 1.4 @@ -44,6 +44,7 @@ char *signal; }; +/* local subsystem functions */ static void _e_exec_cb_exec(void *data, Efreet_Desktop *desktop, char *exec, int remaining); static int _e_exec_cb_expire_timer(void *data); static int _e_exec_cb_exit(void *data, int type, void *event); @@ -57,6 +58,7 @@ static Evas_Object *_dialog_scrolltext_create(Evas *evas, char *title, Ecore_Exe_Event_Data_Line *lines); static void _dialog_save_cb(void *data, void *data2); +/* local subsystem globals */ static Evas_List *e_exec_start_pending = NULL; static Evas_Hash *e_exec_instances = NULL; static int startup_id = 0; @@ -64,6 +66,7 @@ static Ecore_Event_Handler *_e_exec_exit_handler = NULL; static Ecore_Event_Handler *_e_exec_border_add_handler = NULL; +/* externally accessible functions */ EAPI int e_exec_init(void) { @@ -119,6 +122,7 @@ return 1; } +/* local subsystem functions */ static void _e_exec_cb_exec(void *data, Efreet_Desktop *desktop, char *exec, int remaining) { =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_order.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- e_order.c 24 Mar 2007 23:51:46 -0000 1.6 +++ e_order.c 25 Mar 2007 10:16:05 -0000 1.7 @@ -8,57 +8,46 @@ * - Update E_Order object if a .desktop file becomes available */ +/* local subsystem functions */ static void _e_order_free (E_Order *eo); static void _e_order_cb_monitor (void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path); +static void _e_order_read (E_Order *eo); static void _e_order_save (E_Order *eo); +/* externally accessible functions */ EAPI E_Order * e_order_new(const char *path) { E_Order *eo; - FILE *f; - + if ((!path) || (!ecore_file_exists(path))) return NULL; eo = E_OBJECT_ALLOC(E_Order, E_ORDER_TYPE, _e_order_free); if (!eo) return NULL; - f = fopen(path, "rb"); - if (f) - { - char buf[4096]; - - while (fgets(buf, sizeof(buf), f)) - { - int len; - - len = strlen(buf); - if (len > 0) - { - if (buf[len - 1] == '\n') - { - buf[len - 1] = 0; - len--; - } - if (len > 0) - { - Efreet_Desktop *desktop; - desktop = efreet_util_desktop_by_file_id_get(buf); - if (desktop) eo->desktops = evas_list_append(eo->desktops, desktop); - } - } - } - fclose(f); - } eo->path = evas_stringshare_add(path); + _e_order_read(eo); eo->monitor = ecore_file_monitor_add(path, _e_order_cb_monitor, eo); return eo; } EAPI void +e_order_update_callback_set(E_Order *eo, void (*cb)(void *data, E_Order *eo), void *data) +{ + E_OBJECT_CHECK(eo); + E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE); + + eo->cb.update = cb; + eo->cb.data = data; +} + +EAPI void e_order_remove(E_Order *eo, Efreet_Desktop *desktop) { + E_OBJECT_CHECK(eo); + E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE); + eo->desktops = evas_list_remove(eo->desktops, desktop); _e_order_save(eo); } @@ -66,6 +55,9 @@ EAPI void e_order_append(E_Order *eo, Efreet_Desktop *desktop) { + E_OBJECT_CHECK(eo); + E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE); + eo->desktops = evas_list_append(eo->desktops, desktop); _e_order_save(eo); } @@ -73,6 +65,9 @@ EAPI void e_order_prepend_relative(E_Order *eo, Efreet_Desktop *desktop, Efreet_Desktop *before) { + E_OBJECT_CHECK(eo); + E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE); + eo->desktops = evas_list_prepend_relative(eo->desktops, desktop, before); _e_order_save(eo); } @@ -82,6 +77,9 @@ { Evas_List *l; + E_OBJECT_CHECK(eo); + E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE); + for (l = files; l ; l = l->next) { Efreet_Desktop *desktop; @@ -100,6 +98,9 @@ { Evas_List *l; + E_OBJECT_CHECK(eo); + E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE); + for (l = files; l ; l = l->next) { Efreet_Desktop *desktop; @@ -113,6 +114,7 @@ _e_order_save(eo); } +/* local subsystem functions */ static void _e_order_free(E_Order *eo) { @@ -125,7 +127,50 @@ static void _e_order_cb_monitor(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path) { - /* TODO */ + E_Order *eo; + + eo = data; + + /* It doesn't really matter what the change is, just re-read the file */ + _e_order_read(eo); + if (eo->cb.update) eo->cb.update(eo->cb.data, eo); +} + +static void +_e_order_read(E_Order *eo) +{ + FILE *f; + + eo->desktops = evas_list_free(eo->desktops); + if (!eo->path) return; + + f = fopen(eo->path, "rb"); + if (f) + { + char buf[4096]; + + while (fgets(buf, sizeof(buf), f)) + { + int len; + + len = strlen(buf); + if (len > 0) + { + if (buf[len - 1] == '\n') + { + buf[len - 1] = 0; + len--; + } + if (len > 0) + { + Efreet_Desktop *desktop; + desktop = efreet_util_desktop_by_file_id_get(buf); + if (desktop) eo->desktops = evas_list_append(eo->desktops, desktop); + } + } + } + fclose(f); + } } static void =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_order.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- e_order.h 24 Mar 2007 23:51:46 -0000 1.4 +++ e_order.h 25 Mar 2007 10:16:05 -0000 1.5 @@ -18,9 +18,15 @@ const char *path; Evas_List *desktops; /* A list of Efreet_Desktop files this .order contains */ Ecore_File_Monitor *monitor; /* Check for changes int the .order file */ + + struct { + void (*update)(void *data, E_Order *eo); + void *data; + } cb; }; EAPI E_Order *e_order_new(const char *path); +EAPI void e_order_update_callback_set(E_Order *eo, void (*cb)(void *data, E_Order *eo), void *data); EAPI void e_order_remove(E_Order *eo, Efreet_Desktop *desktop); EAPI void e_order_append(E_Order *eo, Efreet_Desktop *desktop); ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs