Author: stippi Date: Fri Mar 5 20:36:33 2010 New Revision: 292 URL: http://mmlr.dyndns.org/changeset/292 Log: Use BMenu again in ContextMenu, which makes it work better as submenu, and convert to BPopUpMenu at the top-evel (BWebPage). Modified: webkit/trunk/WebCore/platform/haiku/ContextMenuHaiku.cpp webkit/trunk/WebKit/haiku/API/WebPage.cpp Modified: webkit/trunk/WebCore/platform/haiku/ContextMenuHaiku.cpp ============================================================================== --- webkit/trunk/WebCore/platform/haiku/ContextMenuHaiku.cpp Fri Mar 5 18:44:14 2010 (r291) +++ webkit/trunk/WebCore/platform/haiku/ContextMenuHaiku.cpp Fri Mar 5 20:36:33 2010 (r292) @@ -34,10 +34,10 @@ #include "FrameView.h" #include <Application.h> #include <Handler.h> +#include <Menu.h> #include <MenuItem.h> #include <Message.h> #include <Messenger.h> -#include <PopUpMenu.h> #include <wtf/Assertions.h> #include <stdio.h> @@ -72,7 +72,7 @@ ContextMenu::ContextMenu(const HitTestResult& result) : m_hitTestResult(result) - , m_platformDescription(new BPopUpMenu("context_menu")) + , m_platformDescription(new BMenu("context_menu")) , m_menuHandler(new ContextMenuHandler(this)) { if (be_app->Lock()) { Modified: webkit/trunk/WebKit/haiku/API/WebPage.cpp ============================================================================== --- webkit/trunk/WebKit/haiku/API/WebPage.cpp Fri Mar 5 18:44:14 2010 (r291) +++ webkit/trunk/WebKit/haiku/API/WebPage.cpp Fri Mar 5 20:36:33 2010 (r292) @@ -947,12 +947,17 @@ // also swallow the event. ContextMenu* contextMenu = m_page->contextMenuController()->contextMenu(); if (contextMenu) { - // ContextMenuHaiku really creates BPopUpMenu instances. - BPopUpMenu* popupMenu = static_cast<BPopUpMenu*>( - contextMenu->platformDescription()); - if (popupMenu) { + BMenu* platformMenu = contextMenu->releasePlatformDescription(); + if (platformMenu) { + // Need to convert the BMenu into BPopUpMenu. + BPopUpMenu* popupMenu = new BPopUpMenu("context menu"); + for (int32 i = platformMenu->CountItems() - 1; i >= 0; i--) { + BMenuItem* item = platformMenu->RemoveItem(i); + popupMenu->AddItem(item, 0); + } BPoint screenLocation(event.globalX(), event.globalY()); popupMenu->Go(screenLocation, true, true, true); + delete platformMenu; } } break;