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