mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 05:15:45 +00:00
implement "use selection for find" and move more of the find code into
the CHBrowserView and change it to using the firstResponder. (bug 157051)
This commit is contained in:
parent
20e13b89b5
commit
6c4bf40715
@ -7,7 +7,7 @@
|
||||
<key>IBEditorPositions</key>
|
||||
<dict>
|
||||
<key>29</key>
|
||||
<string>44 952 453 44 0 0 1600 1002 </string>
|
||||
<string>32 783 453 44 0 0 1280 832 </string>
|
||||
<key>494</key>
|
||||
<string>726 607 116 61 0 0 1600 1002 </string>
|
||||
<key>670</key>
|
||||
|
Binary file not shown.
@ -118,9 +118,7 @@ typedef enum EBookmarkOpenBehavior
|
||||
|
||||
// Edit menu actions.
|
||||
-(IBAction) findInPage:(id)aSender;
|
||||
-(IBAction) findAgain:(id)aSender;
|
||||
-(IBAction) getInfo:(id)aSender;
|
||||
-(IBAction) findPrevious:(id)aSender;
|
||||
|
||||
// Go menu actions.
|
||||
-(IBAction) goBack:(id)aSender;
|
||||
|
@ -757,31 +757,6 @@ Otherwise, we return the URL we originally got. Right now this supports .url and
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// -findAgain
|
||||
//
|
||||
// Called in response to "Find Again" in edit menu. Tells the find controller
|
||||
// to find the next occurrance of what's already been found.
|
||||
//
|
||||
-(IBAction) findAgain:(id)aSender
|
||||
{
|
||||
BrowserWindowController* browserController = [self getMainWindowBrowserController];
|
||||
if (browserController)
|
||||
[browserController findInPage:NO];
|
||||
else
|
||||
NSBeep();
|
||||
}
|
||||
|
||||
// Called in response to "Find Previous" in edit menu.
|
||||
-(IBAction) findPrevious:(id)aSender
|
||||
{
|
||||
BrowserWindowController* browserController = [self getMainWindowBrowserController];
|
||||
if (browserController)
|
||||
[browserController findInPage:YES];
|
||||
else
|
||||
NSBeep();
|
||||
}
|
||||
|
||||
-(IBAction) getInfo:(id)aSender
|
||||
{
|
||||
BrowserWindowController* browserController = [self getMainWindowBrowserController];
|
||||
@ -1292,10 +1267,6 @@ Otherwise, we return the URL we originally got. Right now this supports .url and
|
||||
return NO;
|
||||
}
|
||||
|
||||
// check if someone has previously done a find before allowing findAgain to be enabled
|
||||
if (action == @selector(findAgain:) || action == @selector(findPrevious:))
|
||||
return (browserController && [[browserController lastFindText] length] > 0);
|
||||
|
||||
// check what the state of the personal toolbar should be, but only if there is a browser
|
||||
// window open. Popup windows that have the personal toolbar removed should always gray
|
||||
// out this menu.
|
||||
|
@ -118,6 +118,10 @@ const char kDirServiceContractID[] = "@mozilla.org/file/directory_service;1";
|
||||
- (BOOL)needsToDrawRect:(NSRect)aRect;
|
||||
- (BOOL)wantsDefaultClipping;
|
||||
@end
|
||||
|
||||
const long NSFindPanelActionNext = 2;
|
||||
const long NSFindPanelActionPrevious = 3;
|
||||
const long NSFindPanelActionSetFindString = 7;
|
||||
#endif
|
||||
|
||||
|
||||
@ -128,6 +132,7 @@ const char kDirServiceContractID[] = "@mozilla.org/file/directory_service;1";
|
||||
- (float)getTextZoom;
|
||||
- (void)incrementTextZoom:(float)increment min:(float)min max:(float)max;
|
||||
- (nsIDocShell*)getDocShell;
|
||||
- (NSString*)getSelection;
|
||||
|
||||
- (void)ensurePrintSettings;
|
||||
- (void)savePrintSettings;
|
||||
@ -653,6 +658,42 @@ const char kDirServiceContractID[] = "@mozilla.org/file/directory_service;1";
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// -performFindPanelAction:
|
||||
//
|
||||
// Called on the first responder when the user executes one of the find commands. The
|
||||
// tag is the action to perform.
|
||||
//
|
||||
- (IBAction)performFindPanelAction:(id)inSender
|
||||
{
|
||||
switch ([inSender tag]) {
|
||||
case NSFindPanelActionSetFindString:
|
||||
{
|
||||
// set the selected text on the find pasteboard so it's usable from other apps
|
||||
NSString* selectedText = [self getSelection];
|
||||
NSPasteboard* pboard = [NSPasteboard pasteboardWithName:NSFindPboard];
|
||||
[pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
|
||||
[pboard setString:selectedText forType:NSStringPboardType];
|
||||
|
||||
// set gecko's search string
|
||||
nsCOMPtr<nsIWebBrowserFind> webFind = do_GetInterface(_webBrowser);
|
||||
if (webFind) {
|
||||
nsAutoString sel;
|
||||
[selectedText assignTo_nsAString:sel];
|
||||
webFind->SetSearchString(sel.get());
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case NSFindPanelActionNext:
|
||||
[self findInPage:NO];
|
||||
break;
|
||||
|
||||
case NSFindPanelActionPrevious:
|
||||
[self findInPage:YES];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)findInPageWithPattern:(NSString*)inText caseSensitive:(BOOL)inCaseSensitive
|
||||
wrap:(BOOL)inWrap backwards:(BOOL)inBackwards
|
||||
@ -1229,6 +1270,12 @@ const char kDirServiceContractID[] = "@mozilla.org/file/directory_service;1";
|
||||
return [self canRedo];
|
||||
else if (action == @selector(selectAll:))
|
||||
return YES;
|
||||
else if (action == @selector(performFindPanelAction:)) {
|
||||
long tag = [aMenuItem tag];
|
||||
if (tag == NSFindPanelActionNext || tag == NSFindPanelActionPrevious)
|
||||
return ([[self lastFindText] length] > 0);
|
||||
return YES;
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
@ -1263,11 +1310,13 @@ const char kDirServiceContractID[] = "@mozilla.org/file/directory_service;1";
|
||||
return [super validRequestorForSendType:sendType returnType:returnType];
|
||||
}
|
||||
|
||||
- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard types:(NSArray *)types
|
||||
//
|
||||
// -getSelection
|
||||
//
|
||||
// Returns the currently selected text as a NSString.
|
||||
//
|
||||
- (NSString*)getSelection
|
||||
{
|
||||
if ([types containsObject:NSStringPboardType] == NO)
|
||||
return NO;
|
||||
|
||||
nsCOMPtr<nsICommandManager> cmdManager = do_GetInterface(_webBrowser);
|
||||
if (!cmdManager) return NO;
|
||||
|
||||
@ -1284,12 +1333,20 @@ const char kDirServiceContractID[] = "@mozilla.org/file/directory_service;1";
|
||||
nsAutoString selectedText;
|
||||
params->GetStringValue("result", selectedText);
|
||||
|
||||
NSString* seletedText = [NSString stringWith_nsAString:selectedText];
|
||||
return [NSString stringWith_nsAString:selectedText];
|
||||
}
|
||||
|
||||
- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard types:(NSArray *)types
|
||||
{
|
||||
if ([types containsObject:NSStringPboardType] == NO)
|
||||
return NO;
|
||||
|
||||
NSString* selectedText = [self getSelection];
|
||||
|
||||
NSArray* typesDeclared = [NSArray arrayWithObject:NSStringPboardType];
|
||||
[pboard declareTypes:typesDeclared owner:nil];
|
||||
|
||||
return [pboard setString:seletedText forType:NSStringPboardType];
|
||||
return [pboard setString:selectedText forType:NSStringPboardType];
|
||||
}
|
||||
|
||||
- (BOOL)readSelectionFromPasteboard:(NSPasteboard *)pboard
|
||||
|
@ -160,7 +160,7 @@
|
||||
searchText = [NSString string];
|
||||
|
||||
if (outIsNew)
|
||||
*outIsNew = mLastFindString && ![mLastFindString isEqualToString:searchText];
|
||||
*outIsNew = !mLastFindString || (mLastFindString && ![mLastFindString isEqualToString:searchText]);
|
||||
|
||||
// remember the last pasteboard string that we saw
|
||||
[mLastFindString release];
|
||||
|
Loading…
Reference in New Issue
Block a user