mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 12:28:22 +01:00
- Fixed WMArray.
- Changed WMList to use WMArray instead of WMBag - Fixed compilation problems in WPrefs.app
This commit is contained in:
@@ -1066,8 +1066,7 @@ int WMFindRowOfListItemWithTitle(WMList *lPtr, char *title);
|
||||
|
||||
WMListItem *WMGetListItem(WMList *lPtr, int row);
|
||||
|
||||
WMBag *WMGetListItems(WMList *lPtr);
|
||||
|
||||
WMArray *WMGetListItems(WMList *lPtr);
|
||||
|
||||
void WMRemoveListItem(WMList *lPtr, int row);
|
||||
|
||||
|
||||
@@ -131,6 +131,10 @@ typedef struct W_Connection WMConnection;
|
||||
|
||||
typedef void WMFreeDataProc(void *data);
|
||||
|
||||
/* Used by WMBag or WMArray for matching data */
|
||||
typedef int WMMatchDataProc(void *item, void *cdata);
|
||||
|
||||
|
||||
|
||||
|
||||
typedef struct {
|
||||
@@ -320,16 +324,15 @@ extern const WMHashTableCallbacks WMStringPointerHashCallbacks;
|
||||
* aren't in the end
|
||||
*/
|
||||
|
||||
WMArray* WMCreateArray(unsigned initialSize);
|
||||
WMArray* WMCreateArray(int initialSize);
|
||||
|
||||
WMArray* WMCreateArrayWithDestructor(unsigned initialSize,
|
||||
void (*destructor)(void*));
|
||||
WMArray* WMCreateArrayWithDestructor(int initialSize, WMFreeDataProc *destructor);
|
||||
|
||||
void WMEmptyArray(WMArray *array);
|
||||
|
||||
void WMFreeArray(WMArray *array);
|
||||
|
||||
unsigned WMGetArrayItemCount(WMArray *array);
|
||||
int WMGetArrayItemCount(WMArray *array);
|
||||
|
||||
/* appends other to array. other remains unchanged */
|
||||
int WMAppendArray(WMArray *array, WMArray *other);
|
||||
@@ -340,12 +343,12 @@ int WMAddToArray(WMArray *array, void *item);
|
||||
#define WMPushInArray(array, item) WMAddToArray(array, item)
|
||||
|
||||
/* insert will increment the index of elements after it by 1 */
|
||||
int WMInsertInArray(WMArray *array, unsigned index, void *item);
|
||||
int WMInsertInArray(WMArray *array, int index, void *item);
|
||||
|
||||
/* replace and set will return the old item WITHOUT calling the
|
||||
* destructor on it even if its available. Free the returned item yourself.
|
||||
*/
|
||||
void* WMReplaceInArray(WMArray *array, unsigned index, void *item);
|
||||
void* WMReplaceInArray(WMArray *array, int index, void *item);
|
||||
|
||||
#define WMSetInArray(array, index, item) WMReplaceInArray(array, index, item)
|
||||
|
||||
@@ -353,11 +356,11 @@ void* WMReplaceInArray(WMArray *array, unsigned index, void *item);
|
||||
* after them to decrement their indexes by 1. Also will call the
|
||||
* destructor on the deleted element if there's one available.
|
||||
*/
|
||||
int WMDeleteFromArray(WMArray *array, unsigned index);
|
||||
int WMDeleteFromArray(WMArray *array, int index);
|
||||
|
||||
int WMRemoveFromArray(WMArray *array, void *item);
|
||||
|
||||
void* WMGetFromArray(WMArray *array, unsigned index);
|
||||
void* WMGetFromArray(WMArray *array, int index);
|
||||
|
||||
#define WMGetFirstInArray(array, item) WMFindInArray(array, NULL, item)
|
||||
|
||||
@@ -367,9 +370,9 @@ void* WMGetFromArray(WMArray *array, unsigned index);
|
||||
*/
|
||||
void* WMPopFromArray(WMArray *array);
|
||||
|
||||
int WMFindInArray(WMArray *array, int (*match)(void*, void*), void *cdata);
|
||||
int WMFindInArray(WMArray *array, WMMatchDataProc *match, void *cdata);
|
||||
|
||||
unsigned WMCountInArray(WMArray *array, void *item);
|
||||
int WMCountInArray(WMArray *array, void *item);
|
||||
|
||||
/* comparer must return:
|
||||
* < 0 if a < b
|
||||
@@ -403,7 +406,7 @@ void WMMapArray(WMArray *array, void (*function)(void*, void*), void *data);
|
||||
|
||||
WMBag* WMCreateTreeBag(void);
|
||||
|
||||
WMBag* WMCreateTreeBagWithDestructor(void (*destructor)(void*));
|
||||
WMBag* WMCreateTreeBagWithDestructor(WMFreeDataProc *destructor);
|
||||
|
||||
int WMGetBagItemCount(WMBag *bag);
|
||||
|
||||
@@ -448,7 +451,7 @@ int WMGetFirstInBag(WMBag *bag, void *item);
|
||||
|
||||
int WMCountInBag(WMBag *bag, void *item);
|
||||
|
||||
int WMFindInBag(WMBag *bag, int (*match)(void*,void*), void *cdata);
|
||||
int WMFindInBag(WMBag *bag, WMMatchDataProc *match, void *cdata);
|
||||
|
||||
void* WMBagFirst(WMBag *bag, WMBagIterator *ptr);
|
||||
|
||||
|
||||
@@ -21,21 +21,21 @@
|
||||
|
||||
typedef struct W_Array {
|
||||
void **items; /* the array data */
|
||||
unsigned itemCount; /* # of items in array */
|
||||
unsigned allocSize; /* allocated size of array */
|
||||
int itemCount; /* # of items in array */
|
||||
int allocSize; /* allocated size of array */
|
||||
void (*destructor)(void *item); /* the destructor to free elements */
|
||||
} W_Array;
|
||||
|
||||
|
||||
WMArray*
|
||||
WMCreateArray(unsigned initialSize)
|
||||
WMCreateArray(int initialSize)
|
||||
{
|
||||
WMCreateArrayWithDestructor(initialSize, NULL);
|
||||
}
|
||||
|
||||
|
||||
WMArray*
|
||||
WMCreateArrayWithDestructor(unsigned initialSize, void (*destructor)(void*))
|
||||
WMCreateArrayWithDestructor(int initialSize, WMFreeDataProc *destructor)
|
||||
{
|
||||
WMArray *array;
|
||||
|
||||
@@ -78,7 +78,7 @@ WMFreeArray(WMArray *array)
|
||||
}
|
||||
|
||||
|
||||
unsigned
|
||||
int
|
||||
WMGetArrayItemCount(WMArray *array)
|
||||
{
|
||||
return array->itemCount;
|
||||
@@ -120,7 +120,7 @@ WMAddToArray(WMArray *array, void *item)
|
||||
|
||||
|
||||
int
|
||||
WMInsertInArray(WMArray *array, unsigned index, void *item)
|
||||
WMInsertInArray(WMArray *array, int index, void *item)
|
||||
{
|
||||
wassertrv(index <= array->itemCount, 0);
|
||||
|
||||
@@ -141,7 +141,7 @@ WMInsertInArray(WMArray *array, unsigned index, void *item)
|
||||
|
||||
|
||||
void*
|
||||
WMReplaceInArray(WMArray *array, unsigned index, void *item)
|
||||
WMReplaceInArray(WMArray *array, int index, void *item)
|
||||
{
|
||||
void *old;
|
||||
|
||||
@@ -160,7 +160,7 @@ WMReplaceInArray(WMArray *array, unsigned index, void *item)
|
||||
|
||||
|
||||
int
|
||||
WMDeleteFromArray(WMArray *array, unsigned index)
|
||||
WMDeleteFromArray(WMArray *array, int index)
|
||||
{
|
||||
if (index >= array->itemCount)
|
||||
return 0;
|
||||
@@ -183,7 +183,7 @@ WMDeleteFromArray(WMArray *array, unsigned index)
|
||||
int
|
||||
WMRemoveFromArray(WMArray *array, void *item)
|
||||
{
|
||||
unsigned i;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < array->itemCount; i++) {
|
||||
if (array->items[i] == item) {
|
||||
@@ -196,7 +196,7 @@ WMRemoveFromArray(WMArray *array, void *item)
|
||||
|
||||
|
||||
void*
|
||||
WMGetFromArray(WMArray *array, unsigned index)
|
||||
WMGetFromArray(WMArray *array, int index)
|
||||
{
|
||||
if (index >= array->itemCount)
|
||||
return NULL;
|
||||
@@ -215,9 +215,9 @@ WMPopFromArray(WMArray *array)
|
||||
|
||||
|
||||
int
|
||||
WMFindInArray(WMArray *array, int (*match)(void*, void*), void *cdata)
|
||||
WMFindInArray(WMArray *array, WMMatchDataProc *match, void *cdata)
|
||||
{
|
||||
unsigned i;
|
||||
int i;
|
||||
|
||||
if (match!=NULL) {
|
||||
for (i = 0; i < array->itemCount; i++) {
|
||||
@@ -235,10 +235,10 @@ WMFindInArray(WMArray *array, int (*match)(void*, void*), void *cdata)
|
||||
}
|
||||
|
||||
|
||||
unsigned
|
||||
int
|
||||
WMCountInArray(WMArray *array, void *item)
|
||||
{
|
||||
unsigned i, count;
|
||||
int i, count;
|
||||
|
||||
for (i=0, count=0; i<array->itemCount; i++) {
|
||||
if (array->items[i] == item)
|
||||
@@ -261,7 +261,7 @@ WMSortArray(WMArray *array, int (*comparer)(const void*, const void*))
|
||||
void
|
||||
WMMapArray(WMArray *array, void (*function)(void*, void*), void *data)
|
||||
{
|
||||
unsigned i;
|
||||
int i;
|
||||
|
||||
for (i=0; i<array->itemCount; i++) {
|
||||
(*function)(array->items[i], data);
|
||||
|
||||
@@ -100,18 +100,18 @@ static int
|
||||
closestListItem(WMList *list, char *text, Bool exact)
|
||||
{
|
||||
WMListItem *item;
|
||||
WMBag *items = WMGetListItems(list);
|
||||
WMBagIterator i;
|
||||
int len = strlen(text);
|
||||
WMArray *items = WMGetListItems(list);
|
||||
int i, len = strlen(text);
|
||||
|
||||
if (len==0)
|
||||
return -1;
|
||||
|
||||
WM_ITERATE_BAG(items, item, i) {
|
||||
for(i=0; i<WMGetArrayItemCount(items); i++) {
|
||||
item = WMGetFromArray(items, i);
|
||||
if (strlen(item->text) >= len &&
|
||||
((exact && strcmp(item->text, text)==0) ||
|
||||
(!exact && strncmp(item->text, text, len)==0))) {
|
||||
return WMBagIndexForIterator(items, i);
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
122
WINGs/wlist.c
122
WINGs/wlist.c
@@ -11,7 +11,8 @@ typedef struct W_List {
|
||||
W_Class widgetClass;
|
||||
W_View *view;
|
||||
|
||||
WMBag *items; /* list of WMListItem */
|
||||
WMArray *items; /* list of WMListItem */
|
||||
WMArray *selectedItems; /* list of selected WMListItems */
|
||||
|
||||
short selectedItem;
|
||||
|
||||
@@ -28,19 +29,15 @@ typedef struct W_List {
|
||||
|
||||
WMListDrawProc *draw;
|
||||
|
||||
WMHandlerID *idleID; /* for updating the scroller after
|
||||
* adding elements */
|
||||
WMHandlerID *idleID; /* for updating the scroller after adding elements */
|
||||
|
||||
WMScroller *vScroller;
|
||||
/*
|
||||
WMScroller *hScroller;
|
||||
*/
|
||||
|
||||
struct {
|
||||
unsigned int allowMultipleSelection:1;
|
||||
unsigned int allowEmptySelection:1;
|
||||
unsigned int userDrawn:1;
|
||||
unsigned int userItemHeight:1;
|
||||
/* */
|
||||
unsigned int dontFitAll:1; /* 1 = last item won't be fully visible */
|
||||
unsigned int redrawPending:1;
|
||||
unsigned int buttonPressed:1;
|
||||
@@ -77,6 +74,16 @@ W_ViewDelegate _ListViewDelegate = {
|
||||
};
|
||||
|
||||
|
||||
static void
|
||||
releaseItem(void *data)
|
||||
{
|
||||
WMListItem *item = (WMListItem*)data;
|
||||
|
||||
if (item->text)
|
||||
wfree(item->text);
|
||||
wfree(item);
|
||||
}
|
||||
|
||||
|
||||
WMList*
|
||||
WMCreateList(WMWidget *parent)
|
||||
@@ -107,7 +114,7 @@ WMCreateList(WMWidget *parent)
|
||||
|
||||
lPtr->itemHeight = WMFontHeight(scrPtr->normalFont) + 1;
|
||||
|
||||
lPtr->items = WMCreateBag(4);
|
||||
lPtr->items = WMCreateArrayWithDestructor(4, releaseItem);
|
||||
|
||||
/* create the vertical scroller */
|
||||
lPtr->vScroller = WMCreateScroller(lPtr);
|
||||
@@ -137,7 +144,7 @@ comparator(const void *a, const void *b)
|
||||
void
|
||||
WMSortListItems(WMList *lPtr)
|
||||
{
|
||||
WMSortBag(lPtr->items, comparator);
|
||||
WMSortArray(lPtr->items, comparator);
|
||||
|
||||
paintList(lPtr);
|
||||
}
|
||||
@@ -147,7 +154,7 @@ WMSortListItems(WMList *lPtr)
|
||||
void
|
||||
WMSortListItemsWithComparer(WMList *lPtr, int (f)(const void*, const void*))
|
||||
{
|
||||
WMSortBag(lPtr->items, f);
|
||||
WMSortArray(lPtr->items, f);
|
||||
|
||||
paintList(lPtr);
|
||||
}
|
||||
@@ -170,12 +177,12 @@ WMInsertListItem(WMList *lPtr, int row, char *text)
|
||||
&& row >= 0)
|
||||
lPtr->selectedItem++;
|
||||
|
||||
row = WMIN(row, WMGetBagItemCount(lPtr->items));
|
||||
row = WMIN(row, WMGetArrayItemCount(lPtr->items));
|
||||
|
||||
if (row < 0)
|
||||
WMPutInBag(lPtr->items, item);
|
||||
WMAddToArray(lPtr->items, item);
|
||||
else
|
||||
WMInsertInBag(lPtr->items, row, item);
|
||||
WMInsertInArray(lPtr->items, row, item);
|
||||
|
||||
/* update the scroller when idle, so that we don't waste time
|
||||
* updating it when another item is going to be added later */
|
||||
@@ -190,13 +197,12 @@ WMInsertListItem(WMList *lPtr, int row, char *text)
|
||||
void
|
||||
WMRemoveListItem(WMList *lPtr, int row)
|
||||
{
|
||||
WMListItem *item;
|
||||
int topItem = lPtr->topItem;
|
||||
int selNotify = 0;
|
||||
|
||||
CHECK_CLASS(lPtr, WC_List);
|
||||
|
||||
if (row < 0 || row >= WMGetBagItemCount(lPtr->items))
|
||||
if (row < 0 || row >= WMGetArrayItemCount(lPtr->items))
|
||||
return;
|
||||
|
||||
if (lPtr->selectedItem == row) {
|
||||
@@ -211,12 +217,7 @@ WMRemoveListItem(WMList *lPtr, int row)
|
||||
if (lPtr->topItem < 0)
|
||||
lPtr->topItem = 0;
|
||||
|
||||
item = WMGetFromBag(lPtr->items, row);
|
||||
if (item->text)
|
||||
wfree(item->text);
|
||||
wfree(item);
|
||||
|
||||
WMDeleteFromBag(lPtr->items, row);
|
||||
WMDeleteFromArray(lPtr->items, row);
|
||||
|
||||
if (!lPtr->idleID) {
|
||||
lPtr->idleID = WMAddIdleHandler((WMCallback*)updateScroller, lPtr);
|
||||
@@ -233,11 +234,11 @@ WMRemoveListItem(WMList *lPtr, int row)
|
||||
WMListItem*
|
||||
WMGetListItem(WMList *lPtr, int row)
|
||||
{
|
||||
return WMGetFromBag(lPtr->items, row);
|
||||
return WMGetFromArray(lPtr->items, row);
|
||||
}
|
||||
|
||||
|
||||
WMBag*
|
||||
WMArray*
|
||||
WMGetListItems(WMList *lPtr)
|
||||
{
|
||||
return lPtr->items;
|
||||
@@ -268,16 +269,10 @@ WMSetListUserDrawItemHeight(WMList *lPtr, unsigned short height)
|
||||
void
|
||||
WMClearList(WMList *lPtr)
|
||||
{
|
||||
WMListItem *item;
|
||||
int oldSelected = lPtr->selectedItem;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < WMGetBagItemCount(lPtr->items); i++) {
|
||||
item = WMGetFromBag(lPtr->items, i);
|
||||
wfree(item->text);
|
||||
wfree(item);
|
||||
}
|
||||
WMEmptyBag(lPtr->items);
|
||||
WMEmptyArray(lPtr->items);
|
||||
|
||||
lPtr->topItem = 0;
|
||||
lPtr->selectedItem = -1;
|
||||
@@ -317,7 +312,7 @@ WMGetListSelectedItem(WMList *lPtr)
|
||||
if (lPtr->selectedItem < 0)
|
||||
return NULL;
|
||||
|
||||
return WMGetFromBag(lPtr->items, lPtr->selectedItem);
|
||||
return WMGetFromArray(lPtr->items, lPtr->selectedItem);
|
||||
}
|
||||
|
||||
|
||||
@@ -339,8 +334,8 @@ void
|
||||
WMSetListPosition(WMList *lPtr, int row)
|
||||
{
|
||||
lPtr->topItem = row;
|
||||
if (lPtr->topItem + lPtr->fullFitLines > WMGetBagItemCount(lPtr->items))
|
||||
lPtr->topItem = WMGetBagItemCount(lPtr->items) - lPtr->fullFitLines;
|
||||
if (lPtr->topItem + lPtr->fullFitLines > WMGetArrayItemCount(lPtr->items))
|
||||
lPtr->topItem = WMGetArrayItemCount(lPtr->items) - lPtr->fullFitLines;
|
||||
|
||||
if (lPtr->topItem < 0)
|
||||
lPtr->topItem = 0;
|
||||
@@ -353,7 +348,7 @@ WMSetListPosition(WMList *lPtr, int row)
|
||||
void
|
||||
WMSetListBottomPosition(WMList *lPtr, int row)
|
||||
{
|
||||
if (WMGetBagItemCount(lPtr->items) > lPtr->fullFitLines) {
|
||||
if (WMGetArrayItemCount(lPtr->items) > lPtr->fullFitLines) {
|
||||
lPtr->topItem = row - lPtr->fullFitLines;
|
||||
if (lPtr->topItem < 0)
|
||||
lPtr->topItem = 0;
|
||||
@@ -366,7 +361,7 @@ WMSetListBottomPosition(WMList *lPtr, int row)
|
||||
int
|
||||
WMGetListNumberOfRows(WMList *lPtr)
|
||||
{
|
||||
return WMGetBagItemCount(lPtr->items);
|
||||
return WMGetArrayItemCount(lPtr->items);
|
||||
}
|
||||
|
||||
int
|
||||
@@ -383,7 +378,7 @@ vScrollCallBack(WMWidget *scroller, void *self)
|
||||
WMScroller *sPtr = (WMScroller*)scroller;
|
||||
int height;
|
||||
int topItem = lPtr->topItem;
|
||||
int itemCount = WMGetBagItemCount(lPtr->items);
|
||||
int itemCount = WMGetArrayItemCount(lPtr->items);
|
||||
|
||||
height = lPtr->view->size.height - 4;
|
||||
|
||||
@@ -457,7 +452,7 @@ paintItem(List *lPtr, int index)
|
||||
int width, height, x, y;
|
||||
WMListItem *itemPtr;
|
||||
|
||||
itemPtr = WMGetFromBag(lPtr->items, index);
|
||||
itemPtr = WMGetFromArray(lPtr->items, index);
|
||||
|
||||
width = lPtr->view->size.width - 2 - 19;
|
||||
height = lPtr->itemHeight;
|
||||
@@ -508,11 +503,11 @@ paintList(List *lPtr)
|
||||
if (!lPtr->view->flags.mapped)
|
||||
return;
|
||||
|
||||
if (WMGetBagItemCount(lPtr->items) > 0) {
|
||||
if (WMGetArrayItemCount(lPtr->items) > 0) {
|
||||
if (lPtr->topItem+lPtr->fullFitLines+lPtr->flags.dontFitAll
|
||||
> WMGetBagItemCount(lPtr->items)) {
|
||||
> WMGetArrayItemCount(lPtr->items)) {
|
||||
|
||||
lim = WMGetBagItemCount(lPtr->items) - lPtr->topItem;
|
||||
lim = WMGetArrayItemCount(lPtr->items) - lPtr->topItem;
|
||||
XClearArea(scrPtr->display, lPtr->view->window, 19,
|
||||
2+lim*lPtr->itemHeight, lPtr->view->size.width-21,
|
||||
lPtr->view->size.height-lim*lPtr->itemHeight-3, False);
|
||||
@@ -541,7 +536,7 @@ static void
|
||||
updateScroller(List *lPtr)
|
||||
{
|
||||
float knobProportion, floatValue, tmp;
|
||||
int count = WMGetBagItemCount(lPtr->items);
|
||||
int count = WMGetArrayItemCount(lPtr->items);
|
||||
|
||||
if (lPtr->idleID)
|
||||
WMDeleteIdleHandler(lPtr->idleID);
|
||||
@@ -585,21 +580,17 @@ handleEvents(XEvent *event, void *data)
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
matchTitle(void *item, void *title)
|
||||
{
|
||||
return (strcmp(((WMListItem*)item)->text, (char*)title)==0 ? 1 : 0);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
WMFindRowOfListItemWithTitle(WMList *lPtr, char *title)
|
||||
{
|
||||
WMListItem *item;
|
||||
WMBagIterator i;
|
||||
int ok = 0;
|
||||
|
||||
WM_ITERATE_BAG(lPtr->items, item, i) {
|
||||
if (strcmp(item->text, title)==0) {
|
||||
ok = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ok ? WMBagIndexForIterator(lPtr->items, i) : -1;
|
||||
return WMFindInArray(lPtr->items, matchTitle, title);
|
||||
}
|
||||
|
||||
|
||||
@@ -609,7 +600,7 @@ WMSelectListItem(WMList *lPtr, int row)
|
||||
WMListItem *itemPtr;
|
||||
int notify = 0;
|
||||
|
||||
if (row >= WMGetBagItemCount(lPtr->items))
|
||||
if (row >= WMGetArrayItemCount(lPtr->items))
|
||||
return;
|
||||
|
||||
/* the check below must be changed when the multiple selection is
|
||||
@@ -620,12 +611,12 @@ WMSelectListItem(WMList *lPtr, int row)
|
||||
else
|
||||
notify = 1;
|
||||
|
||||
assert(lPtr->selectedItem < WMGetBagItemCount(lPtr->items));
|
||||
assert(lPtr->selectedItem < WMGetArrayItemCount(lPtr->items));
|
||||
|
||||
if (!lPtr->flags.allowMultipleSelection) {
|
||||
/* unselect previous selected item */
|
||||
if (lPtr->selectedItem >= 0) {
|
||||
itemPtr = WMGetFromBag(lPtr->items, lPtr->selectedItem);
|
||||
itemPtr = WMGetFromArray(lPtr->items, lPtr->selectedItem);
|
||||
|
||||
if (itemPtr->selected) {
|
||||
itemPtr->selected = 0;
|
||||
@@ -649,7 +640,7 @@ WMSelectListItem(WMList *lPtr, int row)
|
||||
}
|
||||
|
||||
/* select item */
|
||||
itemPtr = WMGetFromBag(lPtr->items, row);
|
||||
itemPtr = WMGetFromArray(lPtr->items, row);
|
||||
|
||||
if (lPtr->flags.allowMultipleSelection)
|
||||
itemPtr->selected = !itemPtr->selected;
|
||||
@@ -679,7 +670,7 @@ getItemIndexAt(List *lPtr, int clickY)
|
||||
|
||||
index = (clickY - 2) / lPtr->itemHeight + lPtr->topItem;
|
||||
|
||||
if (index < 0 || index >= WMGetBagItemCount(lPtr->items))
|
||||
if (index < 0 || index >= WMGetArrayItemCount(lPtr->items))
|
||||
return -1;
|
||||
|
||||
return index;
|
||||
@@ -737,7 +728,7 @@ handleActionEvents(XEvent *event, void *data)
|
||||
|
||||
if (event->xbutton.button == WINGsConfiguration.mouseWheelDown) {
|
||||
/* Wheel down */
|
||||
int itemCount = WMGetBagItemCount(lPtr->items);
|
||||
int itemCount = WMGetArrayItemCount(lPtr->items);
|
||||
if (lPtr->topItem + lPtr->fullFitLines < itemCount) {
|
||||
int incr = lPtr->fullFitLines-(1-lPtr->flags.dontFitAll)-1;
|
||||
lPtr->topItem += incr;
|
||||
@@ -804,8 +795,8 @@ updateGeometry(WMList *lPtr)
|
||||
lPtr->flags.dontFitAll = 0;
|
||||
}
|
||||
|
||||
if (WMGetBagItemCount(lPtr->items) - lPtr->topItem <= lPtr->fullFitLines) {
|
||||
lPtr->topItem = WMGetBagItemCount(lPtr->items) - lPtr->fullFitLines;
|
||||
if (WMGetArrayItemCount(lPtr->items) - lPtr->topItem <= lPtr->fullFitLines) {
|
||||
lPtr->topItem = WMGetArrayItemCount(lPtr->items) - lPtr->fullFitLines;
|
||||
if (lPtr->topItem < 0)
|
||||
lPtr->topItem = 0;
|
||||
}
|
||||
@@ -828,18 +819,11 @@ didResizeList(W_ViewDelegate *self, WMView *view)
|
||||
static void
|
||||
destroyList(List *lPtr)
|
||||
{
|
||||
WMListItem *item;
|
||||
WMBagIterator i;
|
||||
|
||||
if (lPtr->idleID)
|
||||
WMDeleteIdleHandler(lPtr->idleID);
|
||||
lPtr->idleID = NULL;
|
||||
|
||||
WM_ITERATE_BAG(lPtr->items, item, i) {
|
||||
wfree(item->text);
|
||||
wfree(item);
|
||||
}
|
||||
WMFreeBag(lPtr->items);
|
||||
WMFreeArray(lPtr->items);
|
||||
|
||||
wfree(lPtr);
|
||||
}
|
||||
|
||||
@@ -1303,9 +1303,8 @@ menuItemCloned(WEditMenuDelegate *delegate, WEditMenu *menu,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static void menuItemEdited(struct WEditMenuDelegate *delegate, WEditMenu *menu,
|
||||
static void
|
||||
menuItemEdited(struct WEditMenuDelegate *delegate, WEditMenu *menu,
|
||||
WEditMenuItem *item)
|
||||
{
|
||||
_Panel *panel = (_Panel*)delegate->data;
|
||||
@@ -1320,11 +1319,9 @@ static void menuItemEdited(struct WEditMenuDelegate *delegate, WEditMenu *menu,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static Bool shouldRemoveItem(struct WEditMenuDelegate *delegate,
|
||||
WEditMenu *menu, WEditMenuItem *item)
|
||||
static Bool
|
||||
shouldRemoveItem(struct WEditMenuDelegate *delegate, WEditMenu *menu,
|
||||
WEditMenuItem *item)
|
||||
{
|
||||
_Panel *panel = (_Panel*)delegate->data;
|
||||
|
||||
|
||||
@@ -164,26 +164,29 @@ WCreateEditMenuItem(WMWidget *parent, char *title, Bool isTitle)
|
||||
return iPtr;
|
||||
}
|
||||
|
||||
char *WGetEditMenuItemTitle(WEditMenuItem *item)
|
||||
char*
|
||||
WGetEditMenuItemTitle(WEditMenuItem *item)
|
||||
{
|
||||
return item->label;
|
||||
}
|
||||
|
||||
void *WGetEditMenuItemData(WEditMenuItem *item)
|
||||
void*
|
||||
WGetEditMenuItemData(WEditMenuItem *item)
|
||||
{
|
||||
return item->data;
|
||||
}
|
||||
|
||||
|
||||
void WSetEditMenuItemData(WEditMenuItem *item, void *data,
|
||||
WMCallback *destroyer)
|
||||
void
|
||||
WSetEditMenuItemData(WEditMenuItem *item, void *data, WMCallback *destroyer)
|
||||
{
|
||||
item->data = data;
|
||||
item->destroyData = destroyer;
|
||||
}
|
||||
|
||||
|
||||
void WSetEditMenuItemImage(WEditMenuItem *item, WMPixmap *pixmap)
|
||||
void
|
||||
WSetEditMenuItemImage(WEditMenuItem *item, WMPixmap *pixmap)
|
||||
{
|
||||
if (item->pixmap)
|
||||
WMReleasePixmap(item->pixmap);
|
||||
@@ -315,10 +318,9 @@ static void updateMenuContents(WEditMenu *mPtr);
|
||||
static void handleEvents(XEvent *event, void *data);
|
||||
|
||||
static void editItemLabel(WEditMenuItem *item);
|
||||
|
||||
static void stopEditItem(WEditMenu *menu, Bool apply);
|
||||
|
||||
|
||||
static void unmapMenu(WEditMenu *menu);
|
||||
static void deselectItem(WEditMenu *menu);
|
||||
|
||||
|
||||
@@ -594,12 +596,10 @@ WGetEditMenuSubmenu(WEditMenu *mPtr, WEditMenuItem *item)
|
||||
}
|
||||
|
||||
|
||||
static int simpleMatch(void *a, void *b)
|
||||
static int
|
||||
simpleMatch(void *a, void *b)
|
||||
{
|
||||
if (a == b)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
return ((a == b) ? 1 : 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -692,7 +692,7 @@ closeMenuAction(WMWidget *w, void *data)
|
||||
WMAddIdleHandler(WMDestroyWidget, menu->closeB);
|
||||
menu->closeB = NULL;
|
||||
|
||||
unmapMenu(menu);
|
||||
WEditMenuHide(menu);
|
||||
}
|
||||
|
||||
|
||||
@@ -790,8 +790,8 @@ updateMenuContents(WEditMenu *mPtr)
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
unmapMenu(WEditMenu *menu)
|
||||
void
|
||||
WEditMenuHide(WEditMenu *menu)
|
||||
{
|
||||
WMUnmapWidget(menu);
|
||||
|
||||
@@ -801,6 +801,21 @@ unmapMenu(WEditMenu *menu)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WEditMenuUnhide(WEditMenu *menu)
|
||||
{
|
||||
WMMapWidget(menu);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WEditMenuShowAt(WEditMenu *menu, int x, int y)
|
||||
{
|
||||
WMMoveWidget(menu, x, y);
|
||||
WMMapWidget(menu);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
deselectItem(WEditMenu *menu)
|
||||
{
|
||||
@@ -815,7 +830,7 @@ deselectItem(WEditMenu *menu)
|
||||
submenu = item->submenu;
|
||||
|
||||
if (submenu && !WEditMenuIsTornOff(submenu)) {
|
||||
unmapMenu(submenu);
|
||||
WEditMenuHide(submenu);
|
||||
}
|
||||
|
||||
menu->selectedItem = NULL;
|
||||
@@ -1057,7 +1072,8 @@ slideWindow(Display *dpy, Window win, int srcX, int srcY, int dstX, int dstY)
|
||||
}
|
||||
|
||||
|
||||
static int errorHandler(Display *d, XErrorEvent *ev)
|
||||
static int
|
||||
errorHandler(Display *d, XErrorEvent *ev)
|
||||
{
|
||||
/* just ignore */
|
||||
return 0;
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _editmenu_h_
|
||||
#define _editmenu_h_
|
||||
|
||||
typedef struct W_EditMenu WEditMenu;
|
||||
typedef struct W_EditMenuItem WEditMenuItem;
|
||||
|
||||
@@ -98,3 +101,13 @@ WMPoint WGetEditMenuLocationForSubmenu(WEditMenu *mPtr, WEditMenu *submenu);
|
||||
void WTearOffEditMenu(WEditMenu *menu, WEditMenu *submenu);
|
||||
|
||||
Bool WEditMenuIsTornOff(WEditMenu *mPtr);
|
||||
|
||||
void WEditMenuHide(WEditMenu *menu);
|
||||
|
||||
void WEditMenuUnhide(WEditMenu *menu);
|
||||
|
||||
void WEdirMenuShowAt(WEditMenu *menu, int x, int y);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user