Enlightenment CVS committal

Author  : englebass
Project : e17
Module  : libs/efreet

Dir     : e17/libs/efreet/src/lib


Modified Files:
        efreet_utils.c efreet_utils.h 


Log Message:
Events when .desktop files change.

===================================================================
RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -3 -r1.26 -r1.27
--- efreet_utils.c      5 Apr 2007 20:29:26 -0000       1.26
+++ efreet_utils.c      5 Apr 2007 20:53:43 -0000       1.27
@@ -79,8 +79,8 @@
 
 static Ecore_List *monitors = NULL;
 
-int EFREET_EVENT_UTIL_DESKTOP_LIST_CHANGE = 0;
-int EFREET_EVENT_UTIL_DESKTOP_CHANGE = 0;
+int EFREET_EVENT_DESKTOP_LIST_CHANGE = 0;
+int EFREET_EVENT_DESKTOP_CHANGE = 0;
 
 int
 efreet_util_init(void)
@@ -88,10 +88,10 @@
     Efreet_Cache_Fill *fill;
     Ecore_List *dirs;
 
-    if (!EFREET_EVENT_UTIL_DESKTOP_LIST_CHANGE)
-        EFREET_EVENT_UTIL_DESKTOP_LIST_CHANGE = ecore_event_type_new();
-    if (!EFREET_EVENT_UTIL_DESKTOP_CHANGE)
-        EFREET_EVENT_UTIL_DESKTOP_CHANGE = ecore_event_type_new();
+    if (!EFREET_EVENT_DESKTOP_LIST_CHANGE)
+        EFREET_EVENT_DESKTOP_LIST_CHANGE = ecore_event_type_new();
+    if (!EFREET_EVENT_DESKTOP_CHANGE)
+        EFREET_EVENT_DESKTOP_CHANGE = ecore_event_type_new();
     desktop_by_file_id = ecore_hash_new(ecore_str_hash, ecore_str_compare);
     ecore_hash_set_free_key(desktop_by_file_id, 
ECORE_FREE_CB(ecore_string_release));
     ecore_hash_set_free_value(desktop_by_file_id, free);
@@ -285,13 +285,17 @@
     ecore_list_destroy(dirs);
     if (desktop)
     {
+        Efreet_Event_Desktop_Change *ev;
+
         ud = NEW(Efreet_Util_Desktop, 1);
-        if (ud)
-        {
-            ud->priority = priority;
-            ud->desktop = desktop;
-            ecore_hash_set(desktop_by_file_id, (void 
*)ecore_string_instance(file_id), ud);
-        }
+        ud->priority = priority;
+        ud->desktop = desktop;
+        ecore_hash_set(desktop_by_file_id, (void 
*)ecore_string_instance(file_id), ud);
+
+        ev = NEW(Efreet_Event_Desktop_Change, 1);
+        ev->desktop = desktop;
+        ev->change = EFREET_DESKTOP_CHANGE_ADD;
+        ecore_event_add(EFREET_EVENT_DESKTOP_CHANGE, ev, NULL, NULL);
     }
     return desktop;
 }
@@ -417,7 +421,7 @@
     {
         free(fill);
         idler = NULL;
-        ecore_event_add(EFREET_EVENT_UTIL_DESKTOP_LIST_CHANGE, NULL, NULL, 
NULL);
+        ecore_event_add(EFREET_EVENT_DESKTOP_LIST_CHANGE, NULL, NULL, NULL);
 
         return 0;
     }
@@ -434,7 +438,7 @@
             ecore_hash_for_each_node(file_id_by_desktop_path, dump, NULL);
             printf("%d\n", ecore_hash_count(desktop_by_file_id));
 #endif
-            ecore_event_add(EFREET_EVENT_UTIL_DESKTOP_LIST_CHANGE, NULL, NULL, 
NULL);
+            ecore_event_add(EFREET_EVENT_DESKTOP_LIST_CHANGE, NULL, NULL, 
NULL);
           
             return 0;
         }
