[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-10851-g50815da
bweinstein at apple.com
bweinstein at apple.com
Wed Dec 22 18:08:31 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 60350d69fca3c9ade820288e6bd5d3f8a27b8b4e
Author: bweinstein at apple.com <bweinstein at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Tue Dec 7 22:47:37 2010 +0000
Part of Layering Violation in ContextMenu
https://bugs.webkit.org/show_bug.cgi?id=50586
Reviewed by John Sullivan.
WebCore:
ContextMenuMac.mm had a WebCoreMenuTarget class, which was responsible for wrapping
a ContextMenuItem, and calling through to the ContextMenuController to validate it
and call a function when it was selected.
It was a layering violation to have this class here, because ContextMenu can't know
about ContextMenuController.
This patch moves the class that wraps the ContextMenuItems to WebKit/mac/WebHTMLView.mm,
and sets up the menu targets there.
No change in behavior, no new tests.
* WebCore.exp.in: Added function that needs to be exported.
* platform/mac/ContextMenuMac.mm:
(WebCore::ContextMenu::ContextMenu): Don't set the sharedMenuTarget anymore.
(WebCore::ContextMenu::appendItem): Don't call setMenuItemTarget (this is done in WebKit now).
(WebCore::ContextMenu::insertItem): Ditto.
WebKit/mac:
Move WebMenuTarget from ContextMenuMac to here, because having it in ContextMenuMac
was a layering violation. Also, make sure we set the menu item targets for all menu
items before showing them, because the ContextMenu constructor doesn't do that anymore.
* WebView/WebHTMLView.mm:
(+[WebMenuTarget sharedMenuTarget]): Moved from ContextMenuMac.mm.
(-[WebMenuTarget WebCore::]): Ditto.
(-[WebMenuTarget setMenuController:WebCore::]): Ditto.
(-[WebMenuTarget forwardContextMenuAction:]): Ditto.
(-[WebMenuTarget validateMenuItem:]): Ditto.
(setMenuItemTarget): Sets the target of the NSMenuItem to the shared WebMenuTarget.
(setMenuTargets): Recursively iterates over all NSMenuItems in an NSMenu (including
submenus), and calls setMenuItemTarget on them.
(-[WebHTMLView menuForEvent:]): Call setMenuTarget on all the menu items before adding
them to the menu.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@73469 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 88b3ada..348cf7a 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,28 @@
+2010-12-07 Brian Weinstein <bweinstein at apple.com>
+
+ Reviewed by John Sullivan.
+
+ Part of Layering Violation in ContextMenu
+ https://bugs.webkit.org/show_bug.cgi?id=50586
+
+ ContextMenuMac.mm had a WebCoreMenuTarget class, which was responsible for wrapping
+ a ContextMenuItem, and calling through to the ContextMenuController to validate it
+ and call a function when it was selected.
+
+ It was a layering violation to have this class here, because ContextMenu can't know
+ about ContextMenuController.
+
+ This patch moves the class that wraps the ContextMenuItems to WebKit/mac/WebHTMLView.mm,
+ and sets up the menu targets there.
+
+ No change in behavior, no new tests.
+
+ * WebCore.exp.in: Added function that needs to be exported.
+ * platform/mac/ContextMenuMac.mm:
+ (WebCore::ContextMenu::ContextMenu): Don't set the sharedMenuTarget anymore.
+ (WebCore::ContextMenu::appendItem): Don't call setMenuItemTarget (this is done in WebKit now).
+ (WebCore::ContextMenu::insertItem): Ditto.
+
2010-12-07 Simon Fraser <simon.fraser at apple.com>
Reviewed by Dan Bernstein.
diff --git a/WebCore/WebCore.exp.in b/WebCore/WebCore.exp.in
index f229e87..c79eba7 100644
--- a/WebCore/WebCore.exp.in
+++ b/WebCore/WebCore.exp.in
@@ -1249,6 +1249,7 @@ __ZN7WebCore15ContextMenuItem26releasePlatformDescriptionEv
__ZN7WebCore15ContextMenuItemC1ENS_17ContextMenuActionERKN3WTF6StringEbbRNS2_6VectorIS0_Lm0EEE
__ZN7WebCore15ContextMenuItemC1ENS_19ContextMenuItemTypeENS_17ContextMenuActionERKN3WTF6StringEPNS_11ContextMenuE
__ZN7WebCore15ContextMenuItemC1ENS_19ContextMenuItemTypeENS_17ContextMenuActionERKN3WTF6StringEbb
+__ZN7WebCore15ContextMenuItemC1EP10NSMenuItem
__ZN7WebCore15ContextMenuItemD1Ev
__ZN7WebCore21ContextMenuController16clearContextMenuEv
__ZN7WebCore21ContextMenuController23contextMenuItemSelectedEPNS_15ContextMenuItemE
diff --git a/WebCore/platform/mac/ContextMenuMac.mm b/WebCore/platform/mac/ContextMenuMac.mm
index 7c91028..a3c0653 100644
--- a/WebCore/platform/mac/ContextMenuMac.mm
+++ b/WebCore/platform/mac/ContextMenuMac.mm
@@ -28,55 +28,6 @@
#if ENABLE(CONTEXT_MENUS)
-#include "ContextMenuController.h"
-
- at interface WebCoreMenuTarget : NSObject {
- WebCore::ContextMenuController* _menuController;
-}
-+ (WebCoreMenuTarget*)sharedMenuTarget;
-- (WebCore::ContextMenuController*)menuController;
-- (void)setMenuController:(WebCore::ContextMenuController*)menuController;
-- (void)forwardContextMenuAction:(id)sender;
-- (BOOL)validateMenuItem:(NSMenuItem *)item;
- at end
-
-static WebCoreMenuTarget* target;
-
- at implementation WebCoreMenuTarget
-
-+ (WebCoreMenuTarget*)sharedMenuTarget
-{
- if (!target)
- target = [[WebCoreMenuTarget alloc] init];
- return target;
-}
-
-- (WebCore::ContextMenuController*)menuController
-{
- return _menuController;
-}
-
-- (void)setMenuController:(WebCore::ContextMenuController*)menuController
-{
- _menuController = menuController;
-}
-
-- (void)forwardContextMenuAction:(id)sender
-{
- WebCore::ContextMenuItem item(WebCore::ActionType, static_cast<WebCore::ContextMenuAction>([sender tag]), [sender title]);
- _menuController->contextMenuItemSelected(&item);
-}
-
-- (BOOL)validateMenuItem:(NSMenuItem *)item
-{
- WebCore::ContextMenuItem coreItem(item);
- ASSERT(_menuController->contextMenu());
- _menuController->contextMenu()->checkOrEnableIfNeeded(coreItem);
- return coreItem.enabled();
-}
-
- at end
-
namespace WebCore {
ContextMenu::ContextMenu(const HitTestResult& result)
@@ -85,35 +36,23 @@ ContextMenu::ContextMenu(const HitTestResult& result)
NSMutableArray* array = [[NSMutableArray alloc] init];
m_platformDescription = array;
[array release];
-
- [[WebCoreMenuTarget sharedMenuTarget] setMenuController:controller()];
}
ContextMenu::ContextMenu(const HitTestResult& result, const PlatformMenuDescription menu)
: m_hitTestResult(result)
, m_platformDescription(menu)
{
- [[WebCoreMenuTarget sharedMenuTarget] setMenuController:controller()];
}
ContextMenu::~ContextMenu()
{
}
-
-static void setMenuItemTarget(NSMenuItem* menuItem)
-{
- [menuItem setTarget:[WebCoreMenuTarget sharedMenuTarget]];
- [menuItem setAction:@selector(forwardContextMenuAction:)];
-}
void ContextMenu::appendItem(ContextMenuItem& item)
{
checkOrEnableIfNeeded(item);
- ContextMenuItemType type = item.type();
NSMenuItem* platformItem = item.releasePlatformDescription();
- if (type == ActionType)
- setMenuItemTarget(platformItem);
[m_platformDescription.get() addObject:platformItem];
[platformItem release];
@@ -123,10 +62,7 @@ void ContextMenu::insertItem(unsigned position, ContextMenuItem& item)
{
checkOrEnableIfNeeded(item);
- ContextMenuItemType type = item.type();
NSMenuItem* platformItem = item.releasePlatformDescription();
- if (type == ActionType)
- setMenuItemTarget(platformItem);
[m_platformDescription.get() insertObject:platformItem atIndex:position];
[platformItem release];
diff --git a/WebKit/mac/ChangeLog b/WebKit/mac/ChangeLog
index ee78843..fb19ed6 100644
--- a/WebKit/mac/ChangeLog
+++ b/WebKit/mac/ChangeLog
@@ -1,3 +1,27 @@
+2010-12-07 Brian Weinstein <bweinstein at apple.com>
+
+ Reviewed by John Sullivan.
+
+ Part of Layering Violation in ContextMenu
+ https://bugs.webkit.org/show_bug.cgi?id=50586
+
+ Move WebMenuTarget from ContextMenuMac to here, because having it in ContextMenuMac
+ was a layering violation. Also, make sure we set the menu item targets for all menu
+ items before showing them, because the ContextMenu constructor doesn't do that anymore.
+
+ * WebView/WebHTMLView.mm:
+ (+[WebMenuTarget sharedMenuTarget]): Moved from ContextMenuMac.mm.
+ (-[WebMenuTarget WebCore::]): Ditto.
+ (-[WebMenuTarget setMenuController:WebCore::]): Ditto.
+ (-[WebMenuTarget forwardContextMenuAction:]): Ditto.
+ (-[WebMenuTarget validateMenuItem:]): Ditto.
+
+ (setMenuItemTarget): Sets the target of the NSMenuItem to the shared WebMenuTarget.
+ (setMenuTargets): Recursively iterates over all NSMenuItems in an NSMenu (including
+ submenus), and calls setMenuItemTarget on them.
+ (-[WebHTMLView menuForEvent:]): Call setMenuTarget on all the menu items before adding
+ them to the menu.
+
2010-12-06 Darin Adler <darin at apple.com>
Reviewed by Sam Weinig.
diff --git a/WebKit/mac/WebView/WebHTMLView.mm b/WebKit/mac/WebView/WebHTMLView.mm
index ee478bc..7bd3727 100644
--- a/WebKit/mac/WebView/WebHTMLView.mm
+++ b/WebKit/mac/WebView/WebHTMLView.mm
@@ -129,6 +129,53 @@ using namespace HTMLNames;
using namespace WTF;
using namespace std;
+ at interface WebMenuTarget : NSObject {
+ WebCore::ContextMenuController* _menuController;
+}
++ (WebMenuTarget*)sharedMenuTarget;
+- (WebCore::ContextMenuController*)menuController;
+- (void)setMenuController:(WebCore::ContextMenuController*)menuController;
+- (void)forwardContextMenuAction:(id)sender;
+- (BOOL)validateMenuItem:(NSMenuItem *)item;
+ at end
+
+static WebMenuTarget* target;
+
+ at implementation WebMenuTarget
+
++ (WebMenuTarget*)sharedMenuTarget
+{
+ if (!target)
+ target = [[WebMenuTarget alloc] init];
+ return target;
+}
+
+- (WebCore::ContextMenuController*)menuController
+{
+ return _menuController;
+}
+
+- (void)setMenuController:(WebCore::ContextMenuController*)menuController
+{
+ _menuController = menuController;
+}
+
+- (void)forwardContextMenuAction:(id)sender
+{
+ WebCore::ContextMenuItem item(WebCore::ActionType, static_cast<WebCore::ContextMenuAction>([sender tag]), [sender title]);
+ _menuController->contextMenuItemSelected(&item);
+}
+
+- (BOOL)validateMenuItem:(NSMenuItem *)item
+{
+ WebCore::ContextMenuItem coreItem(item);
+ ASSERT(_menuController->contextMenu());
+ _menuController->contextMenu()->checkOrEnableIfNeeded(coreItem);
+ return coreItem.enabled();
+}
+
+ at end
+
@interface NSWindow (BorderViewAccess)
- (NSView*)_web_borderView;
@end
@@ -3223,6 +3270,23 @@ WEBCORE_COMMAND(yankAndSelect)
coreframe->eventHandler()->mouseUp(event);
}
+static void setMenuItemTarget(NSMenuItem* menuItem)
+{
+ [menuItem setTarget:[WebMenuTarget sharedMenuTarget]];
+ [menuItem setAction:@selector(forwardContextMenuAction:)];
+}
+
+static void setMenuTargets(NSMenu* menu)
+{
+ NSInteger itemCount = [menu numberOfItems];
+ for (NSInteger i = 0; i < itemCount; ++i) {
+ NSMenuItem *item = [menu itemAtIndex:i];
+ setMenuItemTarget(item);
+ if ([item hasSubmenu])
+ setMenuTargets([item submenu]);
+ }
+}
+
- (NSMenu *)menuForEvent:(NSEvent *)event
{
// There's a chance that if we run a nested event loop the event will be released.
@@ -3270,6 +3334,10 @@ WEBCORE_COMMAND(yankAndSelect)
NSMenu* menu = [[[NSMenu alloc] init] autorelease];
for (NSUInteger i = 0; i < count; i++)
[menu addItem:[menuItems objectAtIndex:i]];
+ setMenuTargets(menu);
+
+ [[WebMenuTarget sharedMenuTarget] setMenuController:page->contextMenuController()];
+
return menu;
}
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list