Reviewed by Adele Amchan.
authorsullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 20 Jul 2005 18:30:15 +0000 (18:30 +0000)
committersullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 20 Jul 2005 18:30:15 +0000 (18:30 +0000)
        - added -[WebView selectedFrame] to SPI (pending public API), needed for 4180958

        * WebView.subproj/WebView.m:
        (-[WebView selectedFrame]):
        new method, extracted from _selectedOrMainFrame
        (-[WebView _selectedOrMainFrame]):
        now calls extracted method

        * WebView.subproj/WebViewPrivate.h:
        add -selectedFrame to PendingPublic category

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@9847 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/ChangeLog
WebKit/WebView.subproj/WebView.m
WebKit/WebView.subproj/WebViewPrivate.h

index b9b6fef..c83365b 100644 (file)
@@ -1,3 +1,18 @@
+2005-07-20  John Sullivan  <sullivan@apple.com>
+
+        Reviewed by Adele Amchan.
+        
+        - added -[WebView selectedFrame] to SPI (pending public API), needed for 4180958
+
+        * WebView.subproj/WebView.m:
+        (-[WebView selectedFrame]):
+        new method, extracted from _selectedOrMainFrame
+        (-[WebView _selectedOrMainFrame]):
+        now calls extracted method
+        
+        * WebView.subproj/WebViewPrivate.h:
+        add -selectedFrame to PendingPublic category
+
 2005-07-19  John Sullivan  <sullivan@apple.com>
 
         Reviewed by Darin Adler.
index 642b017..a1692df 100644 (file)
@@ -191,6 +191,10 @@ macro(yankAndSelect) \
 @end
 
 @interface WebView (WebFileInternal)
+#ifndef NDEBUG
+- (void)_debugCheckForMultipleSelectedFrames;
+#endif
+- (WebFrame *)_findSelectedFrame;
 - (WebFrame *)_selectedOrMainFrame;
 - (WebBridge *)_bridgeForSelectedOrMainFrame;
 - (BOOL)_isLoading;
@@ -2537,6 +2541,37 @@ static WebFrame *incrementFrame(WebFrame *curr, BOOL forward, BOOL wrapFlag)
     return [self isEditable];
 }
 
+- (WebFrame *)selectedFrame
+{
+    // If the first responder is a view in our tree, we get the frame containing the first responder.
+    // This is faster than searching the frame hierarchy, and will give us a result even in the case
+    // where the focused frame doesn't actually contain a selection.
+    NSResponder *resp = [[self window] firstResponder];
+    if (resp && [resp isKindOfClass:[NSView class]] && [(NSView *)resp isDescendantOf:self]) {
+        WebFrameView *frameView = (WebFrameView *)[(NSView *)resp _web_superviewOfClass:[WebFrameView class]];
+        ASSERT(frameView != nil);
+#ifndef NDEBUG
+        WebFrame *frameWithSelection = [self _findSelectedFrame];
+        ASSERT(frameWithSelection == nil || frameWithSelection == [frameView webFrame]);
+        [self _debugCheckForMultipleSelectedFrames];
+#endif
+        return [frameView webFrame];
+    }
+    
+    // If the first responder is outside of our view tree, we search for a frame containing a selection.
+    // There should be at most only one of these.
+    WebFrame *frameWithSelection = [self _findSelectedFrame];
+    if (frameWithSelection != nil) {
+#ifndef NDEBUG
+        [self _debugCheckForMultipleSelectedFrames];
+#endif
+        return frameWithSelection;
+    }
+    
+    return nil;
+}
+
+
 @end
 
 @implementation WebView (WebViewPrintingPrivate)
@@ -3012,33 +3047,11 @@ FOR_EACH_RESPONDER_SELECTOR(FORWARD)
 
 - (WebFrame *)_selectedOrMainFrame
 {
-    // If the first responder is a view in our tree, we get the frame containing the first responder.
-    // This is faster than searching the frame hierarchy, and will give us a result even in the case
-    // where the focused frame doesn't actually contain a selection.
-    NSResponder *resp = [[self window] firstResponder];
-    if (resp && [resp isKindOfClass:[NSView class]] && [(NSView *)resp isDescendantOf:self]) {
-        WebFrameView *frameView = (WebFrameView *)[(NSView *)resp _web_superviewOfClass:[WebFrameView class]];
-        ASSERT(frameView != nil);
-#ifndef NDEBUG
-        WebFrame *frameWithSelection = [self _findSelectedFrame];
-        ASSERT(frameWithSelection == nil || frameWithSelection == [frameView webFrame]);
-        [self _debugCheckForMultipleSelectedFrames];
-#endif
-        return [frameView webFrame];
-    }
-    
-    // If the first responder is outside of our view tree, we search for a frame containing a selection.
-    // There should be at most only one of these.
-    WebFrame *frameWithSelection = [self _findSelectedFrame];
-    if (frameWithSelection != nil) {
-#ifndef NDEBUG
-        [self _debugCheckForMultipleSelectedFrames];
-#endif
-        return frameWithSelection;
+    WebFrame *result = [self selectedFrame];
+    if (result == nil) {
+        result = [self mainFrame];
     }
-    
-    // The first responder is outside of our view tree, and no frame in our view tree has a selection.
-    return [self mainFrame];
+    return result;
 }
 
 - (WebBridge *)_bridgeForSelectedOrMainFrame
index a9e6271..9992703 100644 (file)
@@ -85,6 +85,11 @@ typedef enum {
 // override to enforce additional criteria.
 - (BOOL)maintainsInactiveSelection;
 
+// Returns the frame that contains the first responder, if any. Otherwise returns the
+// frame that contains a non-zero-length selection, if any. Returns nil if no frame
+// meets these criteria.
+- (WebFrame *)selectedFrame;
+
 @end
 
 @interface WebView (WebPrivate)