Changeset 175632 in webkit
- Timestamp:
- Nov 5, 2014 12:15:13 PM (9 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r175630 r175632 1 2014-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 1 43 2014-11-05 Conrad Shultz <conrad_shultz@apple.com> 2 44 -
trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.h
r175609 r175632 57 57 _WKActionMenuType _type; 58 58 RetainPtr<NSSharingServicePicker> _sharingServicePicker; 59 RetainPtr<NSPopover> _previewPopover; 59 60 60 61 BOOL _isShowingTextIndicator; 62 BOOL _shouldKeepPreviewPopoverOpen; 61 63 } 62 64 -
trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm
r175630 r175632 61 61 using namespace WebKit; 62 62 63 @interface WKActionMenuController () <NSSharingServiceDelegate, NSSharingServicePickerDelegate >63 @interface WKActionMenuController () <NSSharingServiceDelegate, NSSharingServicePickerDelegate, NSPopoverDelegate> 64 64 - (void)_updateActionMenuItemsForStage:(MenuUpdateStage)stage; 65 65 - (BOOL)_canAddImageToPhotos; … … 133 133 _wkView = nullptr; 134 134 _hitTestResult = ActionMenuHitTestResult(); 135 [_previewPopover setDelegate:nil]; 136 _previewPopover = nil; 135 137 } 136 138 … … 146 148 147 149 [self _hideTextIndicator]; 150 _shouldKeepPreviewPopoverOpen = NO; 148 151 } 149 152 … … 178 181 if (_type == kWKActionMenuDataDetectedItem && menu.numberOfItems > 1) 179 182 [self _hideTextIndicator]; 180 183 184 if (!_shouldKeepPreviewPopoverOpen) { 185 [_previewPopover close]; 186 [_previewPopover setDelegate:nil]; 187 _previewPopover = nil; 188 } 189 181 190 _state = ActionMenuState::None; 182 191 _hitTestResult = ActionMenuHitTestResult(); … … 252 261 253 262 #if WK_API_ENABLED 263 - (void)_keepPreviewOpenFromActionMenu:(id)sender 264 { 265 _shouldKeepPreviewPopoverOpen = YES; 266 } 267 254 268 - (void)_previewURLFromActionMenu:(id)sender 255 269 { 270 // We might already have a preview showing if the menu item was highlighted earlier. 271 if (_previewPopover) 272 return; 273 256 274 WebHitTestResult* hitTestResult = _page->lastMouseMoveHitTestResult(); 257 275 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 *)url276 [self _createPreviewPopoverForURL:url]; 277 [_previewPopover showRelativeToRect:hitTestResult->elementBoundingBox() ofView:_wkView preferredEdge:NSMaxYEdge]; 278 } 279 280 - (void)_createPreviewPopoverForURL:(NSURL *)url 263 281 { 264 282 RetainPtr<WKPagePreviewViewController> previewViewController = adoptNS([[WKPagePreviewViewController alloc] initWithPageURL:url]); … … 266 284 previewViewController->_preferredSize = NSMakeSize(NSWidth(wkViewBounds) * 0.75, NSHeight(wkViewBounds) * 0.75); 267 285 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]; 272 290 } 273 291 #endif … … 506 524 } 507 525 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 508 535 #pragma mark NSSharingServicePickerDelegate implementation 509 536 … … 531 558 { 532 559 return _wkView.window; 560 } 561 562 #pragma mark NSPopoverDelegate implementation 563 564 - (void)popoverWillClose:(NSNotification *)notification 565 { 566 _shouldKeepPreviewPopoverOpen = NO; 567 _previewPopover = nil; 533 568 } 534 569 … … 551 586 #if WK_API_ENABLED 552 587 case kWKContextActionItemTagPreviewLink: 553 selector = @selector(_ previewURLFromActionMenu:);588 selector = @selector(_keepPreviewOpenFromActionMenu:); 554 589 title = @"Preview"; 555 590 image = [NSImage imageNamed:@"NSActionMenuQuickLook"];
Note: See TracChangeset
for help on using the changeset viewer.