Title: [182554] trunk/Source/WebKit2
Revision
182554
Author
[email protected]
Date
2015-04-08 11:06:58 -0700 (Wed, 08 Apr 2015)

Log Message

Calling makeFirstResponder on WKWebView doesn't work.
https://bugs.webkit.org/show_bug.cgi?id=143482
rdar://problem/20298166

Reviewed by Dan Bernstein.

Adding forwarding of the responder status to the WKView.
We also need to avoid doing any cleanup in resignFirstResponder
if we know we are about to regain responder status again.
Same goes for becomeFirstResponder.

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView becomeFirstResponder]):
(-[WKWebView acceptsFirstResponder]):
* UIProcess/API/mac/WKView.mm:
(-[WKView becomeFristResponder]):
(-[WKView resignFirstResponder]):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (182553 => 182554)


--- trunk/Source/WebKit2/ChangeLog	2015-04-08 17:53:24 UTC (rev 182553)
+++ trunk/Source/WebKit2/ChangeLog	2015-04-08 18:06:58 UTC (rev 182554)
@@ -1,3 +1,23 @@
+2015-04-08  Enrica Casucci  <[email protected]>
+
+        Calling makeFirstResponder on WKWebView doesn't work.
+        https://bugs.webkit.org/show_bug.cgi?id=143482
+        rdar://problem/20298166
+
+        Reviewed by Dan Bernstein.
+
+        Adding forwarding of the responder status to the WKView.
+        We also need to avoid doing any cleanup in resignFirstResponder
+        if we know we are about to regain responder status again.
+        Same goes for becomeFirstResponder.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView becomeFirstResponder]):
+        (-[WKWebView acceptsFirstResponder]):
+        * UIProcess/API/mac/WKView.mm:
+        (-[WKView becomeFristResponder]):
+        (-[WKView resignFirstResponder]):
+
 2015-04-07  Tim Horton  <[email protected]>
 
         Fix the build.

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (182553 => 182554)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2015-04-08 17:53:24 UTC (rev 182553)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2015-04-08 18:06:58 UTC (rev 182554)
@@ -1622,6 +1622,16 @@
 
 #if PLATFORM(MAC)
 
+- (BOOL)becomeFirstResponder
+{
+    return [[self window] makeFirstResponder: _wkView.get()];
+}
+
+- (BOOL)acceptsFirstResponder
+{
+    return [_wkView acceptsFirstResponder];
+}
+
 - (void)resizeSubviewsWithOldSize:(NSSize)oldSize
 {
     [_wkView setFrame:self.bounds];

Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (182553 => 182554)


--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2015-04-08 17:53:24 UTC (rev 182553)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2015-04-08 18:06:58 UTC (rev 182554)
@@ -65,6 +65,7 @@
 #import "WKTextInputWindowController.h"
 #import "WKViewInternal.h"
 #import "WKViewPrivate.h"
+#import "WKWebView.h"
 #import "WebBackForwardList.h"
 #import "WebEventFactory.h"
 #import "WebHitTestResult.h"
@@ -128,6 +129,7 @@
 @interface NSWindow (WKNSWindowDetails)
 - (NSRect)_intersectBottomCornersWithRect:(NSRect)viewRect;
 - (void)_maskRoundedBottomCorners:(NSRect)clipRect;
+- (id)_newFirstResponderAfterResigning;
 @end
 
 #if USE(ASYNC_NSTEXTINPUTCLIENT)
@@ -219,6 +221,7 @@
 
     bool _inBecomeFirstResponder;
     bool _inResignFirstResponder;
+    BOOL _willBecomeFirstResponderAgain;
     NSEvent *_mouseDownEvent;
     BOOL _ignoringMouseDraggedEvents;
 
@@ -441,6 +444,13 @@
 
 - (BOOL)becomeFirstResponder
 {
+    // If we just became first responder again, there is no need to do anything,
+    // since resignFirstResponder has correctly detected this situation.
+    if (_data->_willBecomeFirstResponderAgain) {
+        _data->_willBecomeFirstResponderAgain = NO;
+        return YES;
+    }
+
     NSSelectionDirection direction = [[self window] keyViewSelectionDirection];
 
     _data->_inBecomeFirstResponder = true;
@@ -464,6 +474,15 @@
 
 - (BOOL)resignFirstResponder
 {
+    // Predict the case where we are losing first responder status only to
+    // gain it back again. We want resignFirstResponder to do nothing in that case.
+    id nextResponder = [[self window] _newFirstResponderAfterResigning];
+    if ([nextResponder isKindOfClass:[WKWebView class]] && self.superview == nextResponder) {
+        _data->_willBecomeFirstResponderAgain = YES;
+        return YES;
+    }
+
+    _data->_willBecomeFirstResponderAgain = NO;
     _data->_inResignFirstResponder = true;
 
 #if USE(ASYNC_NSTEXTINPUTCLIENT)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to