Title: [176027] trunk/Source/WebKit2
- Revision
- 176027
- Author
- [email protected]
- Date
- 2014-11-12 11:06:15 -0800 (Wed, 12 Nov 2014)
Log Message
Make action menus much more reliable
https://bugs.webkit.org/show_bug.cgi?id=138654
<rdar://problem/18909111>
Reviewed by Anders Carlsson.
* UIProcess/mac/WKActionMenuController.mm:
(-[WKActionMenuController prepareForMenu:withEvent:]):
Remove MenuUpdateStage; nothing actually uses this value, we just pass it around.
(-[WKActionMenuController didPerformActionMenuHitTest:userData:]):
Update the menu as soon as we have a reply from the Web process.
(-[WKActionMenuController menuNeedsUpdate:]):
If our sync-wait for the Web process' reply times out, we should still update
the menu to remove the placeholder separator item.
(-[WKActionMenuController _updateActionMenuItems]):
(-[WKActionMenuController _updateActionMenuItemsForStage:]): Deleted.
If we have our final answer for this menu (_state == Ready), and the final answer
has no items in the menu, cancel tracking on the menu.
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (176026 => 176027)
--- trunk/Source/WebKit2/ChangeLog 2014-11-12 18:59:12 UTC (rev 176026)
+++ trunk/Source/WebKit2/ChangeLog 2014-11-12 19:06:15 UTC (rev 176027)
@@ -1,3 +1,27 @@
+2014-11-12 Tim Horton <[email protected]>
+
+ Make action menus much more reliable
+ https://bugs.webkit.org/show_bug.cgi?id=138654
+ <rdar://problem/18909111>
+
+ Reviewed by Anders Carlsson.
+
+ * UIProcess/mac/WKActionMenuController.mm:
+ (-[WKActionMenuController prepareForMenu:withEvent:]):
+ Remove MenuUpdateStage; nothing actually uses this value, we just pass it around.
+
+ (-[WKActionMenuController didPerformActionMenuHitTest:userData:]):
+ Update the menu as soon as we have a reply from the Web process.
+
+ (-[WKActionMenuController menuNeedsUpdate:]):
+ If our sync-wait for the Web process' reply times out, we should still update
+ the menu to remove the placeholder separator item.
+
+ (-[WKActionMenuController _updateActionMenuItems]):
+ (-[WKActionMenuController _updateActionMenuItemsForStage:]): Deleted.
+ If we have our final answer for this menu (_state == Ready), and the final answer
+ has no items in the menu, cancel tracking on the menu.
+
2014-11-12 Carlos Garcia Campos <[email protected]>
[GTK] Move RedirectedXCompositeWindow from platform to WebKit2 layer
Modified: trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm (176026 => 176027)
--- trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm 2014-11-12 18:59:12 UTC (rev 176026)
+++ trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm 2014-11-12 19:06:15 UTC (rev 176027)
@@ -51,11 +51,6 @@
#import <WebCore/SoftLinking.h>
#import <WebCore/URL.h>
-enum class MenuUpdateStage {
- PrepareForMenu,
- MenuNeedsUpdate
-};
-
SOFT_LINK_FRAMEWORK_IN_UMBRELLA(Quartz, ImageKit)
SOFT_LINK_CLASS(ImageKit, IKSlideshow)
@@ -63,7 +58,7 @@
using namespace WebKit;
@interface WKActionMenuController () <NSSharingServiceDelegate, NSSharingServicePickerDelegate, NSPopoverDelegate>
-- (void)_updateActionMenuItemsForStage:(MenuUpdateStage)stage;
+- (void)_updateActionMenuItems;
- (BOOL)_canAddMediaToPhotos;
- (void)_showTextIndicator;
- (void)_hideTextIndicator;
@@ -181,7 +176,7 @@
_page->performActionMenuHitTestAtLocation([_wkView convertPoint:event.locationInWindow fromView:nil]);
_state = ActionMenuState::Pending;
- [self _updateActionMenuItemsForStage:MenuUpdateStage::PrepareForMenu];
+ [self _updateActionMenuItems];
_shouldKeepPreviewPopoverOpen = NO;
}
@@ -240,6 +235,8 @@
_state = ActionMenuState::Ready;
_hitTestResult = hitTestResult;
_userData = userData;
+
+ [self _updateActionMenuItems];
}
- (void)dismissActionMenuPopovers
@@ -685,7 +682,8 @@
connection->waitForAndDispatchImmediately<Messages::WebPageProxy::DidPerformActionMenuHitTest>(_page->pageID(), std::chrono::milliseconds(500));
}
- [self _updateActionMenuItemsForStage:MenuUpdateStage::MenuNeedsUpdate];
+ if (_state != ActionMenuState::Ready)
+ [self _updateActionMenuItems];
}
- (void)menu:(NSMenu *)menu willHighlightItem:(NSMenuItem *)item
@@ -909,7 +907,7 @@
return _state != ActionMenuState::Ready ? @[ [NSMenuItem separatorItem] ] : @[ ];
}
-- (void)_updateActionMenuItemsForStage:(MenuUpdateStage)stage
+- (void)_updateActionMenuItems
{
[_wkView.actionMenu removeAllItems];
@@ -923,6 +921,9 @@
for (NSMenuItem *item in menuItems)
[_wkView.actionMenu addItem:item];
+
+ if (_state == ActionMenuState::Ready && !_wkView.actionMenu.numberOfItems)
+ [_wkView.actionMenu cancelTracking];
}
#if WK_API_ENABLED
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes