Title: [177192] trunk/Source/WebKit2
- Revision
- 177192
- Author
- [email protected]
- Date
- 2014-12-11 16:25:16 -0800 (Thu, 11 Dec 2014)
Log Message
WK2: Need new SPI for Webkit clients to override default immediate action
https://bugs.webkit.org/show_bug.cgi?id=139564
-and corresponding-
rdar://problem/19225448
Reviewed by Tim Horton.
New SPI _immediateActionAnimationControllerForHitTestResult:withType:userData:
* UIProcess/API/Cocoa/WKViewPrivate.h:
* UIProcess/API/mac/WKView.mm:
(-[WKView _immediateActionAnimationControllerForHitTestResult:withType:userData:]):
Keep at ivar for the userData so that it can be passed to the new SPI.
* UIProcess/mac/WKImmediateActionController.h:
* UIProcess/mac/WKImmediateActionController.mm:
(-[WKImmediateActionController _clearImmediateActionState]):
(-[WKImmediateActionController didPerformActionMenuHitTest:userData:]):
Always give the SPI a chance to override the animationController.
(-[WKImmediateActionController _updateImmediateActionItem]):
Need to mark WKImmediateActionTypes.h as Private.
* WebKit2.xcodeproj/project.pbxproj:
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (177191 => 177192)
--- trunk/Source/WebKit2/ChangeLog 2014-12-12 00:22:41 UTC (rev 177191)
+++ trunk/Source/WebKit2/ChangeLog 2014-12-12 00:25:16 UTC (rev 177192)
@@ -1,3 +1,29 @@
+2014-12-11 Beth Dakin <[email protected]>
+
+ WK2: Need new SPI for Webkit clients to override default immediate action
+ https://bugs.webkit.org/show_bug.cgi?id=139564
+ -and corresponding-
+ rdar://problem/19225448
+
+ Reviewed by Tim Horton.
+
+ New SPI _immediateActionAnimationControllerForHitTestResult:withType:userData:
+ * UIProcess/API/Cocoa/WKViewPrivate.h:
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView _immediateActionAnimationControllerForHitTestResult:withType:userData:]):
+
+ Keep at ivar for the userData so that it can be passed to the new SPI.
+ * UIProcess/mac/WKImmediateActionController.h:
+ * UIProcess/mac/WKImmediateActionController.mm:
+ (-[WKImmediateActionController _clearImmediateActionState]):
+ (-[WKImmediateActionController didPerformActionMenuHitTest:userData:]):
+
+ Always give the SPI a chance to override the animationController.
+ (-[WKImmediateActionController _updateImmediateActionItem]):
+
+ Need to mark WKImmediateActionTypes.h as Private.
+ * WebKit2.xcodeproj/project.pbxproj:
+
2014-12-11 Timothy Horton <[email protected]>
Move the preview popover to WebImmediateActionController
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h (177191 => 177192)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h 2014-12-12 00:22:41 UTC (rev 177191)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h 2014-12-12 00:25:16 UTC (rev 177192)
@@ -25,6 +25,7 @@
#import <WebKit/WKActionMenuTypes.h>
#import <WebKit/WKBase.h>
+#import <WebKit/WKImmediateActionTypes.h>
#import <WebKit/WKView.h>
@interface WKView (Private)
@@ -124,6 +125,10 @@
- (NSArray *)_actionMenuItemsForHitTestResult:(WKHitTestResultRef)hitTestResult withType:(_WKActionMenuType)type defaultActionMenuItems:(NSArray *)defaultMenuItems;
- (NSArray *)_actionMenuItemsForHitTestResult:(WKHitTestResultRef)hitTestResult withType:(_WKActionMenuType)type defaultActionMenuItems:(NSArray *)defaultMenuItems userData:(WKTypeRef)userData;
+// Clients that want to maintain default behavior can return nil. To disable the immediate action entirely, return NSNull. And to
+// do something custom, return an object that conforms to the NSImmediateActionAnimationController protocol.
+- (id)_immediateActionAnimationControllerForHitTestResult:(WKHitTestResultRef)hitTestResult withType:(_WKImmediateActionType)type userData:(WKTypeRef)userData;
+
- (NSView *)_viewForPreviewingURL:(NSURL *)url initialFrameSize:(NSSize)initialFrameSize;
- (NSString *)_titleForPreviewOfURL:(NSURL *)url;
- (void)_setPreviewTitle:(NSString *)previewTitle;
Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (177191 => 177192)
--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm 2014-12-12 00:22:41 UTC (rev 177191)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm 2014-12-12 00:25:16 UTC (rev 177192)
@@ -4310,6 +4310,11 @@
return [self _actionMenuItemsForHitTestResult:hitTestResult withType:type defaultActionMenuItems:defaultMenuItems];
}
+- (id)_immediateActionAnimationControllerForHitTestResult:(WKHitTestResultRef)hitTestResult withType:(_WKImmediateActionType)type userData:(WKTypeRef)userData
+{
+ return nil;
+}
+
- (void)_dismissActionMenuPopovers
{
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
Modified: trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.h (177191 => 177192)
--- trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.h 2014-12-12 00:22:41 UTC (rev 177191)
+++ trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.h 2014-12-12 00:25:16 UTC (rev 177192)
@@ -54,6 +54,7 @@
WebKit::ImmediateActionState _state;
WebKit::ActionMenuHitTestResult _hitTestResult;
+ RefPtr<API::Object> _userData;
_WKImmediateActionType _type;
NSImmediateActionGestureRecognizer *_immediateActionRecognizer;
Modified: trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm (177191 => 177192)
--- trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm 2014-12-12 00:22:41 UTC (rev 177191)
+++ trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm 2014-12-12 00:25:16 UTC (rev 177192)
@@ -85,6 +85,7 @@
_state = ImmediateActionState::None;
_hitTestResult = ActionMenuHitTestResult();
_type = kWKImmediateActionNone;
+ _userData = nil;
}
- (void)didPerformActionMenuHitTest:(const ActionMenuHitTestResult&)hitTestResult userData:(API::Object*)userData
@@ -92,6 +93,7 @@
// FIXME: This needs to use the WebKit2 callback mechanism to avoid out-of-order replies.
_state = ImmediateActionState::Ready;
_hitTestResult = hitTestResult;
+ _userData = userData;
[self _updateImmediateActionItem];
}
@@ -166,6 +168,7 @@
_type = kWKImmediateActionNone;
_immediateActionRecognizer.animationController = nil;
+ id <NSImmediateActionAnimationController> defaultAnimationController = nil;
if (!hitTestResult)
return;
@@ -183,16 +186,22 @@
[qlPreviewLinkItem setPreviewStyle:QLPreviewStylePopover];
[qlPreviewLinkItem setDelegate:self];
}
- _immediateActionRecognizer.animationController = (id<NSImmediateActionAnimationController>)qlPreviewLinkItem.get();
+ defaultAnimationController = (id<NSImmediateActionAnimationController>)qlPreviewLinkItem.get();
} else {
#if WK_API_ENABLED
[self _createPreviewPopoverIfNeededForURL:absoluteLinkURL];
- _immediateActionRecognizer.animationController = (id<NSImmediateActionAnimationController>)_previewPopover.get();
+ defaultAnimationController = (id<NSImmediateActionAnimationController>)_previewPopover.get();
#endif // WK_API_ENABLED
}
+ }
+ id customClientAnimationController = [_wkView _immediateActionAnimationControllerForHitTestResult:toAPI(hitTestResult.get()) withType:_type userData:toAPI(_userData.get())];
+ if (customClientAnimationController == [NSNull null])
return;
- }
+ if (customClientAnimationController && [customClientAnimationController conformsToProtocol:@protocol(NSImmediateActionAnimationController)])
+ _immediateActionRecognizer.animationController = (id <NSImmediateActionAnimationController>)customClientAnimationController;
+ else
+ _immediateActionRecognizer.animationController = defaultAnimationController;
}
#pragma mark Link Preview action
Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (177191 => 177192)
--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2014-12-12 00:22:41 UTC (rev 177191)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2014-12-12 00:25:16 UTC (rev 177192)
@@ -1096,7 +1096,7 @@
909854EE12BC4E18000AD080 /* WebMemorySampler.mac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 905620E512BC2476000799B6 /* WebMemorySampler.mac.mm */; };
9321D5861A38EE3C008052BE /* WKImmediateActionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9321D5851A38EE3C008052BE /* WKImmediateActionController.h */; };
9321D5881A38EE74008052BE /* WKImmediateActionController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9321D5871A38EE74008052BE /* WKImmediateActionController.mm */; };
- 9321D58A1A38F196008052BE /* WKImmediateActionTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 9321D5891A38F196008052BE /* WKImmediateActionTypes.h */; };
+ 9321D58A1A38F196008052BE /* WKImmediateActionTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 9321D5891A38F196008052BE /* WKImmediateActionTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
934B724419F5B9BE00AE96D6 /* WKActionMenuItemTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 934B724319F5B9BE00AE96D6 /* WKActionMenuItemTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
935EEB9B1277617C003322B8 /* WKBundleBackForwardListItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 935EEB981277616D003322B8 /* WKBundleBackForwardListItem.h */; settings = {ATTRIBUTES = (Private, ); }; };
935EEB9E127761AC003322B8 /* WKBundleBackForwardList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 935EEB951277616D003322B8 /* WKBundleBackForwardList.cpp */; };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes