[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:37 UTC 2009
The following commit has been merged in the debian/unstable branch:
commit e47bb12fd17a6983f255edfb34121656ee756518
Author: darin <darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Tue May 25 00:25:03 2004 +0000
Reviewed by Ken.
- fixed <rdar://problem/3666022>: (REGRESSION: crash from infinite regress in -[WebFrameView(WebPrivate) scrollPageDown:])
* WebView.subproj/WebView.m:
(-[WebView _performResponderOperation:sender:]): Helper method that knows how to pass on operations
to the responder chain, allowing us to implement operations that will get passed to views inside
us as necessary. Moved a few methods to this, and soon will move even more.
(-[WebView scrollLineDown:]): Use the above method.
(-[WebView scrollLineUp:]): Ditto.
(-[WebView scrollPageDown:]): Ditto.
(-[WebView scrollPageUp:]): Ditto.
(-[WebView copy:]): Ditto.
(-[WebView cut:]): Ditto.
(-[WebView paste:]): Ditto.
(-[WebView delete:]): Ditto.
(-[WebView insertBacktab:]): Ditto.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@6680 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index 41c8f97..ee99ccf 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,23 @@
+2004-05-24 Darin Adler <darin at apple.com>
+
+ Reviewed by Ken.
+
+ - fixed <rdar://problem/3666022>: (REGRESSION: crash from infinite regress in -[WebFrameView(WebPrivate) scrollPageDown:])
+
+ * WebView.subproj/WebView.m:
+ (-[WebView _performResponderOperation:sender:]): Helper method that knows how to pass on operations
+ to the responder chain, allowing us to implement operations that will get passed to views inside
+ us as necessary. Moved a few methods to this, and soon will move even more.
+ (-[WebView scrollLineDown:]): Use the above method.
+ (-[WebView scrollLineUp:]): Ditto.
+ (-[WebView scrollPageDown:]): Ditto.
+ (-[WebView scrollPageUp:]): Ditto.
+ (-[WebView copy:]): Ditto.
+ (-[WebView cut:]): Ditto.
+ (-[WebView paste:]): Ditto.
+ (-[WebView delete:]): Ditto.
+ (-[WebView insertBacktab:]): Ditto.
+
2004-05-24 Chris Blumenberg <cblu at apple.com>
Improved editing via drag
diff --git a/WebKit/WebView.subproj/WebView.m b/WebKit/WebView.subproj/WebView.m
index 7e7b740..ddd04b7 100644
--- a/WebKit/WebView.subproj/WebView.m
+++ b/WebKit/WebView.subproj/WebView.m
@@ -2595,6 +2595,38 @@ static NSFont *_fontFromStyle(DOMCSSStyleDeclaration *style)
*/
@implementation WebView (WebViewEditingActions)
+- (void)_performResponderOperation:(SEL)selector sender:(id)sender
+{
+ static BOOL reentered = NO;
+ if (reentered) {
+ [[self nextResponder] tryToPerform:selector with:sender];
+ return;
+ }
+
+ // There are two possibilities here.
+ //
+ // One is that WebView has been called in its role as part of the responder chain.
+ // In that case, it's fine to call the first responder and end up calling down the
+ // responder chain again. Later we will return here with reentered = YES and continue
+ // past the WebView.
+ //
+ // The other is that we are being called directly, in which case we want to pass the
+ // selector down to the view inside us that can handle it, and continue down the
+ // responder chain as usual.
+
+ // Pass this selector down to the first responder.
+ NSResponder *responder = [[self window] firstResponder];
+ if (!responder || ![responder isKindOfClass:[NSView class]] || ![(NSView *)responder isDescendantOf:self]) {
+ responder = [[[self mainFrame] frameView] documentView];
+ if (!responder) {
+ responder = [[self mainFrame] frameView];
+ }
+ }
+ reentered = YES;
+ [responder tryToPerform:selector with:sender];
+ reentered = NO;
+}
+
- (void)centerSelectionInVisibleArea:(id)sender
{
if ([self _currentSelectionIsEditable]) {
@@ -2859,42 +2891,22 @@ static NSFont *_fontFromStyle(DOMCSSStyleDeclaration *style)
- (void)scrollLineDown:(id)sender
{
- WebFrameView *frameView = [[self mainFrame] frameView];
- if (frameView) {
- [frameView scrollLineDown:sender];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(scrollLineDown:) with:sender];
+ [self _performResponderOperation:@selector(scrollLineDown:) sender:sender];
}
- (void)scrollLineUp:(id)sender
{
- WebFrameView *frameView = [[self mainFrame] frameView];
- if (frameView) {
- [frameView scrollLineUp:sender];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(scrollLineUp:) with:sender];
+ [self _performResponderOperation:@selector(scrollLineUp:) sender:sender];
}
- (void)scrollPageDown:(id)sender
{
- WebFrameView *frameView = [[self mainFrame] frameView];
- if (frameView) {
- [frameView scrollPageDown:sender];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(scrollPageDown:) with:sender];
+ [self _performResponderOperation:@selector(scrollPageDown:) sender:sender];
}
- (void)scrollPageUp:(id)sender
{
- WebFrameView *frameView = [[self mainFrame] frameView];
- if (frameView) {
- [frameView scrollPageUp:sender];
- return;
- }
- [[self nextResponder] tryToPerform:@selector(scrollPageUp:) with:sender];
+ [self _performResponderOperation:@selector(scrollPageUp:) sender:sender];
}
@@ -2941,38 +2953,17 @@ static NSFont *_fontFromStyle(DOMCSSStyleDeclaration *style)
- (void)copy:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- id <WebDocumentView> view = [[[self mainFrame] frameView] documentView];
- if ([view isKindOfClass:[WebHTMLView class]]) {
- [(WebHTMLView *)view copy:nil];
- }
- return;
- }
- [[self nextResponder] tryToPerform:@selector(copy:) with:sender];
+ [self _performResponderOperation:@selector(copy:) sender:sender];
}
- (void)cut:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- id <WebDocumentView> view = [[[self mainFrame] frameView] documentView];
- if ([view isKindOfClass:[WebHTMLView class]]) {
- [(WebHTMLView *)view cut:nil];
- }
- return;
- }
- [[self nextResponder] tryToPerform:@selector(cut:) with:sender];
+ [self _performResponderOperation:@selector(cut:) sender:sender];
}
- (void)paste:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- id <WebDocumentView> view = [[[self mainFrame] frameView] documentView];
- if ([view isKindOfClass:[WebHTMLView class]]) {
- [(WebHTMLView *)view paste:nil];
- }
- return;
- }
- [[self nextResponder] tryToPerform:@selector(paste:) with:sender];
+ [self _performResponderOperation:@selector(paste:) sender:sender];
}
- (void)copyFont:(id)sender
@@ -2995,14 +2986,7 @@ static NSFont *_fontFromStyle(DOMCSSStyleDeclaration *style)
- (void)delete:(id)sender
{
- if ([self _currentSelectionIsEditable]) {
- id <WebDocumentView> view = [[[self mainFrame] frameView] documentView];
- if ([view isKindOfClass:[WebHTMLView class]]) {
- [(WebHTMLView *)view delete:nil];
- }
- return;
- }
- [[self nextResponder] tryToPerform:@selector(delete:) with:sender];
+ [self _performResponderOperation:@selector(delete:) sender:sender];
}
- (void)pasteAsPlainText:(id)sender
@@ -3140,7 +3124,7 @@ static NSFont *_fontFromStyle(DOMCSSStyleDeclaration *style)
{
// Doing nothing matches normal NSTextView behavior. If we ever use WebView for a field-editor-type purpose
// we might add code here.
- [[self nextResponder] tryToPerform:@selector(insertBacktab:) with:sender];
+ [self _performResponderOperation:@selector(insertBacktab:) sender:sender];
}
- (void)insertNewline:(id)sender
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list