wrt some of the stuff in bug #18946
heres a patch... not the prettiest thing but seems to do the job
any objections to this approach?
<foo.diff>
Index: Source/NSTableView.m
===================================================================
--- Source/NSTableView.m (revision 24465)
+++ Source/NSTableView.m (working copy)
@@ -3519,6 +3519,25 @@
}
else
{
+#define COMPUTE_NEW_SELECTION do { \
+if (originalRow == -1) \
+ { \
+ originalRow = currentRow; \
+ } \
+if (currentRow >= 0 && currentRow < _numberOfRows) \
+ { \
+ computeNewSelection(self, \
+ oldSelectedRows, \
+ _selectedRows, \
+ originalRow, \
+ oldRow, \
+ currentRow, \
+ &_selectedRow, \
+ selectionMode); \
+ [self displayIfNeeded]; \
+ } \
+} while (0);
+
// Selection
unsigned int modifiers = [theEvent modifierFlags];
unsigned int eventMask = (NSLeftMouseUpMask
@@ -3598,7 +3617,6 @@
down for a long time.
*/
CREATE_AUTORELEASE_POOL(arp);
- BOOL shouldComputeNewSelection = NO;
NSEventType eventType = [lastEvent type];
mouseLocationWin = [lastEvent locationInWindow];
@@ -3623,7 +3641,7 @@
if (oldRow != currentRow)
{
- shouldComputeNewSelection = YES;
+ COMPUTE_NEW_SELECTION;
}
if (dragOperationPossible == YES)
@@ -3694,7 +3712,7 @@
currentRow = [self rowAtPoint: mouseLocationView];
if (oldRow != currentRow)
{
- shouldComputeNewSelection = YES;
+ COMPUTE_NEW_SELECTION;
}
if (eventType == NSLeftMouseDown)
@@ -3718,10 +3736,8 @@
/* the mouse could have gone up outside of the cell
* avoid selecting the row under mouse cursor */
- /* FIXME this should really send the action
- * unfortunately the row isn't currently being
- * selected so that would send the action on the
- * wrong row. */
+ if (_clickedRow != -1)
+ [self sendAction: _action to: _target];
return;
}
}
@@ -3771,7 +3787,7 @@
currentRow++;
[self scrollRowToVisible: currentRow];
if (dragOperationPossible == NO)
- shouldComputeNewSelection = YES;
+ COMPUTE_NEW_SELECTION;
}
}
else
@@ -3785,35 +3801,13 @@
currentRow--;
[self scrollRowToVisible: currentRow];
if (dragOperationPossible == NO)
- shouldComputeNewSelection = YES;
+ COMPUTE_NEW_SELECTION;
}
}
break;
default:
break;
}
-
- if (shouldComputeNewSelection == YES)
- {
- if (originalRow == -1)
- {
- originalRow = currentRow;
- }
-
- if (currentRow >= 0 && currentRow < _numberOfRows)
- {
- computeNewSelection(self,
- oldSelectedRows,
- _selectedRows,
- originalRow,
- oldRow,
- currentRow,
- &_selectedRow,
- selectionMode);
-
- [self displayIfNeeded];
- }
- }
if (done == NO)
{
_______________________________________________
Gnustep-dev mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/gnustep-dev