+2006-11-28 Adam Roben <aroben@apple.com>
+
+ 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 <aroben@apple.com>
Build fix.
class ContextMenu : Noncopyable
{
public:
- ContextMenu(HitTestResult result)
- : m_hitTestResult(result)
- , m_menu(0)
- {
- }
+ ContextMenu(const HitTestResult&);
+ ~ContextMenu();
void populate();
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;
};
}
@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)
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()
void ContextMenu::hide()
{
}
+
+}