aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPTableView.m
diff options
context:
space:
mode:
Diffstat (limited to 'Source/SPTableView.m')
-rw-r--r--Source/SPTableView.m38
1 files changed, 38 insertions, 0 deletions
diff --git a/Source/SPTableView.m b/Source/SPTableView.m
index 9139bb79..e135e16b 100644
--- a/Source/SPTableView.m
+++ b/Source/SPTableView.m
@@ -37,6 +37,8 @@
@interface SPTableView (PrivateAPI)
- (void)_doubleClickAction;
+- (void)_disableDoubleClickAction:(NSNotification *)notification;
+- (void)_enableDoubleClickAction:(NSNotification *)notification;
@end
@@ -60,6 +62,23 @@
[super awakeFromNib];
}
+/**
+ * Track window changes, in order to add listeners for when sheets are shown
+ * or hidden; this allows the double-click action to be disabled while sheets
+ * are open, preventing beeps when using the field editor on double-click.
+ */
+- (void) viewWillMoveToWindow:(NSWindow *)aWindow {
+ NSNotificationCenter *notifier = [NSNotificationCenter defaultCenter];
+
+ [notifier removeObserver:self name:NSWindowWillBeginSheetNotification object:nil];
+ [notifier removeObserver:self name:NSWindowDidEndSheetNotification object:nil];
+
+ if (aWindow) {
+ [notifier addObserver:self selector:@selector(_disableDoubleClickAction:) name:NSWindowWillBeginSheetNotification object:aWindow];
+ [notifier addObserver:self selector:@selector(_enableDoubleClickAction:) name:NSWindowDidEndSheetNotification object:aWindow];
+ }
+}
+
#pragma mark -
/**
@@ -238,4 +257,23 @@
}
}
+/**
+ * When a sheet is opened on this window, disable the double-click action.
+ * This prevents beeping when a double-click results in a rejected cell edit but
+ * opens a sheet such as the field editor sheet.
+ */
+- (void)_disableDoubleClickAction:(NSNotification *)notification
+{
+ [super setDoubleAction:NULL];
+}
+
+/**
+ * Restore the double-click action after the sheet is closed.
+ */
+- (void)_enableDoubleClickAction:(NSNotification *)notification
+{
+ [super setDoubleAction:@selector(_doubleClickAction)];
+}
+
+
@end