diff options
author | rowanbeentje <rowan@beent.je> | 2012-04-24 00:05:50 +0000 |
---|---|---|
committer | rowanbeentje <rowan@beent.je> | 2012-04-24 00:05:50 +0000 |
commit | 76d1d9d7fe2046bcf9281f95c5a7b541d49e6a0b (patch) | |
tree | a582f71ba9e26440db2b4aa28a24f0824796239e | |
parent | 3b079c8d06ee5676190c9f11aec3b64f4631b048 (diff) | |
download | sequelpro-76d1d9d7fe2046bcf9281f95c5a7b541d49e6a0b.tar.gz sequelpro-76d1d9d7fe2046bcf9281f95c5a7b541d49e6a0b.tar.bz2 sequelpro-76d1d9d7fe2046bcf9281f95c5a7b541d49e6a0b.zip |
- Rework edit sheet find/replace handling; instead of altering the main window's firstResponder, which only worked under certain NSTextView focus conditions, allow the field edit sheet to become the main window. This fixes issues with the Find/Replace dialog not fully working correctly in the edit sheet.
-rw-r--r-- | Source/SPEditSheetTextView.m | 17 | ||||
-rw-r--r-- | Source/SPFieldEditorController.h | 3 | ||||
-rw-r--r-- | Source/SPFieldEditorController.m | 17 | ||||
-rw-r--r-- | Source/SPWindow.h | 5 | ||||
-rw-r--r-- | Source/SPWindow.m | 28 |
5 files changed, 40 insertions, 30 deletions
diff --git a/Source/SPEditSheetTextView.m b/Source/SPEditSheetTextView.m index b028c177..a5d110a6 100644 --- a/Source/SPEditSheetTextView.m +++ b/Source/SPEditSheetTextView.m @@ -343,21 +343,4 @@ [self saveChangedFontInUserDefaults]; } -/** - * Needed to allow Find Panel inside the textView if it runs in a sheet - */ -- (BOOL)becomeFirstResponder -{ - return YES; -} - -/** - * Needed to allow Find Panel inside the textView if it runs in a sheet - */ -- (BOOL)resignFirstResponder -{ - return YES; -} - - @end diff --git a/Source/SPFieldEditorController.h b/Source/SPFieldEditorController.h index 4e978646..1fc3f812 100644 --- a/Source/SPFieldEditorController.h +++ b/Source/SPFieldEditorController.h @@ -22,6 +22,7 @@ // // More info at <http://code.google.com/p/sequel-pro/> +@class SPWindow; /** * @class SPFieldEditorController SPFieldEditorController.h @@ -44,7 +45,7 @@ IBOutlet id hexTextView; IBOutlet id editTextScrollView; IBOutlet id hexTextScrollView; - IBOutlet id editSheet; + IBOutlet SPWindow *editSheet; IBOutlet id editSheetCancelButton; IBOutlet id editSheetIsNotEditableCancelButton; IBOutlet id editSheetOkButton; diff --git a/Source/SPFieldEditorController.m b/Source/SPFieldEditorController.m index 3a4ee14c..f94af537 100644 --- a/Source/SPFieldEditorController.m +++ b/Source/SPFieldEditorController.m @@ -32,6 +32,7 @@ #import "SPTooltip.h" #import "SPGeometryDataView.h" #import "SPCopyTable.h" +#import "SPWindow.h" #include <objc/objc-runtime.h> #import "SPCustomQuery.h" #import "SPTableContent.h" @@ -85,6 +86,10 @@ // Allow the user to enter cmd+return to close the edit sheet in addition to fn+return [editSheetOkButton setKeyEquivalentModifierMask:NSCommandKeyMask]; + // Permit the field edit sheet to become main if necessary; this allows fields within the sheet to + // support full interactivity, for example use of the NSFindPanel inside NSTextViews. + [editSheet setIsSheetWhichCanBecomeMain:YES]; + allowUndo = NO; selectionChanged = NO; @@ -431,19 +436,7 @@ editSheetWillBeInitialized = NO; [editSheetProgressBar stopAnimation:self]; - - // The field editor sheet runs as sheet thus a NSTextView won't respond to the Find Panel - // since the Find Panel validate its buttons against [[NSApp mainWindow] firstResponder] == NSTextView. - // After ordering out this sheet SPCopyTable remains the first responder thus set it hard. - // This only works in conjunction with [NSTextView becomeFirstResponder] and [NSTextView resignFirstResponder] - // which has to return YES. -#ifndef SP_REFACTOR - if([[self window] firstResponder] == editTextView) - [[NSApp mainWindow] makeFirstResponder:[[self window] firstResponder]]; -#endif - } - } /** diff --git a/Source/SPWindow.h b/Source/SPWindow.h index 74c4f804..9809f3d3 100644 --- a/Source/SPWindow.h +++ b/Source/SPWindow.h @@ -25,5 +25,10 @@ #import <Cocoa/Cocoa.h> @interface SPWindow : NSWindow +{ + BOOL isSheetWhichCanBecomeMain; +} + +@property (assign) BOOL isSheetWhichCanBecomeMain; @end diff --git a/Source/SPWindow.m b/Source/SPWindow.m index 9353e80d..213d7740 100644 --- a/Source/SPWindow.m +++ b/Source/SPWindow.m @@ -27,6 +27,8 @@ @implementation SPWindow +@synthesize isSheetWhichCanBecomeMain; + #pragma mark - #pragma mark Keyboard shortcut additions @@ -115,6 +117,9 @@ [super sendEvent:theEvent]; } +#pragma mark - +#pragma mark Undo manager handling + /** * If this window is controlled by an SPWindowController, and thus supports being asked * for the frontmost SPTableDocument, request the undoController for that table @@ -129,4 +134,27 @@ return [super undoManager]; } +#pragma mark - +#pragma mark Method overrides + +/** + * Allow sheets to become main if necessary, for example if they are acting as an + * editor for a window. + */ +- (BOOL)canBecomeMainWindow +{ + + // If this window is a sheet which is permitted to become main, respond appropriately + if ([self isSheet] && isSheetWhichCanBecomeMain) { + return [self isVisible]; + } + + // Otherwise, if this window has a sheet attached which can become main, return NO. + if ([[self attachedSheet] isKindOfClass:[SPWindow class]] && [(SPWindow *)[self attachedSheet] isSheetWhichCanBecomeMain]) { + return NO; + } + + return [super canBecomeMainWindow]; +} + @end |