Changeset 175632 in webkit


Ignore:
Timestamp:
Nov 5, 2014 12:15:13 PM (9 years ago)
Author:
Beth Dakin
Message:

Action menu URL preview should "peek," i.e. appear when the menu item is
highlighted
https://bugs.webkit.org/show_bug.cgi?id=138432
-and corresponding-
rdar://problem/18774264

Reviewed by Anders Carlsson.

New ivars. Keep a reference to the popover, and a BOOL that indicates whether we
should close the popover when the menu goes away.

  • UIProcess/mac/WKActionMenuController.h:
  • UIProcess/mac/WKActionMenuController.mm:

Re-set the preview bool to NO whenever we are about to pop up a new menu.
(-[WKActionMenuController prepareForMenu:withEvent:]):

Close the popover when the menu closes unless _shouldKeepPreviewPopoverOpen has
been set.
(-[WKActionMenuController didCloseMenu:withEvent:]):

Set _shouldKeepPreviewPopoverOpen.
(-[WKActionMenuController _keepPreviewOpen:]):

Re-factored to use ivar.
(-[WKActionMenuController _previewURLFromActionMenu:]):
(-[WKActionMenuController _createPreviewPopoverForURL:]):

Now call _previewURLFromActionMenu on menu item highlight.
(-[WKActionMenuController menu:willHighlightItem:]):

NSPopover delegate method so that we can keep our BOOL and ivar accurate in the
case where the popover is closed by some other mechanism than the action menu
going away.
(-[WKActionMenuController popoverWillClose:]):

New selector for the preview. Now when this item is actually selected, we just
want to set the BOOL _shouldKeepPreviewPopoverOpen to YES so that we keep the
preview open.
(-[WKActionMenuController _createActionMenuItemForTag:]):

