1
0
mirror of https://github.com/gryf/wmaker.git synced 2026-03-10 19:45:48 +01:00

- Fixed some issues with WMBrowser and the file panel that were

introduced by the latest changes in the WMList code (multiple and empty
  selection).
- added WMSetBrowserAllowMultipleSelection(), WMSetBrowserAllowEmptySelection()
  WMBrowserAllowsMultipleSelection() and WMBrowserAllowsEmptySelection().
This commit is contained in:
dan
2000-10-02 06:59:18 +00:00
parent b2478b634f
commit de99155948
6 changed files with 98 additions and 30 deletions

View File

@@ -135,7 +135,6 @@ void
WMSetListAllowMultipleSelection(WMList *lPtr, Bool flag)
{
lPtr->flags.allowMultipleSelection = flag ? 1 : 0;
}
@@ -651,7 +650,11 @@ WMSelectListItem(WMList *lPtr, int row)
if (!lPtr->flags.allowMultipleSelection) {
/* unselect previous selected items */
int foo = lPtr->flags.allowEmptySelection;
lPtr->flags.allowEmptySelection = 1;
WMUnselectAllListItems(lPtr);
lPtr->flags.allowEmptySelection = foo;
}
/* select item */
@@ -839,21 +842,19 @@ WMSelectAllListItems(WMList *lPtr)
void
WMUnselectAllListItems(WMList *lPtr)
{
int i;//, keep;
WMListItem *item;//, *keepItem;
int i, keep;
WMListItem *item, *keepItem;
// FIXME: check for allowEmptySelection
keep = lPtr->flags.allowEmptySelection ? 0 : 1;
//keep = lPtr->flags.allowEmptySelection ? 0 : 1;
if (WMGetArrayItemCount(lPtr->selectedItems) == keep)
return;
//if (WMGetArrayItemCount(lPtr->selectedItems) == keep)
// return 1; /* Nothing selected so return */
//keepItem = (keep==1 ? WMGetFromArray(lPtr->selectedItems, 0) : NULL);
keepItem = (keep==1 ? WMGetFromArray(lPtr->selectedItems, 0) : NULL);
for (i=0; i<WMGetArrayItemCount(lPtr->items); i++) {
item = WMGetFromArray(lPtr->items, i);
if (item->selected) {
if (item!=keepItem && item->selected) {
item->selected = 0;
if (lPtr->view->flags.mapped && i>=lPtr->topItem
&& i<=lPtr->topItem+lPtr->fullFitLines) {
@@ -863,6 +864,9 @@ WMUnselectAllListItems(WMList *lPtr)
}
WMEmptyArray(lPtr->selectedItems);
if (keepItem!=NULL)
WMAddToArray(lPtr->selectedItems, keepItem);
WMPostNotificationName(WMListSelectionDidChangeNotification, lPtr, NULL);
}
@@ -881,6 +885,19 @@ getItemIndexAt(List *lPtr, int clickY)
}
static void
toggleItemSelection(WMList *lPtr, int index)
{
WMListItem *item = WMGetFromArray(lPtr->items, index);
if (item && item->selected) {
WMUnselectListItem(lPtr, index);
} else {
WMSelectListItem(lPtr, index);
}
}
static void
handleActionEvents(XEvent *event, void *data)
{
@@ -955,18 +972,17 @@ handleActionEvents(XEvent *event, void *data)
(*lPtr->doubleAction)(lPtr, lPtr->doubleClientData);
} else {
if (!lPtr->flags.allowMultipleSelection) {
WMSelectListItem(lPtr, tmp);
if (event->xbutton.state & ControlMask) {
toggleItemSelection(lPtr, tmp);
} else {
WMSelectListItem(lPtr, tmp);
}
} else {
WMRange range;
WMListItem *item, *lastSel;
WMListItem *lastSel;
if (event->xbutton.state & ControlMask) {
item = WMGetFromArray(lPtr->items, tmp);
if (item && item->selected) {
WMUnselectListItem(lPtr, tmp);
} else {
WMSelectListItem(lPtr, tmp);
}
toggleItemSelection(lPtr, tmp);
} else if (event->xbutton.state & ShiftMask) {
if (WMGetArrayItemCount(lPtr->selectedItems) == 0) {
WMSelectListItem(lPtr, tmp);