@@ -506,16 +510,27 @@
     ud = ecore_hash_get(desktop_by_file_id, file_id);
     if (!ud)
     {
+        Efreet_Event_Desktop_Change *ev;
+
         ud = NEW(Efreet_Util_Desktop, 1);
-        if (ud)
-        {
-            ud->priority = priority;
-            ud->desktop = desktop;
-            ecore_hash_set(desktop_by_file_id, (void 
*)ecore_string_instance(file_id), ud);
-        }
+        ud->priority = priority;
+        ud->desktop = desktop;
+        ecore_hash_set(desktop_by_file_id, (void 
*)ecore_string_instance(file_id), ud);
+
+        ev = NEW(Efreet_Event_Desktop_Change, 1);
+        ev->desktop = desktop;
+        ev->change = EFREET_DESKTOP_CHANGE_ADD;
+        ecore_event_add(EFREET_EVENT_DESKTOP_CHANGE, ev, NULL, NULL);
     }
     else if (priority < ud->priority)
     {
+        Efreet_Event_Desktop_Change *ev;
+
+        ev = NEW(Efreet_Event_Desktop_Change, 1);
+        ev->desktop = desktop;
+        ev->change = EFREET_DESKTOP_CHANGE_ADD;
+        ecore_event_add(EFREET_EVENT_DESKTOP_CHANGE, ev, NULL, NULL);
+
         ud->desktop = desktop;
     }
     if (!ecore_hash_get(file_id_by_desktop_path, desktop->orig_path))
@@ -535,8 +550,17 @@
     ud = ecore_hash_get(desktop_by_file_id, file_id);
     if (ud && (ud->priority >= priority))
     {
+        Efreet_Event_Desktop_Change *ev;
+
         ecore_hash_remove(desktop_by_file_id, file_id);
+
+        ev = NEW(Efreet_Event_Desktop_Change, 1);
+        ev->desktop = ud->desktop;
+        ev->change = EFREET_DESKTOP_CHANGE_REMOVE;
+        ecore_event_add(EFREET_EVENT_DESKTOP_CHANGE, ev, NULL, NULL);
+
         free(ud);
+
         /* This call will search application dirs and add the file to cache if 
it
          * exists. */
         efreet_util_desktop_file_id_find(file_id);
@@ -559,16 +583,33 @@
     ud = ecore_hash_get(desktop_by_file_id, file_id);
     if (ud)
     {
+        Efreet_Event_Desktop_Change *ev;
+
         if (ud->priority < priority) return;
+
+        ev = NEW(Efreet_Event_Desktop_Change, 1);
+        ev->desktop = desktop;
+        if (ud->desktop == desktop)
+            ev->change = EFREET_DESKTOP_CHANGE_UPDATE;
+        else
+            ev->change = EFREET_DESKTOP_CHANGE_ADD;
+        ecore_event_add(EFREET_EVENT_DESKTOP_CHANGE, ev, NULL, NULL);
+
         ud->desktop = desktop;
     }
     else
     {
+        Efreet_Event_Desktop_Change *ev;
+
         ud = NEW(Efreet_Util_Desktop, 1);
-        if (!ud) return;
         ud->priority = priority;
         ud->desktop = desktop;
         ecore_hash_set(desktop_by_file_id, (void 
*)ecore_string_instance(file_id), ud);
+
+        ev = NEW(Efreet_Event_Desktop_Change, 1);
+        ev->desktop = desktop;
+        ev->change = EFREET_DESKTOP_CHANGE_ADD;
+        ecore_event_add(EFREET_EVENT_DESKTOP_CHANGE, ev, NULL, NULL);
     }
 }
 
@@ -768,7 +809,6 @@
     Efreet_Monitor *em;
 
     em = NEW(Efreet_Monitor, 1);
-    if (!em) return;
     em->monitor = ecore_file_monitor_add(path, efreet_util_monitor_cb, em);
     if (file_id) em->file_id = strdup(file_id);
     em->priority = priority;
===================================================================
RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- efreet_utils.h      5 Apr 2007 20:29:26 -0000       1.14
+++ efreet_utils.h      5 Apr 2007 20:53:43 -0000       1.15
@@ -2,6 +2,23 @@
 #ifndef EFREET_UTILS_H
 #define EFREET_UTILS_H
 
+typedef enum Efreet_Desktop_Change Efreet_Desktop_Change;
+
+enum Efreet_Desktop_Change
+{
+    EFREET_DESKTOP_CHANGE_ADD,
+    EFREET_DESKTOP_CHANGE_REMOVE,
+    EFREET_DESKTOP_CHANGE_UPDATE
+};
+
+typedef struct Efreet_Event_Desktop_Change Efreet_Event_Desktop_Change;
+
+struct Efreet_Event_Desktop_Change
+{
+    Efreet_Desktop *desktop;
+    Efreet_Desktop_Change change;
+};
+
 char           *efreet_util_path_in_default(const char *section, const char 
*path);
 const char     *efreet_util_path_to_file_id(const char *path);
 



-------------------------------------------------------------------------
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

Reply via email to