Title: [176613] trunk/Source/WebKit2
Revision
176613
Author
[email protected]
Date
2014-12-01 16:49:49 -0800 (Mon, 01 Dec 2014)

Log Message

Clients need a way to explicitly set the title of a page preview
https://bugs.webkit.org/show_bug.cgi?id=139161

Reviewed by Beth Dakin.

This implicitly assumes that only one page preview can be associate with a given WKView at a time.

* UIProcess/API/Cocoa/WKViewPrivate.h:
* UIProcess/API/mac/WKView.mm:
(-[WKView _setPreviewTitle:]):
Wrap -[WKActionMenuController setPreviewTitle:]

* UIProcess/mac/WKActionMenuController.h:
* UIProcess/mac/WKActionMenuController.mm:
Add ivars for the title and the title text field (previously not independently exposed).
(-[WKPagePreviewViewController previewTitle]):
Accessor.
(-[WKPagePreviewViewController setPreviewTitle:]):
Accessor; set the text field's string value.
(-[WKPagePreviewViewController loadView]):
Adopt the _titleTextField ivar; assume that if a client has explicitly set the previewTitle then we don't
need to ask for it again.
(-[WKActionMenuController setPreviewTitle:]):
Wrap -[WKPagePreviewViewController setPreviewTitle:].

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (176612 => 176613)


--- trunk/Source/WebKit2/ChangeLog	2014-12-02 00:18:33 UTC (rev 176612)
+++ trunk/Source/WebKit2/ChangeLog	2014-12-02 00:49:49 UTC (rev 176613)
@@ -1,3 +1,30 @@
+2014-12-01  Conrad Shultz  <[email protected]>
+
+        Clients need a way to explicitly set the title of a page preview
+        https://bugs.webkit.org/show_bug.cgi?id=139161
+
+        Reviewed by Beth Dakin.
+
+        This implicitly assumes that only one page preview can be associate with a given WKView at a time.
+
+        * UIProcess/API/Cocoa/WKViewPrivate.h:
+        * UIProcess/API/mac/WKView.mm:
+        (-[WKView _setPreviewTitle:]):
+        Wrap -[WKActionMenuController setPreviewTitle:]
+
+        * UIProcess/mac/WKActionMenuController.h:
+        * UIProcess/mac/WKActionMenuController.mm:
+        Add ivars for the title and the title text field (previously not independently exposed).
+        (-[WKPagePreviewViewController previewTitle]):
+        Accessor.
+        (-[WKPagePreviewViewController setPreviewTitle:]):
+        Accessor; set the text field's string value.
+        (-[WKPagePreviewViewController loadView]):
+        Adopt the _titleTextField ivar; assume that if a client has explicitly set the previewTitle then we don't
+        need to ask for it again.
+        (-[WKActionMenuController setPreviewTitle:]):
+        Wrap -[WKPagePreviewViewController setPreviewTitle:].
+
 2014-12-01  Anders Carlsson  <[email protected]>
 
         Make WebKit2 work slightly better with garbage collection

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h (176612 => 176613)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h	2014-12-02 00:18:33 UTC (rev 176612)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h	2014-12-02 00:49:49 UTC (rev 176613)
@@ -124,6 +124,7 @@
 
 - (NSView *)_viewForPreviewingURL:(NSURL *)url initialFrameSize:(NSSize)initialFrameSize;
 - (NSString *)_titleForPreviewOfURL:(NSURL *)url;
+- (void)_setPreviewTitle:(NSString *)previewTitle;
 - (void)_finishPreviewingURL:(NSURL *)url withPreviewView:(NSView *)previewView;
 - (void)_handleClickInPreviewView:(NSView *)previewView URL:(NSURL *)url;
 

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


--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2014-12-02 00:18:33 UTC (rev 176612)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2014-12-02 00:49:49 UTC (rev 176613)
@@ -4224,6 +4224,13 @@
     return nil;
 }
 
+- (void)_setPreviewTitle:(NSString *)previewTitle
+{
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
+    [_data->_actionMenuController setPreviewTitle:previewTitle];
+#endif
+}
+
 - (void)_finishPreviewingURL:(NSURL *)url withPreviewView:(NSView *)previewView
 {
 }

Modified: trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.h (176612 => 176613)


--- trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.h	2014-12-02 00:18:33 UTC (rev 176612)
+++ trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.h	2014-12-02 00:49:49 UTC (rev 176613)
@@ -88,6 +88,7 @@
 - (void)didPerformActionMenuHitTest:(const WebKit::ActionMenuHitTestResult&)hitTestResult userData:(API::Object*)userData;
 
 - (void)dismissActionMenuPopovers;
+- (void)setPreviewTitle:(NSString *)previewTitle;
 
 @end
 

Modified: trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm (176612 => 176613)


--- trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm	2014-12-02 00:18:33 UTC (rev 176612)
+++ trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm	2014-12-02 00:49:49 UTC (rev 176613)
@@ -88,10 +88,14 @@
     NSSize _mainViewSize;
     RetainPtr<NSURL> _url;
     RetainPtr<NSView> _previewView;
+    RetainPtr<NSTextField> _titleTextField;
+    RetainPtr<NSString> _previewTitle;
     id <WKPagePreviewViewControllerDelegate> _delegate;
     CGFloat _popoverToViewScale;
 }
 
+@property (nonatomic, copy) NSString *previewTitle;
+
 - (instancetype)initWithPageURL:(NSURL *)URL mainViewSize:(NSSize)size popoverToViewScale:(CGFloat)scale;
 
 + (NSSize)previewPadding;
@@ -112,6 +116,21 @@
     return self;
 }
 
+- (NSString *)previewTitle
+{
+    return _previewTitle.get();
+}
+
+- (void)setPreviewTitle:(NSString *)previewTitle
+{
+    if ([_previewTitle isEqualToString:previewTitle])
+        return;
+
+    // Keep a separate copy around in case this is received before the view hierarchy is created.
+    _previewTitle = adoptNS([previewTitle copy]);
+    [_titleTextField setStringValue:previewTitle ? previewTitle : @""];
+}
+
 + (NSSize)previewPadding
 {
     return NSMakeSize(2 * previewViewInset, previewViewTitleHeight + 2 * previewViewInset);
@@ -147,32 +166,34 @@
     [_previewView setFrame:previewFrame];
     [_previewView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
 
-    RetainPtr<NSTextField> titleTextField = adoptNS([[NSTextField alloc] init]);
-    [titleTextField setWantsLayer:YES];
-    [titleTextField setAutoresizingMask:NSViewWidthSizable | NSViewMinYMargin];
-    [titleTextField setEditable:NO];
-    [titleTextField setBezeled:NO];
-    [titleTextField setDrawsBackground:NO];
-    [titleTextField setAlignment:NSCenterTextAlignment];
-    [titleTextField setUsesSingleLineMode:YES];
-    [titleTextField setLineBreakMode:NSLineBreakByTruncatingTail];
-    [titleTextField setTextColor:[NSColor labelColor]];
+    _titleTextField = adoptNS([[NSTextField alloc] init]);
+    [_titleTextField setWantsLayer:YES];
+    [_titleTextField setAutoresizingMask:NSViewWidthSizable | NSViewMinYMargin];
+    [_titleTextField setEditable:NO];
+    [_titleTextField setBezeled:NO];
+    [_titleTextField setDrawsBackground:NO];
+    [_titleTextField setAlignment:NSCenterTextAlignment];
+    [_titleTextField setUsesSingleLineMode:YES];
+    [_titleTextField setLineBreakMode:NSLineBreakByTruncatingTail];
+    [_titleTextField setTextColor:[NSColor labelColor]];
 
-    NSString *title = [_delegate pagePreviewViewController:self titleForPreviewOfURL:_url.get()];
+    NSString *title = _previewTitle.get();
     if (!title)
+        title = [_delegate pagePreviewViewController:self titleForPreviewOfURL:_url.get()];
+    if (!title)
         title = [_url absoluteString];
 
-    [titleTextField setStringValue:title ? title : @""];
+    [_titleTextField setStringValue:title ? title : @""];
 
-    [titleTextField sizeToFit];
-    NSSize titleFittingSize = [titleTextField frame].size;
+    [_titleTextField sizeToFit];
+    NSSize titleFittingSize = [_titleTextField frame].size;
     CGFloat textFieldCenteringOffset = (NSMaxY(containerFrame) - NSMaxY(previewFrame) - titleFittingSize.height) / 2;
 
     NSRect titleFrame = previewFrame;
     titleFrame.size.height = titleFittingSize.height;
     titleFrame.origin.y = NSMaxY(previewFrame) + textFieldCenteringOffset;
-    [titleTextField setFrame:titleFrame];
-    [containerView addSubview:titleTextField.get()];
+    [_titleTextField setFrame:titleFrame];
+    [containerView addSubview:_titleTextField.get()];
 
     // Setting the webView bounds will scale it to 75% of the _mainViewSize.
     [_previewView setBounds:NSMakeRect(0, 0, _mainViewSize.width / _popoverToViewScale, _mainViewSize.height / _popoverToViewScale)];
@@ -333,6 +354,13 @@
     [self _clearPreviewPopover];
 }
 
+- (void)setPreviewTitle:(NSString *)previewTitle
+{
+#if WK_API_ENABLED
+    [_previewViewController setPreviewTitle:previewTitle];
+#endif
+}
+
 #pragma mark Text Indicator
 
 - (void)_showTextIndicator
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to