Title: [175589] trunk/Source/WebKit2
- Revision
- 175589
- Author
- commit-qu...@webkit.org
- Date
- 2014-11-04 16:35:29 -0800 (Tue, 04 Nov 2014)
Log Message
Use a web view for Quick Look in action menus
https://bugs.webkit.org/show_bug.cgi?id=138370
Patch by Conrad Shultz <conrad_shu...@apple.com> on 2014-11-04
Reviewed by Anders Carlsson.
Instead of using the QLPreviewBubble SPI, show a popover containing a web view. This currently
does not inherit any configuration from the presenting WKView and does not expose any
customization options.
* UIProcess/mac/WKActionMenuController.mm:
Declare new internal NSViewController subclass, WKPagePreviewViewController.
(-[WKPagePreviewViewController initWithPageURL:]):
Store the passed-in URL and set a somewhat arbitrary (iPhone 5 screen size) default preferred size.
(-[WKPagePreviewViewController loadView]):
Create a WKWebView and load the URL passed into the initializer.
(-[WKActionMenuController _previewURLFromActionMenu:]):
Renamed from -_quickLookURLFromActionMenu:; present the popover returned by -_createPreviewPopoverForURL:.
(-[WKActionMenuController _createPreviewPopoverForURL:]):
New helper method; return a popover that owns a _WKPagePreviewViewController configured to show a scaled-down web page.
(-[WKActionMenuController _createActionMenuItemForTag:]):
Update to reflect method rename.
(-[WKActionMenuController _quickLookURLFromActionMenu:]): Deleted.
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (175588 => 175589)
--- trunk/Source/WebKit2/ChangeLog 2014-11-05 00:31:37 UTC (rev 175588)
+++ trunk/Source/WebKit2/ChangeLog 2014-11-05 00:35:29 UTC (rev 175589)
@@ -1,3 +1,28 @@
+2014-11-04 Conrad Shultz <conrad_shu...@apple.com>
+
+ Use a web view for Quick Look in action menus
+ https://bugs.webkit.org/show_bug.cgi?id=138370
+
+ Reviewed by Anders Carlsson.
+
+ Instead of using the QLPreviewBubble SPI, show a popover containing a web view. This currently
+ does not inherit any configuration from the presenting WKView and does not expose any
+ customization options.
+
+ * UIProcess/mac/WKActionMenuController.mm:
+ Declare new internal NSViewController subclass, WKPagePreviewViewController.
+ (-[WKPagePreviewViewController initWithPageURL:]):
+ Store the passed-in URL and set a somewhat arbitrary (iPhone 5 screen size) default preferred size.
+ (-[WKPagePreviewViewController loadView]):
+ Create a WKWebView and load the URL passed into the initializer.
+ (-[WKActionMenuController _previewURLFromActionMenu:]):
+ Renamed from -_quickLookURLFromActionMenu:; present the popover returned by -_createPreviewPopoverForURL:.
+ (-[WKActionMenuController _createPreviewPopoverForURL:]):
+ New helper method; return a popover that owns a _WKPagePreviewViewController configured to show a scaled-down web page.
+ (-[WKActionMenuController _createActionMenuItemForTag:]):
+ Update to reflect method rename.
+ (-[WKActionMenuController _quickLookURLFromActionMenu:]): Deleted.
+
2014-11-04 Chris Dumez <cdu...@apple.com>
Add ptr() method to Ref class
Modified: trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm (175588 => 175589)
--- trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm 2014-11-05 00:31:37 UTC (rev 175588)
+++ trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm 2014-11-05 00:35:29 UTC (rev 175589)
@@ -31,6 +31,7 @@
#import "TextIndicator.h"
#import "WKNSURLExtras.h"
#import "WKViewInternal.h"
+#import "WKWebView.h"
#import "WebContext.h"
#import "WebKitSystemInterface.h"
#import "WebPageMessages.h"
@@ -52,17 +53,6 @@
MenuNeedsUpdate
};
-// FIXME: This should move into an SPI header if it stays.
-@class QLPreviewBubble;
-@interface NSObject (WKQLPreviewBubbleDetails)
-@property (copy) NSArray * controls;
-@property NSSize maximumSize;
-@property NSRectEdge preferredEdge;
-@property (retain) IBOutlet NSWindow* parentWindow;
-- (void)showPreviewItem:(id)previewItem itemFrame:(NSRect)frame;
-- (void)setAutomaticallyCloseWithMask:(NSEventMask)autocloseMask filterMask:(NSEventMask)filterMask block:(void (^)(void))block;
-@end
-
SOFT_LINK_FRAMEWORK_IN_UMBRELLA(Quartz, ImageKit)
SOFT_LINK_CLASS(ImageKit, IKSlideshow)
@@ -80,6 +70,43 @@
- (NSArray *)_actionMenuItemsForHitTestResult:(WKHitTestResultRef)hitTestResult defaultActionMenuItems:(NSArray *)defaultMenuItems;
@end
+@interface WKPagePreviewViewController : NSViewController {
+@public
+ NSSize _preferredSize;
+
+@private
+ RetainPtr<NSURL> _url;
+}
+
+- (instancetype)initWithPageURL:(NSURL *)URL;
+
+@end
+
+@implementation WKPagePreviewViewController
+
+- (instancetype)initWithPageURL:(NSURL *)URL
+{
+ if (!(self = [super init]))
+ return nil;
+
+ _url = URL;
+ _preferredSize = NSMakeSize(320, 568);
+
+ return self;
+}
+
+- (void)loadView
+{
+ WKWebView *webView = [[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, _preferredSize.width, _preferredSize.height)];
+ if (_url) {
+ NSURLRequest *request = [NSURLRequest requestWithURL:_url.get()];
+ [webView loadRequest:request];
+ }
+ [self setView:webView];
+}
+
+@end
+
@implementation WKActionMenuController
- (instancetype)initWithPage:(WebPageProxy&)page view:(WKView *)wkView
@@ -207,23 +234,24 @@
[service performWithItems:@[ [NSURL _web_URLWithWTFString:hitTestResult->absoluteLinkURL()] ]];
}
-- (void)_quickLookURLFromActionMenu:(id)sender
+- (void)_previewURLFromActionMenu:(id)sender
{
WebHitTestResult* hitTestResult = _page->lastMouseMoveHitTestResult();
- NSRect itemFrame = [_wkView convertRect:hitTestResult->elementBoundingBox() toView:nil];
- NSSize maximumPreviewSize = NSMakeSize(_wkView.bounds.size.width * 0.75, _wkView.bounds.size.height * 0.75);
+ NSURL *url = "" _web_URLWithWTFString:hitTestResult->absoluteLinkURL()];
+ RetainPtr<NSPopover> popover = [self _createPreviewPopoverForURL:url];
+ [popover showRelativeToRect:hitTestResult->elementBoundingBox() ofView:_wkView preferredEdge:NSMaxYEdge];
+}
- RetainPtr<QLPreviewBubble> bubble = adoptNS([[NSClassFromString(@"QLPreviewBubble") alloc] init]);
- [bubble setParentWindow:_wkView.window];
- [bubble setMaximumSize:maximumPreviewSize];
- [bubble setPreferredEdge:NSMaxYEdge];
- [bubble setControls:@[ ]];
- NSEventMask filterMask = NSAnyEventMask & ~(NSAppKitDefinedMask | NSSystemDefinedMask | NSApplicationDefinedMask | NSMouseEnteredMask | NSMouseExitedMask);
- NSEventMask autocloseMask = NSLeftMouseDownMask | NSRightMouseDownMask | NSKeyDownMask;
- [bubble setAutomaticallyCloseWithMask:autocloseMask filterMask:filterMask block:[bubble] {
- [bubble close];
- }];
- [bubble showPreviewItem:[NSURL _web_URLWithWTFString:hitTestResult->absoluteLinkURL()] itemFrame:itemFrame];
+- (RetainPtr<NSPopover>)_createPreviewPopoverForURL:(NSURL *)url
+{
+ RetainPtr<WKPagePreviewViewController> previewViewController = adoptNS([[WKPagePreviewViewController alloc] initWithPageURL:url]);
+ NSRect wkViewBounds = [_wkView bounds];
+ previewViewController->_preferredSize = NSMakeSize(NSWidth(wkViewBounds) * 0.75, NSHeight(wkViewBounds) * 0.75);
+
+ RetainPtr<NSPopover> popover = adoptNS([[NSPopover alloc] init]);
+ [popover setBehavior:NSPopoverBehaviorTransient];
+ [popover setContentViewController:previewViewController.get()];
+ return popover;
}
#pragma mark Image actions
@@ -503,7 +531,7 @@
break;
case kWKContextActionItemTagPreviewLink:
- selector = @selector(_quickLookURLFromActionMenu:);
+ selector = @selector(_previewURLFromActionMenu:);
title = @"Preview";
image = [NSImage imageNamed:@"NSActionMenuQuickLook"];
break;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes