Bug 352193 - SWT.CHECK and SWT.MULTI Table space checks only first
selected item
(Mac fix) - Toggle checked state of the selected items when multiple items are
selected and space is pressed.
Change-Id: I82ec19e969b32a26a9f41980450124a301fba0e6
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java
index 0c7521e..1bc6d52 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java
@@ -84,6 +84,7 @@
/* Used to control drop feedback when FEEDBACK_SCROLL is set/not set */
boolean shouldScroll = true;
+ boolean keyDown;
static int NEXT_ID;
@@ -2021,7 +2022,9 @@
@Override
void keyDown(long id, long sel, long theEvent) {
ignoreSelect = preventSelect = false;
+ keyDown = true;
super.keyDown(id, sel, theEvent);
+ keyDown = false;
}
@Override
@@ -3488,18 +3491,35 @@
@Override
void tableView_setObjectValue_forTableColumn_row (long id, long sel, long aTableView, long anObject, long aTableColumn, long rowIndex) {
- if (checkColumn != null && aTableColumn == checkColumn.id) {
- TableItem item = items [(int)rowIndex];
- item.checked = !item.checked;
- Event event = new Event ();
- event.detail = SWT.CHECK;
- event.item = item;
- event.index = (int)rowIndex;
- sendSelectionEvent (SWT.Selection, event, false);
- item.redraw (-1);
+ if (checkColumn != null && aTableColumn == checkColumn.id) {
+ if (keyDown && (style & SWT.MULTI) != 0) {
+ NSTableView widget = (NSTableView)view;
+ NSIndexSet selection = widget.selectedRowIndexes ();
+ int count = (int)selection.count ();
+ long [] indices = new long [count];
+ selection.getIndexes (indices, count, 0);
+ for (int i = 0; i < indices.length; i++) {
+ int index = (int)indices [i];
+ TableItem item = items [index];
+ toggleCheckedItem (item, index);
+ }
+ } else {
+ TableItem item = items [(int)rowIndex];
+ toggleCheckedItem (item, rowIndex);
+ }
}
}
+private void toggleCheckedItem (TableItem item, long rowIndex) {
+ item.checked = !item.checked;
+ Event event = new Event ();
+ event.detail = SWT.CHECK;
+ event.item = item;
+ event.index = (int)rowIndex;
+ sendSelectionEvent (SWT.Selection, event, false);
+ item.redraw (-1);
+}
+
@Override
void tableView_willDisplayCell_forTableColumn_row (long id, long sel, long aTableView, long cell, long tableColumn, long rowIndex) {
if (checkColumn != null && tableColumn == checkColumn.id) return;