From: aroben Date: Wed, 29 Nov 2006 04:19:21 +0000 (+0000) Subject: Reviewed by Ada. X-Git-Url: https://git.webkit.org/?p=WebKit-https.git;a=commitdiff_plain;h=e8b4da132042e2b3d74ebc6b4ef5ba7635b836e0 Reviewed by Ada. Add platform-specific constructor/destructor to ContextMenu so we can properly retain/release the platform menu description. * platform/ContextMenu.h: (WebCore::ContextMenu::platformDescription): * platform/mac/ContextMenuMac.mm: (WebCore::ContextMenu::ContextMenu): (WebCore::ContextMenu::~ContextMenu): (WebCore::getNSMenuItem): (WebCore::ContextMenu::appendItem): (WebCore::ContextMenu::itemCount): (WebCore::ContextMenu::insertItem): (WebCore::ContextMenu::setPlatformDescription): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@17917 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog index 19c8c5263a5f..337c948f9910 100644 --- a/WebCore/ChangeLog +++ b/WebCore/ChangeLog @@ -1,3 +1,21 @@ +2006-11-28 Adam Roben + + Reviewed by Ada. + + Add platform-specific constructor/destructor to ContextMenu so we can + properly retain/release the platform menu description. + + * platform/ContextMenu.h: + (WebCore::ContextMenu::platformDescription): + * platform/mac/ContextMenuMac.mm: + (WebCore::ContextMenu::ContextMenu): + (WebCore::ContextMenu::~ContextMenu): + (WebCore::getNSMenuItem): + (WebCore::ContextMenu::appendItem): + (WebCore::ContextMenu::itemCount): + (WebCore::ContextMenu::insertItem): + (WebCore::ContextMenu::setPlatformDescription): + 2006-11-28 Adam Roben Build fix. diff --git a/WebCore/platform/ContextMenu.h b/WebCore/platform/ContextMenu.h index 6538febc5b37..903bbf1667ce 100644 --- a/WebCore/platform/ContextMenu.h +++ b/WebCore/platform/ContextMenu.h @@ -59,11 +59,8 @@ namespace WebCore { class ContextMenu : Noncopyable { public: - ContextMenu(HitTestResult result) - : m_hitTestResult(result) - , m_menu(0) - { - } + ContextMenu(const HitTestResult&); + ~ContextMenu(); void populate(); @@ -80,12 +77,12 @@ namespace WebCore { HitTestResult hitTestResult() const { return m_hitTestResult; } ContextMenuController* controller() const; - PlatformMenuDescription platformDescription() const { return m_menu; } - void setPlatformDescription(PlatformMenuDescription menu); + PlatformMenuDescription platformDescription() const { return m_platformDescription; } + void setPlatformDescription(PlatformMenuDescription); private: HitTestResult m_hitTestResult; - PlatformMenuDescription m_menu; + PlatformMenuDescription m_platformDescription; }; } diff --git a/WebCore/platform/mac/ContextMenuMac.mm b/WebCore/platform/mac/ContextMenuMac.mm index 5b221658245c..e69f585f1329 100644 --- a/WebCore/platform/mac/ContextMenuMac.mm +++ b/WebCore/platform/mac/ContextMenuMac.mm @@ -66,14 +66,25 @@ @end -using namespace WebCore; +namespace WebCore { static MenuTarget* target; + +ContextMenu::ContextMenu(const HitTestResult& result) + : m_hitTestResult(result) + , m_platformDescription([NSMutableArray array]) +{ +} + +ContextMenu::~ContextMenu() +{ + [m_platformDescription release]; +} static NSMenuItem* getNSMenuItem(ContextMenu* menu, const ContextMenuItem& item) { if (!menu->platformDescription()) - menu->setPlatformDescription([[[NSMutableArray alloc] init] autorelease]); + return 0; ContextMenuController* currentController = menu->controller(); if (!target) @@ -104,29 +115,35 @@ static NSMenuItem* getNSMenuItem(ContextMenu* menu, const ContextMenuItem& item) void ContextMenu::appendItem(const ContextMenuItem& item) { NSMenuItem* menuItem = getNSMenuItem(this, item); - [m_menu addObject:menuItem]; + if (!menuItem) + return; + + [m_platformDescription addObject:menuItem]; [menuItem release]; } unsigned ContextMenu::itemCount() const { - return [m_menu count]; + return [m_platformDescription count]; } void ContextMenu::insertItem(unsigned position, const ContextMenuItem& item) { NSMenuItem* menuItem = getNSMenuItem(this, item); - [m_menu insertObject:menuItem atIndex:position]; + if (!menuItem) + return; + + [m_platformDescription insertObject:menuItem atIndex:position]; [menuItem release]; } void ContextMenu::setPlatformDescription(NSMutableArray* menu) { - if (menu == m_menu) + if (menu == m_platformDescription) return; - [m_menu release]; - m_menu = [menu retain]; + [m_platformDescription release]; + m_platformDescription = [menu retain]; } void ContextMenu::show() @@ -136,3 +153,5 @@ void ContextMenu::show() void ContextMenu::hide() { } + +}