Mercurial > MadButterfly
diff src/prop.c @ 224:29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
- backend does not interpret mouse events (over/out/move), now.
- redraw manager, now, interpret mouse events to make it backend independent.
- The task (interpret mouse events) should be moved to somewhere in futhure.
- backend only sent MotionNotify as EVT_MOUSE_MOVE_RAW.
- EVT_MOUSE_MOVE_RAW is interpreted by backend independent code.
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Mon, 15 Dec 2008 10:13:03 +0800 |
parents | |
children | f08b3ba9c1d8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/prop.c Mon Dec 15 10:13:03 2008 +0800 @@ -0,0 +1,84 @@ +#include "mb_prop.h" + +#define ASSERT(x) + + +static +mb_prop_entry_t *_mb_prop_find(mb_prop_store_t *prop_store, int id) { + mb_prop_entry_t *entry; + + for(entry = STAILQ_HEAD(prop_store->entries); + entry != NULL; + entry = STAILQ_NEXT(mb_prop_entry_t, next, entry)) { + if(entry->id == id) + return entry; + } + + return NULL; +} + +void mb_prop_store_destroy(mb_prop_store_t *prop_store) { + mb_prop_entry_t *entry, *last; + + last = STAILQ_HEAD(prop_store->entries); + if(last == NULL) + return; + + for(entry = STAILQ_NEXT(mb_prop_entry_t, next, entry); + entry != NULL; + entry = STAILQ_NEXT(mb_prop_entry_t, next, entry)) { + STAILQ_REMOVE(prop_store->entries, mb_prop_entry_t, next, last); + elmpool_elm_free(prop_store->entry_pool, last); + last = entry; + } + STAILQ_REMOVE(prop_store->entries, mb_prop_entry_t, next, last); + elmpool_elm_free(prop_store->entry_pool, last); +} + +void *mb_prop_set(mb_prop_store_t *prop_store, int id, void *value) { + mb_prop_entry_t *entry; + void *old; + + entry = _mb_prop_find(prop_store, id); + if(entry) { + old = entry->value; + entry->value = value; + return old; + } + + entry = elmpool_elm_alloc(prop_store->entry_pool); + ASSERT(entry != NULL); + entry->id = id; + entry->value = value; + STAILQ_INS(prop_store->entries, mb_prop_entry_t, next, entry); + + return NULL; +} + +void *mb_prop_get(mb_prop_store_t *prop_store, int id) { + mb_prop_entry_t *entry; + + entry = _mb_prop_find(prop_store, id); + if(entry) + return entry->value; + + return NULL; +} + +void mb_prop_del(mb_prop_store_t *prop_store, int id) { + mb_prop_entry_t *entry; + + entry = _mb_prop_find(prop_store, id); + if(entry) + STAILQ_REMOVE(prop_store->entries, mb_prop_entry_t, next, entry); +} + +int mb_prop_has(mb_prop_store_t *prop_store, int id) { + mb_prop_entry_t *entry; + + entry = _mb_prop_find(prop_store, id); + if(entry) + return 1; + + return 0; +}