ui/common/object.c

changeset 1127
d3a8c29ebdaa
parent 1123
42ef3156ea09
equal deleted inserted replaced
1126:bd1fe6134c1a 1127:d3a8c29ebdaa
37 #include "../ui/container.h" 37 #include "../ui/container.h"
38 38
39 static CxList *creation_callbacks; 39 static CxList *creation_callbacks;
40 static CxList *destruction_callbacks; 40 static CxList *destruction_callbacks;
41 41
42 static CxList *objects;
43
42 typedef struct objcallback { 44 typedef struct objcallback {
43 ui_object_callback func; 45 ui_object_callback func;
44 void *userdata; 46 void *userdata;
45 } objcallback; 47 } objcallback;
46 48
65 obj->ref = 1; 67 obj->ref = 1;
66 return obj; 68 return obj;
67 } 69 }
68 70
69 void uic_object_created(UiObject *obj) { 71 void uic_object_created(UiObject *obj) {
72 if(!objects) {
73 objects = cxLinkedListCreate(NULL, CX_STORE_POINTERS);
74 }
75 cxListAdd(objects, obj);
76
70 CxIterator i = cxListIterator(creation_callbacks); 77 CxIterator i = cxListIterator(creation_callbacks);
71 cx_foreach(objcallback *, cb, i) { 78 cx_foreach(objcallback *, cb, i) {
72 cb->func(obj, cb->userdata); 79 cb->func(obj, cb->userdata);
73 } 80 }
74 } 81 }
75 82
76 void uic_object_destroyed(UiObject *obj) { 83 void uic_object_destroyed(UiObject *obj) {
84 if(objects) {
85 cxListFindRemove(objects, obj);
86 }
87
77 CxIterator i = cxListIterator(destruction_callbacks); 88 CxIterator i = cxListIterator(destruction_callbacks);
78 cx_foreach(objcallback *, cb, i) { 89 cx_foreach(objcallback *, cb, i) {
79 cb->func(obj, cb->userdata); 90 cb->func(obj, cb->userdata);
80 } 91 }
92 }
93
94 CxList* uic_object_list(void) {
95 return objects ? objects : cxEmptyList;
81 } 96 }
82 97
83 void ui_object_ref(UiObject *obj) { 98 void ui_object_ref(UiObject *obj) {
84 obj->ref++; 99 obj->ref++;
85 } 100 }

mercurial