diff --git a/WINGs/ChangeLog b/WINGs/ChangeLog index 629731e3..1760192a 100644 --- a/WINGs/ChangeLog +++ b/WINGs/ChangeLog @@ -1,3 +1,11 @@ +changes since wmaker 0.62.0: +............................ +- added WM{S,G}etDataFormat() +- added drag and drop +- changed selection code +- added clientdata to WMFindInBag + + changes since wmaker 0.61.1: ............................ diff --git a/WINGs/WUtil.h b/WINGs/WUtil.h index e841bae2..9a9dbd0a 100644 --- a/WINGs/WUtil.h +++ b/WINGs/WUtil.h @@ -163,7 +163,7 @@ typedef struct W_BagFunctions { void (*emptyBag)(WMBag *bag); void (*freeBag)(WMBag *bag); void (*mapBag)(WMBag *bag, void (*function)(void*, void*), void *data); - int (*findInBag)(WMBag *bag, int (*match)(void*)); + int (*findInBag)(WMBag *bag, int (*match)(void*, void*), void *cdata); void *(*first)(WMBag *bag, WMBagIterator *ptr); void *(*last)(WMBag *bag, WMBagIterator *ptr); void *(*next)(WMBag *bag, WMBagIterator *ptr); @@ -398,7 +398,7 @@ WMBag *WMCreateTreeBagWithDestructor(void (*destructor)(void*)); #define WMCountInBag(bag, item) bag->func.countInBag(bag, item) -#define WMFindInBag(bag, match) bag->func.findInBag(bag, match) +#define WMFindInBag(bag, match, cdata) bag->func.findInBag(bag, match, cdata) #define WMBagFirst(bag, ptr) bag->func.first(bag, ptr) @@ -486,6 +486,10 @@ void WMResetDataBytesInRange(WMData *aData, WMRange aRange); void WMSetData(WMData *aData, WMData *anotherData); + +void WMSetDataFormat(WMData *aData, unsigned format); + +unsigned WMGetDataFormat(WMData *aData); /* Storing data */ diff --git a/WINGs/bagtree.c b/WINGs/bagtree.c index bbce0301..ebbbef53 100644 --- a/WINGs/bagtree.c +++ b/WINGs/bagtree.c @@ -44,7 +44,7 @@ static int sortBag(WMBag *bag, int (*comparer)(const void*, const void*)); static void emptyBag(WMBag *bag); static void freeBag(WMBag *bag); static void mapBag(WMBag *bag, void (*function)(void*, void*), void *data); -static int findInBag(WMBag *bag, int (*match)(void*));; +static int findInBag(WMBag *bag, int (*match)(void*,void*), void *data); static void *first(WMBag *bag, WMBagIterator *ptr); static void *last(WMBag *bag, WMBagIterator *ptr); static void *next(WMBag *bag, WMBagIterator *ptr); @@ -785,28 +785,29 @@ static void mapBag(WMBag *self, void (*function)(void*, void*), void *data) -static int findInTree(W_TreeBag *tree, W_Node *node, int (*function)(void*)) +static int findInTree(W_TreeBag *tree, W_Node *node, + int (*function)(void*,void*), void *cdata) { int index; if (node == tree->nil) return WBNotFound; - index = findInTree(tree, node->left, function); + index = findInTree(tree, node->left, function, cdata); if (index != WBNotFound) return index; - if ((*function)(node->data)) { + if ((*function)(node->data, cdata)) { return node->index; } - return findInTree(tree, node->right, function); + return findInTree(tree, node->right, function, cdata); } -static int findInBag(WMBag *self, int (*match)(void*)) +static int findInBag(WMBag *self, int (*match)(void*,void*), void *cdata) { - return findInTree(SELF, SELF->root, match); + return findInTree(SELF, SELF->root, match, cdata); }