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

Reply via email to