[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677
darin
darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 08:41:59 UTC 2009
The following commit has been merged in the debian/unstable branch:
commit d2f6bd65ed1f9b617d817adadee129c0e28630be
Author: darin <darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Wed May 26 21:16:30 2004 +0000
Reviewed by John.
- moved HTML editing operations from WebView to WebHTMLView, leaving only forwarding machinery
at the WebView level
- fixed <rdar://problem/3655412>: (Editing:�startSpeaking:�ethod�nimplemented�WebKit�diting�PI))
- fixed <rdar://problem/3655414>: (Editing:�stopSpeaking:�ethod�nimplemented�WebKit�diting�PI))
- fixed <rdar://problem/3655375>: (Editing:�pasteAsRichText:�ethod�nimplemented�WebKit�diting�PI))
* WebView.subproj/WebView.h: Added missing declaration of selectionAffinity. I think this
omission was an editorial mistake.
* WebView.subproj/WebView.m:
(-[WebView searchFor:direction:caseSensitive:wrap:]): Use _frameForCurrentSelection directly,
since it no longer returns nil.
(-[WebView pasteboardTypesForSelection]): Use _frameForCurrentSelection instead of going through the bridge.
(-[WebView _frameForCurrentSelection]): Renamed from _currentFrame and changed to return main frame
rather than nil when called on WebView that has no current selection.
(-[WebView _bridgeForCurrentSelection]): Moved in file.
(-[WebView _updateFontPanel]): Removed the one call to _currentSelectionIsEditable here, since
it was the only one left in this file. Eventually this code will move to WebHTMLView.
(-[WebView _performResponderOperation:with:]): Name change.
* WebView.subproj/WebDataSource.m: (-[WebDataSource _documentFragmentWithImageResource:]):
Build document fragment using DOM instead of composing HTML text.
* WebView.subproj/WebHTMLView.m:
(-[WebHTMLView _documentFragmentFromPasteboard:allowPlainText:]): Added allowPlainText boolean,
moved method into new location in file so it can be in the right category, changed link pasting
to use DOM instead of composing HTML text.
(-[WebHTMLView _replaceSelectionWithPasteboard:selectReplacement:allowPlainText:]): Added allowPlainText
boolean, moved method into new location in file so it can be in the right category.
(-[WebHTMLView concludeDragForDraggingInfo:]): Pass YES for allowPlainText.
(-[WebHTMLView centerSelectionInVisibleArea:]): Moved here from WebView.
(-[WebHTMLView _alterCurrentSelection:direction:granularity:]): Ditto.
(-[WebHTMLView moveBackward:]): Ditto.
(-[WebHTMLView moveBackwardAndModifySelection:]): Ditto.
(-[WebHTMLView moveDown:]): Ditto.
(-[WebHTMLView moveDownAndModifySelection:]): Ditto.
(-[WebHTMLView moveForward:]): Ditto.
(-[WebHTMLView moveForwardAndModifySelection:]): Ditto.
(-[WebHTMLView moveLeft:]): Ditto.
(-[WebHTMLView moveLeftAndModifySelection:]): Ditto.
(-[WebHTMLView moveRight:]): Ditto.
(-[WebHTMLView moveRightAndModifySelection:]): Ditto.
(-[WebHTMLView moveToBeginningOfDocument:]): Ditto.
(-[WebHTMLView moveToBeginningOfLine:]): Ditto.
(-[WebHTMLView moveToBeginningOfParagraph:]): Ditto.
(-[WebHTMLView moveToEndOfDocument:]): Ditto.
(-[WebHTMLView moveToEndOfLine:]): Ditto.
(-[WebHTMLView moveToEndOfParagraph:]): Ditto.
(-[WebHTMLView moveUp:]): Ditto.
(-[WebHTMLView moveUpAndModifySelection:]): Ditto.
(-[WebHTMLView moveWordBackward:]): Ditto.
(-[WebHTMLView moveWordBackwardAndModifySelection:]): Ditto.
(-[WebHTMLView moveWordForward:]): Ditto.
(-[WebHTMLView moveWordForwardAndModifySelection:]): Ditto.
(-[WebHTMLView moveWordLeft:]): Ditto.
(-[WebHTMLView moveWordLeftAndModifySelection:]): Ditto.
(-[WebHTMLView moveWordRight:]): Ditto.
(-[WebHTMLView moveWordRightAndModifySelection:]): Ditto.
(-[WebHTMLView pageDown:]): Ditto.
(-[WebHTMLView pageUp:]): Ditto.
(-[WebHTMLView selectParagraph:]): Ditto.
(-[WebHTMLView selectLine:]): Ditto.
(-[WebHTMLView selectWord:]): Ditto.
(-[WebHTMLView copy:]): Moved down in file so it's in the right category.
(-[WebHTMLView cut:]): Ditto.
(-[WebHTMLView delete:]): Ditto.
(-[WebHTMLView paste:]): Ditto.
(-[WebHTMLView copyFont:]): Moved here from WebView.
(-[WebHTMLView pasteFont:]): Ditto.
(-[WebHTMLView pasteAsPlainText:]): Ditto.
(-[WebHTMLView pasteAsRichText:]): Implemented this by calling the paste code with
allowPlainText:NO; believe it or not, that's what this means in NSTextView.
(-[WebHTMLView changeFont:]): Moved here from WebView.
(-[WebHTMLView changeAttributes:]): Ditto.
(-[WebHTMLView changeDocumentBackgroundColor:]): Ditto.
(-[WebHTMLView changeColor:]): Ditto.
(-[WebHTMLView alignCenter:]): Ditto.
(-[WebHTMLView alignJustified:]): Ditto.
(-[WebHTMLView alignLeft:]): Ditto.
(-[WebHTMLView alignRight:]): Ditto.
(-[WebHTMLView indent:]): Ditto.
(-[WebHTMLView insertTab:]): Moved here from WebView, also call insertText rather than
replaceSelectionWithText so it's undoable like a typed character.
(-[WebHTMLView insertBacktab:]): Moved here from WebView.
(-[WebHTMLView insertNewline:]): Moved here from WebView, also call insertText rather than
replaceSelectionWithText so it's undoable like a typed character.
(-[WebHTMLView insertParagraphSeparator:]): Moved here from WebView.
(-[WebHTMLView changeCaseOfLetter:]): Ditto.
(-[WebHTMLView uppercaseWord:]): Ditto.
(-[WebHTMLView lowercaseWord:]): Ditto.
(-[WebHTMLView capitalizeWord:]): Ditto.
(-[WebHTMLView deleteForward:]): Ditto.
(-[WebHTMLView deleteBackward:]): Ditto.
(-[WebHTMLView deleteBackwardByDecomposingPreviousCharacter:]): Ditto.
(-[WebHTMLView deleteWordForward:]): Ditto.
(-[WebHTMLView deleteWordBackward:]): Ditto.
(-[WebHTMLView deleteToBeginningOfLine:]): Ditto.
(-[WebHTMLView deleteToEndOfLine:]): Ditto.
(-[WebHTMLView deleteToBeginningOfParagraph:]): Ditto.
(-[WebHTMLView deleteToEndOfParagraph:]): Ditto.
(-[WebHTMLView complete:]): Ditto.
(-[WebHTMLView checkSpelling:]): Ditto.
(-[WebHTMLView showGuessPanel:]): Ditto.
(-[WebHTMLView performFindPanelAction:]): Ditto.
(-[WebHTMLView startSpeaking:]): Implemented this.
(-[WebHTMLView stopSpeaking:]): Implemented this.
(-[WebHTMLView insertText:]): Moved here from WebView.
* WebView.subproj/WebHTMLViewPrivate.h: Removed declarations of methods that are neither
SPI nor needed outside WebHTMLView.m.
* WebView.subproj/WebViewInternal.h: Removed _currentFrame, and added _frameForCurrentSelection and
_bridgeForCurrentSelection.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@6692 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index 1614481..f81ad0c 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,122 @@
+2004-05-26 Darin Adler <darin at apple.com>
+
+ Reviewed by John.
+
+ - moved HTML editing operations from WebView to WebHTMLView, leaving only forwarding machinery
+ at the WebView level
+
+ - fixed <rdar://problem/3655412>: (Editing:Ê-startSpeaking:ÊmethodÊunimplementedÊ(WebKitÊeditingÊAPI))
+ - fixed <rdar://problem/3655414>: (Editing:Ê-stopSpeaking:ÊmethodÊunimplementedÊ(WebKitÊeditingÊAPI))
+ - fixed <rdar://problem/3655375>: (Editing:Ê-pasteAsRichText:ÊmethodÊunimplementedÊ(WebKitÊeditingÊAPI))
+
+ * WebView.subproj/WebView.h: Added missing declaration of selectionAffinity. I think this
+ omission was an editorial mistake.
+
+ * WebView.subproj/WebView.m:
+ (-[WebView searchFor:direction:caseSensitive:wrap:]): Use _frameForCurrentSelection directly,
+ since it no longer returns nil.
+ (-[WebView pasteboardTypesForSelection]): Use _frameForCurrentSelection instead of going through the bridge.
+ (-[WebView _frameForCurrentSelection]): Renamed from _currentFrame and changed to return main frame
+ rather than nil when called on WebView that has no current selection.
+ (-[WebView _bridgeForCurrentSelection]): Moved in file.
+ (-[WebView _updateFontPanel]): Removed the one call to _currentSelectionIsEditable here, since
+ it was the only one left in this file. Eventually this code will move to WebHTMLView.
+ (-[WebView _performResponderOperation:with:]): Name change.
+
+ * WebView.subproj/WebDataSource.m: (-[WebDataSource _documentFragmentWithImageResource:]):
+ Build document fragment using DOM instead of composing HTML text.
+
+ * WebView.subproj/WebHTMLView.m:
+ (-[WebHTMLView _documentFragmentFromPasteboard:allowPlainText:]): Added allowPlainText boolean,
+ moved method into new location in file so it can be in the right category, changed link pasting
+ to use DOM instead of composing HTML text.
+ (-[WebHTMLView _replaceSelectionWithPasteboard:selectReplacement:allowPlainText:]): Added allowPlainText
+ boolean, moved method into new location in file so it can be in the right category.
+ (-[WebHTMLView concludeDragForDraggingInfo:]): Pass YES for allowPlainText.
+ (-[WebHTMLView centerSelectionInVisibleArea:]): Moved here from WebView.
+ (-[WebHTMLView _alterCurrentSelection:direction:granularity:]): Ditto.
+ (-[WebHTMLView moveBackward:]): Ditto.
+ (-[WebHTMLView moveBackwardAndModifySelection:]): Ditto.
+ (-[WebHTMLView moveDown:]): Ditto.
+ (-[WebHTMLView moveDownAndModifySelection:]): Ditto.
+ (-[WebHTMLView moveForward:]): Ditto.
+ (-[WebHTMLView moveForwardAndModifySelection:]): Ditto.
+ (-[WebHTMLView moveLeft:]): Ditto.
+ (-[WebHTMLView moveLeftAndModifySelection:]): Ditto.
+ (-[WebHTMLView moveRight:]): Ditto.
+ (-[WebHTMLView moveRightAndModifySelection:]): Ditto.
+ (-[WebHTMLView moveToBeginningOfDocument:]): Ditto.
+ (-[WebHTMLView moveToBeginningOfLine:]): Ditto.
+ (-[WebHTMLView moveToBeginningOfParagraph:]): Ditto.
+ (-[WebHTMLView moveToEndOfDocument:]): Ditto.
+ (-[WebHTMLView moveToEndOfLine:]): Ditto.
+ (-[WebHTMLView moveToEndOfParagraph:]): Ditto.
+ (-[WebHTMLView moveUp:]): Ditto.
+ (-[WebHTMLView moveUpAndModifySelection:]): Ditto.
+ (-[WebHTMLView moveWordBackward:]): Ditto.
+ (-[WebHTMLView moveWordBackwardAndModifySelection:]): Ditto.
+ (-[WebHTMLView moveWordForward:]): Ditto.
+ (-[WebHTMLView moveWordForwardAndModifySelection:]): Ditto.
+ (-[WebHTMLView moveWordLeft:]): Ditto.
+ (-[WebHTMLView moveWordLeftAndModifySelection:]): Ditto.
+ (-[WebHTMLView moveWordRight:]): Ditto.
+ (-[WebHTMLView moveWordRightAndModifySelection:]): Ditto.
+ (-[WebHTMLView pageDown:]): Ditto.
+ (-[WebHTMLView pageUp:]): Ditto.
+ (-[WebHTMLView selectParagraph:]): Ditto.
+ (-[WebHTMLView selectLine:]): Ditto.
+ (-[WebHTMLView selectWord:]): Ditto.
+ (-[WebHTMLView copy:]): Moved down in file so it's in the right category.
+ (-[WebHTMLView cut:]): Ditto.
+ (-[WebHTMLView delete:]): Ditto.
+ (-[WebHTMLView paste:]): Ditto.
+ (-[WebHTMLView copyFont:]): Moved here from WebView.
+ (-[WebHTMLView pasteFont:]): Ditto.
+ (-[WebHTMLView pasteAsPlainText:]): Ditto.
+ (-[WebHTMLView pasteAsRichText:]): Implemented this by calling the paste code with
+ allowPlainText:NO; believe it or not, that's what this means in NSTextView.
+ (-[WebHTMLView changeFont:]): Moved here from WebView.
+ (-[WebHTMLView changeAttributes:]): Ditto.
+ (-[WebHTMLView changeDocumentBackgroundColor:]): Ditto.
+ (-[WebHTMLView changeColor:]): Ditto.
+ (-[WebHTMLView alignCenter:]): Ditto.
+ (-[WebHTMLView alignJustified:]): Ditto.
+ (-[WebHTMLView alignLeft:]): Ditto.
+ (-[WebHTMLView alignRight:]): Ditto.
+ (-[WebHTMLView indent:]): Ditto.
+ (-[WebHTMLView insertTab:]): Moved here from WebView, also call insertText rather than
+ replaceSelectionWithText so it's undoable like a typed character.
+ (-[WebHTMLView insertBacktab:]): Moved here from WebView.
+ (-[WebHTMLView insertNewline:]): Moved here from WebView, also call insertText rather than
+ replaceSelectionWithText so it's undoable like a typed character.
+ (-[WebHTMLView insertParagraphSeparator:]): Moved here from WebView.
+ (-[WebHTMLView changeCaseOfLetter:]): Ditto.
+ (-[WebHTMLView uppercaseWord:]): Ditto.
+ (-[WebHTMLView lowercaseWord:]): Ditto.
+ (-[WebHTMLView capitalizeWord:]): Ditto.
+ (-[WebHTMLView deleteForward:]): Ditto.
+ (-[WebHTMLView deleteBackward:]): Ditto.
+ (-[WebHTMLView deleteBackwardByDecomposingPreviousCharacter:]): Ditto.
+ (-[WebHTMLView deleteWordForward:]): Ditto.
+ (-[WebHTMLView deleteWordBackward:]): Ditto.
+ (-[WebHTMLView deleteToBeginningOfLine:]): Ditto.
+ (-[WebHTMLView deleteToEndOfLine:]): Ditto.
+ (-[WebHTMLView deleteToBeginningOfParagraph:]): Ditto.
+ (-[WebHTMLView deleteToEndOfParagraph:]): Ditto.
+ (-[WebHTMLView complete:]): Ditto.
+ (-[WebHTMLView checkSpelling:]): Ditto.
+ (-[WebHTMLView showGuessPanel:]): Ditto.
+ (-[WebHTMLView performFindPanelAction:]): Ditto.
+ (-[WebHTMLView startSpeaking:]): Implemented this.
+ (-[WebHTMLView stopSpeaking:]): Implemented this.
+ (-[WebHTMLView insertText:]): Moved here from WebView.
+
+ * WebView.subproj/WebHTMLViewPrivate.h: Removed declarations of methods that are neither
+ SPI nor needed outside WebHTMLView.m.
+
+ * WebView.subproj/WebViewInternal.h: Removed _currentFrame, and added _frameForCurrentSelection and
+ _bridgeForCurrentSelection.
+
2004-05-25 Maciej Stachowiak <mjs at apple.com>
Reviewed by Richard.
diff --git a/WebKit/WebView.subproj/WebDataSource.m b/WebKit/WebView.subproj/WebDataSource.m
index 35f5b58..e7d868c 100644
--- a/WebKit/WebView.subproj/WebDataSource.m
+++ b/WebKit/WebView.subproj/WebDataSource.m
@@ -204,8 +204,14 @@
{
ASSERT(resource);
[self addSubresource:resource];
- NSString *markupString = [NSString stringWithFormat:@"<IMG SRC=\"%@\">", [[resource URL] _web_originalDataAsString]];
- return [[self _bridge] documentFragmentWithMarkupString:markupString baseURLString:nil];
+
+ DOMDocument *document = [[self _bridge] DOMDocument];
+ DOMDocumentFragment *fragment = [document createDocumentFragment];
+ DOMElement *imageElement = [document createElement:@"img"];
+ [imageElement setAttribute:@"src" :[[resource URL] _web_originalDataAsString]];
+ [fragment appendChild:imageElement];
+
+ return fragment;
}
- (DOMDocumentFragment *)_documentFragmentWithArchive:(WebArchive *)archive
diff --git a/WebKit/WebView.subproj/WebHTMLView.m b/WebKit/WebView.subproj/WebHTMLView.m
index 7530b54..e39b295 100644
--- a/WebKit/WebView.subproj/WebHTMLView.m
+++ b/WebKit/WebView.subproj/WebHTMLView.m
@@ -14,6 +14,7 @@
#import <WebKit/WebDataSourcePrivate.h>
#import <WebKit/WebDocumentInternal.h>
#import <WebKit/WebDOMOperations.h>
+#import <WebKit/WebEditingDelegate.h>
#import <WebKit/WebException.h>
#import <WebKit/WebFramePrivate.h>
#import <WebKit/WebFrameViewPrivate.h>
@@ -84,6 +85,11 @@
static BOOL forceRealHitTest = NO;
+ at interface WebHTMLView (WebHTMLViewFileInternal)
+- (DOMDocumentFragment *)_documentFragmentFromPasteboard:(NSPasteboard *)pasteboard allowPlainText:(BOOL)allowPlainText;
+- (void)_replaceSelectionWithPasteboard:(NSPasteboard *)pasteboard selectReplacement:(BOOL)selectReplacement allowPlainText:(BOOL)allowPlainText;
+ at end
+
@interface WebHTMLView (WebHTMLViewPrivate)
- (void)_setPrinting:(BOOL)printing minimumPageWidth:(float)minPageWidth maximumPageWidth:(float)maxPageWidth adjustViewSize:(BOOL)adjustViewSize;
- (void)_updateTextSizeMultiplier;
@@ -94,7 +100,6 @@ static BOOL forceRealHitTest = NO;
// Any non-zero value will do, but using somethign recognizable might help us debug some day.
#define TRACKING_RECT_TAG 0xBADFACE
-
@interface NSView (AppKitSecretsIKnowAbout)
- (void)_recursiveDisplayRectIfNeededIgnoringOpacity:(NSRect)rect isVisibleRect:(BOOL)isVisibleRect rectIsVisibleRectForView:(NSView *)visibleView topView:(BOOL)topView;
- (void)_recursiveDisplayAllDirtyWithLockFocus:(BOOL)needsLockFocus visRect:(NSRect)visRect;
@@ -102,6 +107,10 @@ static BOOL forceRealHitTest = NO;
- (void)_setDrawsOwnDescendants:(BOOL)drawsOwnDescendants;
@end
+ at interface NSApplication (AppKitSecretsIKnowAbout)
+- (void)speakString:(NSString *)string;
+ at end
+
@interface NSView (WebHTMLViewPrivate)
- (void)_web_setPrintingModeRecursive;
- (void)_web_clearPrintingModeRecursive;
@@ -131,6 +140,81 @@ static BOOL forceRealHitTest = NO;
@end
+ at implementation WebHTMLView (WebHTMLViewFileInternal)
+
+- (DOMDocumentFragment *)_documentFragmentFromPasteboard:(NSPasteboard *)pasteboard allowPlainText:(BOOL)allowPlainText
+{
+ NSArray *types = [pasteboard types];
+
+ if ([types containsObject:WebArchivePboardType]) {
+ WebArchive *archive = [[WebArchive alloc] initWithData:[pasteboard dataForType:WebArchivePboardType]];
+ if (archive) {
+ DOMDocumentFragment *fragment = [[self _dataSource] _documentFragmentWithArchive:archive];
+ [archive release];
+ if (fragment) {
+ return fragment;
+ }
+ }
+ }
+
+ NSURL *URL;
+
+ if ([types containsObject:NSHTMLPboardType]) {
+ return [[self _bridge] documentFragmentWithMarkupString:[pasteboard stringForType:NSHTMLPboardType] baseURLString:nil];
+ } else if ([types containsObject:NSTIFFPboardType]) {
+ WebResource *resource = [[WebResource alloc] initWithData:[pasteboard dataForType:NSTIFFPboardType]
+ URL:[NSURL _web_uniqueWebDataURLWithRelativeString:@"/image.tiff"]
+ MIMEType:@"image/tiff"
+ textEncodingName:nil
+ frameName:nil];
+ DOMDocumentFragment *fragment = [[self _dataSource] _documentFragmentWithImageResource:resource];
+ [resource release];
+ return fragment;
+ } else if ([types containsObject:NSPICTPboardType]) {
+ WebResource *resource = [[WebResource alloc] initWithData:[pasteboard dataForType:NSPICTPboardType]
+ URL:[NSURL _web_uniqueWebDataURLWithRelativeString:@"/image.pict"]
+ MIMEType:@"image/pict"
+ textEncodingName:nil
+ frameName:nil];
+ DOMDocumentFragment *fragment = [[self _dataSource] _documentFragmentWithImageResource:resource];
+ [resource release];
+ return fragment;
+ } else if ((URL = [pasteboard _web_bestURL])) {
+ NSString *URLString = [URL _web_originalDataAsString];
+ NSString *linkLabel = [pasteboard stringForType:WebURLNamePboardType];
+ linkLabel = [linkLabel length] > 0 ? linkLabel : URLString;
+
+ DOMDocument *document = [[self _bridge] DOMDocument];
+ DOMDocumentFragment *fragment = [document createDocumentFragment];
+ DOMElement *anchorElement = [document createElement:@"a"];
+ [anchorElement setAttribute:@"href" :URLString];
+ [fragment appendChild:anchorElement];
+ [anchorElement appendChild:[document createTextNode:linkLabel]];
+ return fragment;
+ } else if ([types containsObject:NSRTFDPboardType]) {
+ // FIXME: Support RTFD to HTML (or DOM) conversion.
+ ERROR("RTFD to HTML conversion not yet supported.");
+ return [[self _bridge] documentFragmentWithMarkupString:[pasteboard stringForType:NSStringPboardType] baseURLString:nil];
+ } else if ([types containsObject:NSRTFPboardType]) {
+ // FIXME: Support RTF to HTML (or DOM) conversion.
+ ERROR("RTF to HTML conversion not yet supported.");
+ return [[self _bridge] documentFragmentWithMarkupString:[pasteboard stringForType:NSStringPboardType] baseURLString:nil];
+ } else if (allowPlainText && [types containsObject:NSStringPboardType]) {
+ return [[self _bridge] documentFragmentWithText:[pasteboard stringForType:NSStringPboardType]];
+ }
+
+ return nil;
+}
+
+- (void)_replaceSelectionWithPasteboard:(NSPasteboard *)pasteboard selectReplacement:(BOOL)selectReplacement allowPlainText:(BOOL)allowPlainText
+{
+ DOMDocumentFragment *fragment = [self _documentFragmentFromPasteboard:pasteboard allowPlainText:allowPlainText];
+ if (fragment) {
+ [[self _bridge] replaceSelectionWithFragment:fragment selectReplacement:selectReplacement];
+ }
+}
+
+ at end
@implementation WebHTMLView (WebPrivate)
@@ -544,75 +628,6 @@ static WebHTMLView *lastHitView = nil;
return [[self _bridge] isSelectionEditable];
}
-- (DOMDocumentFragment *)_documentFragmentFromPasteboard:(NSPasteboard *)pasteboard
-{
- NSArray *types = [pasteboard types];
-
- if ([types containsObject:WebArchivePboardType]) {
- WebArchive *archive = [[WebArchive alloc] initWithData:[pasteboard dataForType:WebArchivePboardType]];
- if (archive) {
- DOMDocumentFragment *fragment = [[self _dataSource] _documentFragmentWithArchive:archive];
- [archive release];
- if (fragment) {
- return fragment;
- }
- }
- }
-
- NSURL *URL;
-
- if ([types containsObject:NSHTMLPboardType]) {
- return [[self _bridge] documentFragmentWithMarkupString:[pasteboard stringForType:NSHTMLPboardType] baseURLString:nil];
- } else if ([types containsObject:NSTIFFPboardType]) {
- WebResource *resource = [[WebResource alloc] initWithData:[pasteboard dataForType:NSTIFFPboardType]
- URL:[NSURL _web_uniqueWebDataURLWithRelativeString:@"/image.tiff"]
- MIMEType:@"image/tiff"
- textEncodingName:nil
- frameName:nil];
- DOMDocumentFragment *fragment = [[self _dataSource] _documentFragmentWithImageResource:resource];
- [resource release];
- return fragment;
- } else if ([types containsObject:NSPICTPboardType]) {
- WebResource *resource = [[WebResource alloc] initWithData:[pasteboard dataForType:NSPICTPboardType]
- URL:[NSURL _web_uniqueWebDataURLWithRelativeString:@"/image.pict"]
- MIMEType:@"image/pict"
- textEncodingName:nil
- frameName:nil];
- DOMDocumentFragment *fragment = [[self _dataSource] _documentFragmentWithImageResource:resource];
- [resource release];
- return fragment;
- } else if ((URL = [pasteboard _web_bestURL])) {
- NSString *URLString = [URL _web_originalDataAsString];
- NSString *linkLabel = [pasteboard stringForType:WebURLNamePboardType];
- linkLabel = [linkLabel length] > 0 ? linkLabel : URLString;
- // FIXME: Need to escape the text in the linkLabel, otherwise characters like "<" won't work.
- // An even better solution would be to make a DOM node with the DOM API rather than creating
- // a markup string here.
- NSString *markupString = [NSString stringWithFormat:@"<A HREF=\"%@\">%@</A>", URLString, linkLabel];
- return [[self _bridge] documentFragmentWithMarkupString:markupString baseURLString:nil];
- } else if ([types containsObject:NSRTFDPboardType]) {
- // FIXME: Support RTFD to HTML (or DOM) conversion.
- ERROR("RTFD to HTML conversion not yet supported.");
- return [[self _bridge] documentFragmentWithMarkupString:[pasteboard stringForType:NSStringPboardType] baseURLString:nil];
- } else if ([types containsObject:NSRTFPboardType]) {
- // FIXME: Support RTF to HTML (or DOM) conversion.
- ERROR("RTF to HTML conversion not yet supported.");
- return [[self _bridge] documentFragmentWithMarkupString:[pasteboard stringForType:NSStringPboardType] baseURLString:nil];
- } else if ([types containsObject:NSStringPboardType]) {
- return [[self _bridge] documentFragmentWithText:[pasteboard stringForType:NSStringPboardType]];
- }
-
- return nil;
-}
-
-- (void)_replaceSelectionWithPasteboard:(NSPasteboard *)pasteboard selectReplacement:(BOOL)selectReplacement
-{
- DOMDocumentFragment *fragment = [self _documentFragmentFromPasteboard:pasteboard];
- if (fragment) {
- [[self _bridge] replaceSelectionWithFragment:fragment selectReplacement:selectReplacement];
- }
-}
-
- (NSImage *)_dragImageForLinkElement:(NSDictionary *)element
{
NSURL *linkURL = [element objectForKey: WebElementLinkURLKey];
@@ -892,39 +907,6 @@ static WebHTMLView *lastHitView = nil;
[self mouseDragged:fakeEvent];
}
-- (void)copy:(id)sender
-{
- if (![self _haveSelection]) {
- NSBeep();
- return;
- }
- [self _writeSelectionToPasteboard:[NSPasteboard generalPasteboard]];
-}
-
-- (void)cut:(id)sender
-{
- if (![self _haveSelection]) {
- NSBeep();
- return;
- }
- [self copy:sender];
- [[self _bridge] deleteSelection];
-}
-
-- (void)delete:(id)sender
-{
- if (![self _haveSelection]) {
- NSBeep();
- return;
- }
- [[self _bridge] deleteSelection];
-}
-
-- (void)paste:(id)sender
-{
- [self _replaceSelectionWithPasteboard:[NSPasteboard generalPasteboard] selectReplacement:NO];
-}
-
@end
@implementation NSView (WebHTMLViewPrivate)
@@ -1750,11 +1732,11 @@ static WebHTMLView *lastHitView = nil;
BOOL didInsert = NO;
if ([self _canProcessDragWithDraggingInfo:draggingInfo]) {
if (_private->initiatedDrag && [[self _bridge] isSelectionEditable]) {
- DOMDocumentFragment *fragment = [self _documentFragmentFromPasteboard:[draggingInfo draggingPasteboard]];
+ DOMDocumentFragment *fragment = [self _documentFragmentFromPasteboard:[draggingInfo draggingPasteboard] allowPlainText:YES];
[bridge moveSelectionToDragCaret:fragment];
} else {
[bridge setSelectionToDragCaret];
- [self _replaceSelectionWithPasteboard:[draggingInfo draggingPasteboard] selectReplacement:YES];
+ [self _replaceSelectionWithPasteboard:[draggingInfo draggingPasteboard] selectReplacement:YES allowPlainText:YES];
}
didInsert = YES;
}
@@ -2101,6 +2083,443 @@ static WebHTMLView *lastHitView = nil;
else
return self;
}
+
+- (void)centerSelectionInVisibleArea:(id)sender
+{
+ // FIXME: Does this do the right thing when the selection is not a caret?
+ [[self _bridge] ensureCaretVisible];
+}
+
+- (void)_alterCurrentSelection:(WebSelectionAlteration)alteration direction:(WebSelectionDirection)direction granularity:(WebSelectionGranularity)granularity
+{
+ WebBridge *bridge = [self _bridge];
+ DOMRange *proposedRange = [bridge rangeByAlteringCurrentSelection:alteration direction:direction granularity:granularity];
+ WebView *webView = [self _webView];
+ if ([[webView _editingDelegateForwarder] webView:webView shouldChangeSelectedDOMRange:[bridge selectedDOMRange] toDOMRange:proposedRange affinity:[bridge selectionAffinity] stillSelecting:NO]) {
+ [bridge alterCurrentSelection:alteration direction:direction granularity:granularity];
+ [bridge ensureCaretVisible];
+ }
+}
+
+- (void)moveBackward:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectBackward granularity:WebSelectByCharacter];
+}
+
+- (void)moveBackwardAndModifySelection:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectBackward granularity:WebSelectByCharacter];
+}
+
+- (void)moveDown:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectDown granularity:WebSelectByCharacter];
+}
+
+- (void)moveDownAndModifySelection:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectDown granularity:WebSelectByCharacter];
+}
+
+- (void)moveForward:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectForward granularity:WebSelectByCharacter];
+}
+
+- (void)moveForwardAndModifySelection:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectForward granularity:WebSelectByCharacter];
+}
+
+- (void)moveLeft:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectLeft granularity:WebSelectByCharacter];
+}
+
+- (void)moveLeftAndModifySelection:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectLeft granularity:WebSelectByCharacter];
+}
+
+- (void)moveRight:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectRight granularity:WebSelectByCharacter];
+}
+
+- (void)moveRightAndModifySelection:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectRight granularity:WebSelectByCharacter];
+}
+
+- (void)moveToBeginningOfDocument:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)moveToBeginningOfLine:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)moveToBeginningOfParagraph:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)moveToEndOfDocument:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)moveToEndOfLine:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)moveToEndOfParagraph:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)moveUp:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectUp granularity:WebSelectByCharacter];
+}
+
+- (void)moveUpAndModifySelection:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectUp granularity:WebSelectByCharacter];
+}
+
+- (void)moveWordBackward:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectBackward granularity:WebSelectByWord];
+}
+
+- (void)moveWordBackwardAndModifySelection:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectBackward granularity:WebSelectByWord];
+}
+
+- (void)moveWordForward:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectForward granularity:WebSelectByWord];
+}
+
+- (void)moveWordForwardAndModifySelection:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectForward granularity:WebSelectByWord];
+}
+
+- (void)moveWordLeft:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectLeft granularity:WebSelectByWord];
+}
+
+- (void)moveWordLeftAndModifySelection:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectLeft granularity:WebSelectByWord];
+}
+
+- (void)moveWordRight:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectRight granularity:WebSelectByWord];
+}
+
+- (void)moveWordRightAndModifySelection:(id)sender
+{
+ [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectRight granularity:WebSelectByWord];
+}
+
+- (void)pageDown:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)pageUp:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+
+ /* Selections */
+
+- (void)selectParagraph:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)selectLine:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)selectWord:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)copy:(id)sender
+{
+ if (![self _haveSelection]) {
+ NSBeep();
+ return;
+ }
+ [self _writeSelectionToPasteboard:[NSPasteboard generalPasteboard]];
+}
+
+- (void)cut:(id)sender
+{
+ if (![self _haveSelection]) {
+ NSBeep();
+ return;
+ }
+ [self copy:sender];
+ [[self _bridge] deleteSelection];
+}
+
+- (void)delete:(id)sender
+{
+ if (![self _haveSelection]) {
+ NSBeep();
+ return;
+ }
+ [[self _bridge] deleteSelection];
+}
+
+- (void)paste:(id)sender
+{
+ [self _replaceSelectionWithPasteboard:[NSPasteboard generalPasteboard] selectReplacement:NO allowPlainText:YES];
+}
+
+- (void)copyFont:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)pasteFont:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)pasteAsPlainText:(id)sender
+{
+ NSString *text = [[NSPasteboard generalPasteboard] stringForType:NSStringPboardType];
+ WebView *webView = [self _webView];
+ WebBridge *bridge = [self _bridge];
+ if ([[webView _editingDelegateForwarder] webView:webView shouldInsertText:text replacingDOMRange:[bridge selectedDOMRange] givenAction:WebViewInsertActionPasted]) {
+ [[self _bridge] replaceSelectionWithText:text selectReplacement:NO];
+ }
+}
+
+- (void)pasteAsRichText:(id)sender
+{
+ [self _replaceSelectionWithPasteboard:[NSPasteboard generalPasteboard] selectReplacement:NO allowPlainText:NO];
+}
+
+- (void)changeFont:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)changeAttributes:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)changeDocumentBackgroundColor:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)changeColor:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)alignCenter:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)alignJustified:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)alignLeft:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)alignRight:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)indent:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)insertTab:(id)sender
+{
+ WebView *webView = [self _webView];
+ WebBridge *bridge = [self _bridge];
+ if ([[webView _editingDelegateForwarder] webView:webView shouldInsertText:@"\t" replacingDOMRange:[bridge selectedDOMRange] givenAction:WebViewInsertActionPasted]) {
+ [[self _bridge] insertText:@"\t"];
+ }
+}
+
+- (void)insertBacktab:(id)sender
+{
+ // Doing nothing matches normal NSTextView behavior. If we ever use WebView for a field-editor-type purpose
+ // we might add code here.
+}
+
+- (void)insertNewline:(id)sender
+{
+ // Perhaps we should make this delegate call sensitive to the real DOM operation we actually do.
+ WebView *webView = [self _webView];
+ WebBridge *bridge = [self _bridge];
+ if ([[webView _editingDelegateForwarder] webView:webView shouldInsertText:@"\n" replacingDOMRange:[bridge selectedDOMRange] givenAction:WebViewInsertActionTyped]) {
+ [bridge replaceSelectionWithNewline];
+ [bridge ensureCaretVisible];
+ }
+}
+
+- (void)insertParagraphSeparator:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)changeCaseOfLetter:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)uppercaseWord:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)lowercaseWord:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)capitalizeWord:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)deleteForward:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)deleteBackward:(id)sender
+{
+ WebBridge *bridge = [self _bridge];
+ if ([bridge isSelectionEditable]) {
+ WebView *webView = [self _webView];
+ if ([[webView _editingDelegateForwarder] webView:webView shouldDeleteDOMRange:[bridge selectedDOMRange]]) {
+ [bridge deleteKeyPressed];
+ [bridge ensureCaretVisible];
+ }
+ }
+}
+
+- (void)deleteBackwardByDecomposingPreviousCharacter:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)deleteWordForward:(id)sender
+{
+ [self moveWordForwardAndModifySelection:sender];
+ [self delete:sender];
+}
+
+- (void)deleteWordBackward:(id)sender
+{
+ [self moveWordBackwardAndModifySelection:sender];
+ [self delete:sender];
+}
+
+- (void)deleteToBeginningOfLine:(id)sender
+{
+ [self moveToBeginningOfLine:sender];
+ [self delete:sender];
+}
+
+- (void)deleteToEndOfLine:(id)sender
+{
+ [self moveToEndOfLine:sender];
+ [self delete:sender];
+}
+
+- (void)deleteToBeginningOfParagraph:(id)sender
+{
+ [self moveToBeginningOfParagraph:sender];
+ [self delete:sender];
+}
+
+- (void)deleteToEndOfParagraph:(id)sender
+{
+ [self moveToEndOfParagraph:sender];
+ [self delete:sender];
+}
+
+- (void)complete:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)checkSpelling:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)showGuessPanel:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)performFindPanelAction:(id)sender
+{
+ ERROR("unimplemented");
+}
+
+- (void)startSpeaking:(id)sender
+{
+ NSString *string = [self selectedString];
+ if ([string length] == 0) {
+ // FIXME: This cast must go away, because otherwise we have XML bugs.
+ // We agreed to do this by just adding another bridge method analogous to
+ // selectedString rather than trying to straighten this out in the DOM API for now.
+ string = [(DOMHTMLElement *)[[[self _bridge] DOMDocument] documentElement] outerText];
+ }
+ [NSApp speakString:string];
+}
+
+- (void)stopSpeaking:(id)sender
+{
+ [NSApp stopSpeaking:sender];
+}
+
+- (void)insertText:(NSString *)text
+{
+ WebBridge *bridge = [self _bridge];
+ if ([bridge isSelectionEditable]) {
+ WebView *webView = [self _webView];
+ if ([[webView _editingDelegateForwarder] webView:webView shouldInsertText:text replacingDOMRange:[bridge selectedDOMRange] givenAction:WebViewInsertActionTyped]) {
+ [bridge insertText:text];
+ [bridge ensureCaretVisible];
+ }
+ }
+}
+
@end
@implementation WebHTMLView (TextSizing)
diff --git a/WebKit/WebView.subproj/WebHTMLViewPrivate.h b/WebKit/WebView.subproj/WebHTMLViewPrivate.h
index a1b2f5c..d23bb73 100644
--- a/WebKit/WebView.subproj/WebHTMLViewPrivate.h
+++ b/WebKit/WebView.subproj/WebHTMLViewPrivate.h
@@ -73,13 +73,11 @@
+ (NSArray *)_insertablePasteboardTypes;
+ (NSArray *)_selectionPasteboardTypes;
- (void)_writeSelectionToPasteboard:(NSPasteboard *)pasteboard;
-- (DOMDocumentFragment *)_documentFragmentFromPasteboard:(NSPasteboard *)pasteboard;
- (WebArchive *)_selectedArchive:(NSString **)markupString;
- (NSData *)_selectedRTFData;
- (BOOL)_canDelete;
- (BOOL)_canPaste;
- (BOOL)_haveSelection;
-- (void)_replaceSelectionWithPasteboard:(NSPasteboard *)pasteboard selectReplacement:(BOOL)selectReplacement;
- (void)_frameOrBoundsChanged;
@@ -95,10 +93,4 @@
- (void)_startAutoscrollTimer:(NSEvent *)event;
- (void)_stopAutoscrollTimer;
-- (void)copy:(id)sender;
-- (void)cut:(id)sender;
-- (void)delete:(id)sender;
-- (void)paste:(id)sender;
-- (void)delete:(id)sender;
-
@end
diff --git a/WebKit/WebView.subproj/WebView.h b/WebKit/WebView.subproj/WebView.h
index 535be3b..3682550 100644
--- a/WebKit/WebView.subproj/WebView.h
+++ b/WebKit/WebView.subproj/WebView.h
@@ -548,6 +548,7 @@ extern NSString * const WebViewDidChangeSelectionNotification;
@interface WebView (WebViewEditing)
- (void)setSelectedDOMRange:(DOMRange *)range affinity:(NSSelectionAffinity)selectionAffinity;
- (DOMRange *)selectedDOMRange;
+- (NSSelectionAffinity)selectionAffinity;
- (void)setEditable:(BOOL)flag;
- (BOOL)isEditable;
- (void)setTypingStyle:(DOMCSSStyleDeclaration *)style;
diff --git a/WebKit/WebView.subproj/WebView.m b/WebKit/WebView.subproj/WebView.m
index 84ca1e6..a09d296 100644
--- a/WebKit/WebView.subproj/WebView.m
+++ b/WebKit/WebView.subproj/WebView.m
@@ -115,13 +115,6 @@ NSString *_WebMainFrameURLKey = @"mainFrameURL";
@implementation WebProgressItem
@end
- at interface WebView (WebViewEditingInternal)
-- (void)_alterCurrentSelection:(WebSelectionAlteration)alteration direction:(WebSelectionDirection)direction granularity:(WebSelectionGranularity)granularity;
-- (WebBridge *)_bridgeForCurrentSelection;
-- (BOOL)_currentSelectionIsEditable;
- at end
-
-
@implementation WebViewPrivate
- init
@@ -1849,10 +1842,7 @@ static WebFrame *incrementFrame(WebFrame *curr, BOOL forward, BOOL wrapFlag)
- (BOOL)searchFor:(NSString *)string direction:(BOOL)forward caseSensitive:(BOOL)caseFlag wrap:(BOOL)wrapFlag
{
// Get the frame holding the selection, or start with the main frame
- WebFrame *startFrame = [self _currentFrame];
- if (!startFrame) {
- startFrame = [self mainFrame];
- }
+ WebFrame *startFrame = [self _frameForCurrentSelection];
// Search the first frame, then all the other frames, in order
NSView <WebDocumentSearching> *startSearchView = nil;
@@ -1925,7 +1915,7 @@ static WebFrame *incrementFrame(WebFrame *curr, BOOL forward, BOOL wrapFlag)
- (NSArray *)pasteboardTypesForSelection
{
- NSView <WebDocumentView> *documentView = [[[[self _bridgeForCurrentSelection] webFrame] frameView] documentView];
+ NSView <WebDocumentView> *documentView = [[[self _frameForCurrentSelection] frameView] documentView];
if ([documentView conformsToProtocol:@protocol(WebDocumentSelection)]) {
return [(NSView <WebDocumentSelection> *)documentView pasteboardTypesForSelection];
}
@@ -2244,32 +2234,6 @@ static WebFrame *incrementFrame(WebFrame *curr, BOOL forward, BOOL wrapFlag)
//==========================================================================================
// Editing
- at implementation WebView (WebViewEditingInternal)
-
-- (void)_alterCurrentSelection:(WebSelectionAlteration)alteration direction:(WebSelectionDirection)direction granularity:(WebSelectionGranularity)granularity
-{
- WebBridge *bridge = [self _bridgeForCurrentSelection];
- DOMRange *proposedRange = [bridge rangeByAlteringCurrentSelection:alteration direction:direction granularity:granularity];
- if ([[self _editingDelegateForwarder] webView:self shouldChangeSelectedDOMRange:[self selectedDOMRange] toDOMRange:proposedRange affinity:[bridge selectionAffinity] stillSelecting:NO]) {
- [bridge alterCurrentSelection:alteration direction:direction granularity:granularity];
- [bridge ensureCaretVisible];
- }
-}
-
-// Note: This method should only be used by callers that wish to do nothing if there is no selection or if
-// the selection is outside of the WebView hierarchy.
-- (WebBridge *)_bridgeForCurrentSelection
-{
- return [[self _currentFrame] _bridge];
-}
-
-- (BOOL)_currentSelectionIsEditable
-{
- return [[self _bridgeForCurrentSelection] isSelectionEditable];
-}
-
- at end
-
@implementation WebView (WebViewCSS)
- (DOMCSSStyleDeclaration *)computedStyleForElement:(DOMElement *)element pseudoElement:(NSString *)pseudoElement
@@ -2286,18 +2250,23 @@ static WebFrame *incrementFrame(WebFrame *curr, BOOL forward, BOOL wrapFlag)
@implementation WebView (WebInternal)
// Return the frame holding first responder
-- (WebFrame *)_currentFrame
+- (WebFrame *)_frameForCurrentSelection
{
// Find the frame holding the first responder, or holding the first form in the doc
NSResponder *resp = [[self window] firstResponder];
if (!resp || ![resp isKindOfClass:[NSView class]] || ![(NSView *)resp isDescendantOf:self]) {
- return nil; // first responder outside our view tree
+ return [self mainFrame]; // first responder outside our view tree
} else {
WebFrameView *frameView = (WebFrameView *)[(NSView *)resp _web_superviewOfClass:[WebFrameView class]];
return [frameView webFrame];
}
}
+- (WebBridge *)_bridgeForCurrentSelection
+{
+ return [[self _frameForCurrentSelection] _bridge];
+}
+
- (BOOL)_isLoading
{
WebFrame *mainFrame = [self mainFrame];
@@ -2305,6 +2274,7 @@ static WebFrame *incrementFrame(WebFrame *curr, BOOL forward, BOOL wrapFlag)
|| [[mainFrame provisionalDataSource] isLoading];
}
+// FIXME: Move to WebHTMLView.
static NSFont *_fontFromStyle(DOMCSSStyleDeclaration *style)
{
// FIXME: can't get at CSS_PROP_FONT_FAMILY and such from cssproperties.h in WebCore
@@ -2317,12 +2287,13 @@ static NSFont *_fontFromStyle(DOMCSSStyleDeclaration *style)
return nil;
}
+// FIXME: Move to WebHTMLView.
- (void)_updateFontPanel
{
// FIXME: NSTextView bails out if becoming or resigning first responder, for which it has ivar flags. Not
// sure if we need to do something similar.
- if (![self _currentSelectionIsEditable]) {
+ if (![[self _bridgeForCurrentSelection] isSelectionEditable]) {
return;
}
@@ -2602,17 +2573,13 @@ static NSFont *_fontFromStyle(DOMCSSStyleDeclaration *style)
@end
-
-/*!
- @implementation WebView (WebViewEditingActions)
-*/
@implementation WebView (WebViewEditingActions)
-- (void)_performResponderOperation:(SEL)selector sender:(id)sender
+- (void)_performResponderOperation:(SEL)selector with:(id)parameter
{
static BOOL reentered = NO;
if (reentered) {
- [[self nextResponder] tryToPerform:selector with:sender];
+ [[self nextResponder] tryToPerform:selector with:parameter];
return;
}
@@ -2636,741 +2603,398 @@ static NSFont *_fontFromStyle(DOMCSSStyleDeclaration *style)
}
}
reentered = YES;
- [responder tryToPerform:selector with:sender];
+ [responder tryToPerform:selector with:parameter];
reentered = NO;
}
- (void)centerSelectionInVisibleArea:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- // FIXME: Does this do the right thing when the selection is not a caret?
- [[self _bridgeForCurrentSelection] ensureCaretVisible];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(centerSelectionInVisibleArea:) with:sender];
+ [self _performResponderOperation:@selector(centerSelectionInVisibleArea:) with:sender];
}
- (void)moveBackward:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectBackward granularity:WebSelectByCharacter];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveBackward:) with:sender];
+ [self _performResponderOperation:@selector(moveBackward:) with:sender];
}
- (void)moveBackwardAndModifySelection:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectBackward granularity:WebSelectByCharacter];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveBackwardAndModifySelection:) with:sender];
+ [self _performResponderOperation:@selector(moveBackwardAndModifySelection:) with:sender];
}
- (void)moveDown:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectDown granularity:WebSelectByCharacter];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveDown:) with:sender];
+ [self _performResponderOperation:@selector(moveDown:) with:sender];
}
- (void)moveDownAndModifySelection:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectDown granularity:WebSelectByCharacter];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveDownAndModifySelection:) with:sender];
+ [self _performResponderOperation:@selector(moveDownAndModifySelection:) with:sender];
}
- (void)moveForward:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectForward granularity:WebSelectByCharacter];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveForward:) with:sender];
+ [self _performResponderOperation:@selector(moveForward:) with:sender];
}
- (void)moveForwardAndModifySelection:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectForward granularity:WebSelectByCharacter];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveForwardAndModifySelection:) with:sender];
+ [self _performResponderOperation:@selector(moveForwardAndModifySelection:) with:sender];
}
- (void)moveLeft:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectLeft granularity:WebSelectByCharacter];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveLeft:) with:sender];
+ [self _performResponderOperation:@selector(moveLeft:) with:sender];
}
- (void)moveLeftAndModifySelection:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectLeft granularity:WebSelectByCharacter];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveLeftAndModifySelection:) with:sender];
+ [self _performResponderOperation:@selector(moveLeftAndModifySelection:) with:sender];
}
- (void)moveRight:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectRight granularity:WebSelectByCharacter];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveRight:) with:sender];
+ [self _performResponderOperation:@selector(moveRight:) with:sender];
}
- (void)moveRightAndModifySelection:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectRight granularity:WebSelectByCharacter];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveRightAndModifySelection:) with:sender];
+ [self _performResponderOperation:@selector(moveRightAndModifySelection:) with:sender];
}
- (void)moveToBeginningOfDocument:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveToBeginningOfDocument:) with:sender];
+ [self _performResponderOperation:@selector(moveToBeginningOfDocument:) with:sender];
}
- (void)moveToBeginningOfLine:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveToBeginningOfLine:) with:sender];
+ [self _performResponderOperation:@selector(moveToBeginningOfLine:) with:sender];
}
- (void)moveToBeginningOfParagraph:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveToBeginningOfParagraph:) with:sender];
+ [self _performResponderOperation:@selector(moveToBeginningOfParagraph:) with:sender];
}
- (void)moveToEndOfDocument:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveToEndOfDocument:) with:sender];
+ [self _performResponderOperation:@selector(moveToEndOfDocument:) with:sender];
}
- (void)moveToEndOfLine:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveToEndOfLine:) with:sender];
+ [self _performResponderOperation:@selector(moveToEndOfLine:) with:sender];
}
- (void)moveToEndOfParagraph:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveToEndOfParagraph:) with:sender];
+ [self _performResponderOperation:@selector(moveToEndOfParagraph:) with:sender];
}
- (void)moveUp:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectUp granularity:WebSelectByCharacter];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveUp:) with:sender];
+ [self _performResponderOperation:@selector(moveUp:) with:sender];
}
- (void)moveUpAndModifySelection:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectUp granularity:WebSelectByCharacter];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveUpAndModifySelection:) with:sender];
+ [self _performResponderOperation:@selector(moveUpAndModifySelection:) with:sender];
}
- (void)moveWordBackward:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectBackward granularity:WebSelectByWord];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveWordBackward:) with:sender];
+ [self _performResponderOperation:@selector(moveWordBackward:) with:sender];
}
- (void)moveWordBackwardAndModifySelection:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectBackward granularity:WebSelectByWord];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveWordBackwardAndModifySelection:) with:sender];
+ [self _performResponderOperation:@selector(moveWordBackwardAndModifySelection:) with:sender];
}
- (void)moveWordForward:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectForward granularity:WebSelectByWord];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveWordForward:) with:sender];
+ [self _performResponderOperation:@selector(moveWordForward:) with:sender];
}
- (void)moveWordForwardAndModifySelection:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectForward granularity:WebSelectByWord];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveWordForwardAndModifySelection:) with:sender];
+ [self _performResponderOperation:@selector(moveWordForwardAndModifySelection:) with:sender];
}
- (void)moveWordLeft:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectLeft granularity:WebSelectByWord];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveWordLeft:) with:sender];
+ [self _performResponderOperation:@selector(moveWordLeft:) with:sender];
}
- (void)moveWordLeftAndModifySelection:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectLeft granularity:WebSelectByWord];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveWordLeftAndModifySelection:) with:sender];
+ [self _performResponderOperation:@selector(moveWordLeftAndModifySelection:) with:sender];
}
- (void)moveWordRight:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByMoving direction:WebSelectRight granularity:WebSelectByWord];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveWordRight:) with:sender];
+ [self _performResponderOperation:@selector(moveWordRight:) with:sender];
}
- (void)moveWordRightAndModifySelection:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self _alterCurrentSelection:WebSelectByExtending direction:WebSelectRight granularity:WebSelectByWord];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(moveWordRightAndModifySelection:) with:sender];
+ [self _performResponderOperation:@selector(moveWordRightAndModifySelection:) with:sender];
}
- (void)pageDown:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(pageDown:) with:sender];
+ [self _performResponderOperation:@selector(pageDown:) with:sender];
}
- (void)pageUp:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(pageUp:) with:sender];
+ [self _performResponderOperation:@selector(pageUp:) with:sender];
}
- (void)scrollLineDown:(id)sender
{
- [self _performResponderOperation:@selector(scrollLineDown:) sender:sender];
+ [self _performResponderOperation:@selector(scrollLineDown:) with:sender];
}
- (void)scrollLineUp:(id)sender
{
- [self _performResponderOperation:@selector(scrollLineUp:) sender:sender];
+ [self _performResponderOperation:@selector(scrollLineUp:) with:sender];
}
- (void)scrollPageDown:(id)sender
{
- [self _performResponderOperation:@selector(scrollPageDown:) sender:sender];
+ [self _performResponderOperation:@selector(scrollPageDown:) with:sender];
}
- (void)scrollPageUp:(id)sender
{
- [self _performResponderOperation:@selector(scrollPageUp:) sender:sender];
+ [self _performResponderOperation:@selector(scrollPageUp:) with:sender];
}
-
- /* Selections */
-
- (void)selectAll:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(selectAll:) with:sender];
+ [self _performResponderOperation:@selector(selectAll:) with:sender];
}
- (void)selectParagraph:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(selectParagraph:) with:sender];
+ [self _performResponderOperation:@selector(selectParagraph:) with:sender];
}
- (void)selectLine:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(selectLine:) with:sender];
+ [self _performResponderOperation:@selector(selectLine:) with:sender];
}
- (void)selectWord:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(selectWord:) with:sender];
+ [self _performResponderOperation:@selector(selectWord:) with:sender];
}
-
- /* "Edit menu" actions */
-
- (void)copy:(id)sender
{
- [self _performResponderOperation:@selector(copy:) sender:sender];
+ [self _performResponderOperation:@selector(copy:) with:sender];
}
- (void)cut:(id)sender
{
- [self _performResponderOperation:@selector(cut:) sender:sender];
+ [self _performResponderOperation:@selector(cut:) with:sender];
}
- (void)paste:(id)sender
{
- [self _performResponderOperation:@selector(paste:) sender:sender];
+ [self _performResponderOperation:@selector(paste:) with:sender];
}
- (void)copyFont:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(copyFont:) with:sender];
+ [self _performResponderOperation:@selector(copyFont:) with:sender];
}
- (void)pasteFont:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(pasteFont:) with:sender];
+ [self _performResponderOperation:@selector(pasteFont:) with:sender];
}
- (void)delete:(id)sender
{
- [self _performResponderOperation:@selector(delete:) sender:sender];
+ [self _performResponderOperation:@selector(delete:) with:sender];
}
- (void)pasteAsPlainText:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- id <WebDocumentView> view = [[[self mainFrame] frameView] documentView];
- if ([view isKindOfClass:[WebHTMLView class]]) {
- NSString *text = [[NSPasteboard generalPasteboard] stringForType:NSStringPboardType];
- if ([[self _editingDelegateForwarder] webView:self shouldInsertText:text replacingDOMRange:[self selectedDOMRange] givenAction:WebViewInsertActionPasted]) {
- [[self _bridgeForCurrentSelection] replaceSelectionWithText:text selectReplacement:NO];
- }
- }
- return;
- }
- [[self nextResponder] tryToPerform:@selector(pasteAsPlainText:) with:sender];
+ [self _performResponderOperation:@selector(pasteAsPlainText:) with:sender];
}
- (void)pasteAsRichText:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(pasteAsRichText:) with:sender];
+ [self _performResponderOperation:@selector(pasteAsRichText:) with:sender];
}
-
- /* Fonts */
-
- (void)changeFont:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(changeFont:) with:sender];
+ [self _performResponderOperation:@selector(changeFont:) with:sender];
}
- (void)changeAttributes:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(changeAttributes:) with:sender];
+ [self _performResponderOperation:@selector(changeAttributes:) with:sender];
}
- (void)changeDocumentBackgroundColor:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(changeDocumentBackgroundColor:) with:sender];
+ [self _performResponderOperation:@selector(changeDocumentBackgroundColor:) with:sender];
}
-
- /* Colors */
-
- (void)changeColor:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(changeColor:) with:sender];
+ [self _performResponderOperation:@selector(changeColor:) with:sender];
}
-
- /* Alignment */
-
- (void)alignCenter:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(alignCenter:) with:sender];
+ [self _performResponderOperation:@selector(alignCenter:) with:sender];
}
- (void)alignJustified:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(alignJustified:) with:sender];
+ [self _performResponderOperation:@selector(alignJustified:) with:sender];
}
- (void)alignLeft:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(alignLeft:) with:sender];
+ [self _performResponderOperation:@selector(alignLeft:) with:sender];
}
- (void)alignRight:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(alignRight:) with:sender];
+ [self _performResponderOperation:@selector(alignRight:) with:sender];
}
-
- /* Insertions and Indentations */
-
- (void)indent:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(indent:) with:sender];
+ [self _performResponderOperation:@selector(indent:) with:sender];
}
- (void)insertTab:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- id <WebDocumentView> view = [[[self mainFrame] frameView] documentView];
- if ([view isKindOfClass:[WebHTMLView class]]) {
- if ([[self _editingDelegateForwarder] webView:self shouldInsertText:@"\t" replacingDOMRange:[self selectedDOMRange] givenAction:WebViewInsertActionPasted]) {
- [[self _bridgeForCurrentSelection] replaceSelectionWithText:@"\t" selectReplacement:NO];
- }
- }
- return;
- }
- [[self nextResponder] tryToPerform:@selector(insertTab:) with:sender];
+ [self _performResponderOperation:@selector(insertTab:) with:sender];
}
- (void)insertBacktab:(id)sender
{
- // Doing nothing matches normal NSTextView behavior. If we ever use WebView for a field-editor-type purpose
- // we might add code here.
- [self _performResponderOperation:@selector(insertBacktab:) sender:sender];
+ [self _performResponderOperation:@selector(insertBacktab:) with:sender];
}
- (void)insertNewline:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- // Perhaps we should make this delegate call sensitive to the real DOM operation we actually do.
- if ([[self _editingDelegateForwarder] webView:self shouldInsertText:@"\n" replacingDOMRange:[self selectedDOMRange] givenAction:WebViewInsertActionTyped]) {
- WebBridge *bridge = [self _bridgeForCurrentSelection];
- [bridge replaceSelectionWithNewline];
- [bridge ensureCaretVisible];
- }
- return;
- }
- [[self nextResponder] tryToPerform:@selector(insertNewline:) with:sender];
+ [self _performResponderOperation:@selector(insertNewline:) with:sender];
}
- (void)insertParagraphSeparator:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(insertParagraphSeparator:) with:sender];
+ [self _performResponderOperation:@selector(insertParagraphSeparator:) with:sender];
}
-
- /* Case changes */
-
- (void)changeCaseOfLetter:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(changeCaseOfLetter:) with:sender];
+ [self _performResponderOperation:@selector(changeCaseOfLetter:) with:sender];
}
- (void)uppercaseWord:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(uppercaseWord:) with:sender];
+ [self _performResponderOperation:@selector(uppercaseWord:) with:sender];
}
- (void)lowercaseWord:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(lowercaseWord:) with:sender];
+ [self _performResponderOperation:@selector(lowercaseWord:) with:sender];
}
- (void)capitalizeWord:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(capitalizeWord:) with:sender];
+ [self _performResponderOperation:@selector(capitalizeWord:) with:sender];
}
-
- /* Deletions */
-
- (void)deleteForward:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(deleteForward:) with:sender];
+ [self _performResponderOperation:@selector(deleteForward:) with:sender];
}
- (void)deleteBackward:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- if ([[self _editingDelegateForwarder] webView:self shouldDeleteDOMRange:[self selectedDOMRange]]) {
- WebBridge *bridge = [self _bridgeForCurrentSelection];
- [bridge deleteKeyPressed];
- [bridge ensureCaretVisible];
- }
- return;
- }
- [[self nextResponder] tryToPerform:@selector(deleteBackward:) with:sender];
+ [self _performResponderOperation:@selector(deleteBackward:) with:sender];
}
- (void)deleteBackwardByDecomposingPreviousCharacter:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(deleteBackwardByDecomposingPreviousCharacter:) with:sender];
+ [self _performResponderOperation:@selector(deleteBackwardByDecomposingPreviousCharacter:) with:sender];
}
- (void)deleteWordForward:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self moveWordForwardAndModifySelection:sender];
- [self delete:sender];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(deleteWordForward:) with:sender];
+ [self _performResponderOperation:@selector(deleteWordForward:) with:sender];
}
- (void)deleteWordBackward:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- [self moveWordBackwardAndModifySelection:sender];
- [self delete:sender];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(deleteWordBackward:) with:sender];
+ [self _performResponderOperation:@selector(deleteWordBackward:) with:sender];
}
- (void)deleteToBeginningOfLine:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(deleteToBeginningOfLine:) with:sender];
+ [self _performResponderOperation:@selector(deleteToBeginningOfLine:) with:sender];
}
- (void)deleteToEndOfLine:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(deleteToEndOfLine:) with:sender];
+ [self _performResponderOperation:@selector(deleteToEndOfLine:) with:sender];
}
- (void)deleteToBeginningOfParagraph:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(deleteToBeginningOfParagraph:) with:sender];
+ [self _performResponderOperation:@selector(deleteToBeginningOfParagraph:) with:sender];
}
- (void)deleteToEndOfParagraph:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(deleteToEndOfParagraph:) with:sender];
+ [self _performResponderOperation:@selector(deleteToEndOfParagraph:) with:sender];
}
-
- /* Completion */
-
- (void)complete:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(complete:) with:sender];
+ [self _performResponderOperation:@selector(complete:) with:sender];
}
-
- /* Spelling */
-
- (void)checkSpelling:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(checkSpelling:) with:sender];
+ [self _performResponderOperation:@selector(checkSpelling:) with:sender];
}
- (void)showGuessPanel:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(showGuessPanel:) with:sender];
+ [self _performResponderOperation:@selector(showGuessPanel:) with:sender];
}
-
- /* Finding */
-
- (void)performFindPanelAction:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(performFindPanelAction:) with:sender];
+ [self _performResponderOperation:@selector(performFindPanelAction:) with:sender];
}
-
- /* Speech */
-
- (void)startSpeaking:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(startSpeaking:) with:sender];
+ [self _performResponderOperation:@selector(startSpeaking:) with:sender];
}
- (void)stopSpeaking:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- ERROR("unimplemented");
- return;
- }
- [[self nextResponder] tryToPerform:@selector(stopSpeaking:) with:sender];
+ [self _performResponderOperation:@selector(stopSpeaking:) with:sender];
}
- /* Text input */
-
- (void)insertText:(NSString *)text
{
- if ([self _currentSelectionIsEditable]) {
- if ([[self _editingDelegateForwarder] webView:self shouldInsertText:text replacingDOMRange:[self selectedDOMRange] givenAction:WebViewInsertActionTyped]) {
- WebBridge *bridge = [self _bridgeForCurrentSelection];
- [bridge insertText:text];
- [bridge ensureCaretVisible];
- }
- return;
- }
- [[self nextResponder] tryToPerform:@selector(insertText:) with:text];
+ [self _performResponderOperation:@selector(insertText:) with:text];
}
@end
diff --git a/WebKit/WebView.subproj/WebViewInternal.h b/WebKit/WebView.subproj/WebViewInternal.h
index 40a18c3..b117f5f 100644
--- a/WebKit/WebView.subproj/WebViewInternal.h
+++ b/WebKit/WebView.subproj/WebViewInternal.h
@@ -3,7 +3,8 @@
#import <WebKit/WebViewPrivate.h>
@interface WebView (WebInternal)
-- (WebFrame *)_currentFrame;
+- (WebFrame *)_frameForCurrentSelection;
+- (WebBridge *)_bridgeForCurrentSelection;
- (BOOL)_isLoading;
- (void)_updateFontPanel;
@end;
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list