Location:
trunk/Source/WebKit2
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r175630 r175632  
     12014-11-05  Beth Dakin  <bdakin@apple.com>
     2
     3        Action menu URL preview should "peek," i.e. appear when the menu item is
     4        highlighted
     5        https://bugs.webkit.org/show_bug.cgi?id=138432
     6        -and corresponding-
     7        rdar://problem/18774264
     8
     9        Reviewed by Anders Carlsson.
     10
     11        New ivars. Keep a reference to the popover, and a BOOL that indicates whether we
     12        should close the popover when the menu goes away.
     13        * UIProcess/mac/WKActionMenuController.h:
     14        * UIProcess/mac/WKActionMenuController.mm:
     15
     16        Re-set the preview bool to NO whenever we are about to pop up a new menu.
     17        (-[WKActionMenuController prepareForMenu:withEvent:]):
     18
     19        Close the popover when the menu closes unless _shouldKeepPreviewPopoverOpen has
     20        been set.
     21        (-[WKActionMenuController didCloseMenu:withEvent:]):
     22
     23        Set _shouldKeepPreviewPopoverOpen.
     24        (-[WKActionMenuController _keepPreviewOpen:]):
     25
     26        Re-factored to use ivar.
     27        (-[WKActionMenuController _previewURLFromActionMenu:]):
     28        (-[WKActionMenuController _createPreviewPopoverForURL:]):
     29
     30        Now call _previewURLFromActionMenu on menu item highlight.
     31        (-[WKActionMenuController menu:willHighlightItem:]):
     32
     33        NSPopover delegate method so that we can keep our BOOL and ivar accurate in the
     34        case where the popover is closed by some other mechanism than the action menu
     35        going away.
     36        (-[WKActionMenuController popoverWillClose:]):
     37
     38        New selector for the preview. Now when this item is actually selected, we just
     39        want to set the BOOL _shouldKeepPreviewPopoverOpen to YES so that we keep the
     40        preview open.
     41        (-[WKActionMenuController _createActionMenuItemForTag:]):
     42
    1432014-11-05  Conrad Shultz  <conrad_shultz@apple.com>
    244
  • trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.h

    r175609 r175632  
    5757    _WKActionMenuType _type;
    5858    RetainPtr<NSSharingServicePicker> _sharingServicePicker;
     59    RetainPtr<NSPopover> _previewPopover;
    5960
    6061    BOOL _isShowingTextIndicator;
     62    BOOL _shouldKeepPreviewPopoverOpen;
    6163}
    6264
  • trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm

    r175630 r175632  
    6161using namespace WebKit;
    6262
    63 @interface WKActionMenuController () <NSSharingServiceDelegate, NSSharingServicePickerDelegate>
     63@interface WKActionMenuController () <NSSharingServiceDelegate, NSSharingServicePickerDelegate, NSPopoverDelegate>
    6464- (void)_updateActionMenuItemsForStage:(MenuUpdateStage)stage;
    6565- (BOOL)_canAddImageToPhotos;
     
    133133    _wkView = nullptr;
    134134    _hitTestResult = ActionMenuHitTestResult();
     135    [_previewPopover setDelegate:nil];
     136    _previewPopover = nil;
    135137}
    136138
     
    146148
    147149    [self _hideTextIndicator];
     150    _shouldKeepPreviewPopoverOpen = NO;
    148151}
    149152
     
    178181    if (_type == kWKActionMenuDataDetectedItem && menu.numberOfItems > 1)
    179182        [self _hideTextIndicator];
    180    
     183
     184    if (!_shouldKeepPreviewPopoverOpen) {
     185        [_previewPopover close];
     186        [_previewPopover setDelegate:nil];
     187        _previewPopover = nil;
     188    }
     189
    181190    _state = ActionMenuState::None;
    182191    _hitTestResult = ActionMenuHitTestResult();
     
    252261
    253262#if WK_API_ENABLED
     263- (void)_keepPreviewOpenFromActionMenu:(id)sender
     264{
     265    _shouldKeepPreviewPopoverOpen = YES;
     266}
     267
    254268- (void)_previewURLFromActionMenu:(id)sender
    255269{
     270    // We might already have a preview showing if the menu item was highlighted earlier.
     271    if (_previewPopover)
     272        return;
     273
    256274    WebHitTestResult* hitTestResult = _page->lastMouseMoveHitTestResult();
    257275    NSURL *url = [NSURL _web_URLWithWTFString:hitTestResult->absoluteLinkURL()];
    258     RetainPtr<NSPopover> popover = [self _createPreviewPopoverForURL:url];
    259     [popover showRelativeToRect:hitTestResult->elementBoundingBox() ofView:_wkView preferredEdge:NSMaxYEdge];
    260 }
    261 
    262 - (RetainPtr<NSPopover>)_createPreviewPopoverForURL:(NSURL *)url
     276    [self _createPreviewPopoverForURL:url];
     277    [_previewPopover showRelativeToRect:hitTestResult->elementBoundingBox() ofView:_wkView preferredEdge:NSMaxYEdge];
     278}
     279
     280- (void)_createPreviewPopoverForURL:(NSURL *)url
    263281{
    264282    RetainPtr<WKPagePreviewViewController> previewViewController = adoptNS([[WKPagePreviewViewController alloc] initWithPageURL:url]);
     
    266284    previewViewController->_preferredSize = NSMakeSize(NSWidth(wkViewBounds) * 0.75, NSHeight(wkViewBounds) * 0.75);
    267285
    268     RetainPtr<NSPopover> popover = adoptNS([[NSPopover alloc] init]);
    269     [popover setBehavior:NSPopoverBehaviorTransient];
    270     [popover setContentViewController:previewViewController.get()];
    271     return popover;
     286    _previewPopover = adoptNS([[NSPopover alloc] init]);
     287    [_previewPopover setBehavior:NSPopoverBehaviorTransient];
     288    [_previewPopover setContentViewController:previewViewController.get()];
     289    [_previewPopover setDelegate:self];
    272290}
    273291#endif
     
    506524}
    507525
     526- (void)menu:(NSMenu *)menu willHighlightItem:(NSMenuItem *)item
     527{
     528#if WK_API_ENABLED
     529    if (item.tag != kWKContextActionItemTagPreviewLink)
     530        return;
     531    [self _previewURLFromActionMenu:item];
     532#endif
     533}
     534
    508535#pragma mark NSSharingServicePickerDelegate implementation
    509536
     
    531558{
    532559    return _wkView.window;
     560}
     561
     562#pragma mark NSPopoverDelegate implementation
     563
     564- (void)popoverWillClose:(NSNotification *)notification
     565{
     566    _shouldKeepPreviewPopoverOpen = NO;
     567    _previewPopover = nil;
    533568}
    534569
     
    551586#if WK_API_ENABLED
    552587    case kWKContextActionItemTagPreviewLink:
    553         selector = @selector(_previewURLFromActionMenu:);
     588        selector = @selector(_keepPreviewOpenFromActionMenu:);
    554589        title = @"Preview";
    555590        image = [NSImage imageNamed:@"NSActionMenuQuickLook"];
Note: See TracChangeset for help on using the changeset viewer.