Bug 565525 - [macOS] Table: after dragging a selected line, Cmd+click
removes selection
Clear selectedRowIndex = -1 when drag ends. Applied the fix from Table
to Tree
Change-Id: Ia2db075a03e15ad18fa8fa5f754ea6b05cb84c10
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java
index c20d38b..920f001 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java
@@ -2775,30 +2775,34 @@
* To keep the order of events correct, deselect the other selected items and send the
* selection event before MouseUp is sent. Ignore the next selection event.
*/
- if (!dragDetected && selectedRowIndex != -1) {
- NSOutlineView widget = (NSOutlineView)view;
- NSIndexSet selectedRows = widget.selectedRowIndexes ();
- int count = (int)selectedRows.count();
- long [] indexBuffer = new long [count];
- selectedRows.getIndexes(indexBuffer, count, 0);
- for (int i = 0; i < count; i++) {
- if (indexBuffer[i] == selectedRowIndex) continue;
- ignoreSelect = true;
- widget.deselectRow (indexBuffer[i]);
- ignoreSelect = false;
- }
-
- Event event = new Event ();
- id itemID = widget.itemAtRow (selectedRowIndex);
- if (itemID != null) {
- Widget item = display.getWidget (itemID.id);
- if (item != null && item instanceof TreeItem) {
- event.item = display.getWidget (itemID.id);
- sendSelectionEvent (SWT.Selection, event, false);
+ if (selectedRowIndex != -1) {
+ if (dragDetected) {
+ selectedRowIndex = -1;
+ } else {
+ NSOutlineView widget = (NSOutlineView)view;
+ NSIndexSet selectedRows = widget.selectedRowIndexes ();
+ int count = (int)selectedRows.count();
+ long [] indexBuffer = new long [count];
+ selectedRows.getIndexes(indexBuffer, count, 0);
+ for (int i = 0; i < count; i++) {
+ if (indexBuffer[i] == selectedRowIndex) continue;
+ ignoreSelect = true;
+ widget.deselectRow (indexBuffer[i]);
+ ignoreSelect = false;
}
+
+ Event event = new Event ();
+ id itemID = widget.itemAtRow (selectedRowIndex);
+ if (itemID != null) {
+ Widget item = display.getWidget (itemID.id);
+ if (item != null && item instanceof TreeItem) {
+ event.item = display.getWidget (itemID.id);
+ sendSelectionEvent (SWT.Selection, event, false);
+ }
+ }
+ selectedRowIndex = -1;
+ ignoreSelect = true;
}
- selectedRowIndex = -1;
- ignoreSelect = true;
}
dragDetected = false;
}