summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/menu.hxx3
-rw-r--r--include/vcl/toolkit/unowrap.hxx9
-rw-r--r--svtools/source/control/managedmenubutton.cxx8
-rw-r--r--toolkit/inc/helper/unowrapper.hxx3
-rw-r--r--toolkit/source/helper/unowrapper.cxx6
-rw-r--r--vcl/source/window/menu.cxx8
6 files changed, 31 insertions, 6 deletions
diff --git a/include/vcl/menu.hxx b/include/vcl/menu.hxx
index 7613f14f157c..3838395601ac 100644
--- a/include/vcl/menu.hxx
+++ b/include/vcl/menu.hxx
@@ -50,6 +50,7 @@ class MenuBarWindow;
struct SystemMenuData;
enum class FloatWinPopupFlags;
+namespace com::sun::star::awt { class XPopupMenu; }
namespace com::sun::star::accessibility { class XAccessible; }
namespace com::sun::star::frame { class XFrame; }
@@ -521,6 +522,8 @@ public:
virtual void SelectItem(sal_uInt16 nId) override;
void SetSelectedEntry( sal_uInt16 nId ); // for use by native submenu only
+ css::uno::Reference<css::awt::XPopupMenu> CreateMenuInterface();
+
static bool IsInExecute();
static PopupMenu* GetActivePopupMenu();
diff --git a/include/vcl/toolkit/unowrap.hxx b/include/vcl/toolkit/unowrap.hxx
index ad528af0e0b3..c646dbccc882 100644
--- a/include/vcl/toolkit/unowrap.hxx
+++ b/include/vcl/toolkit/unowrap.hxx
@@ -30,10 +30,12 @@
#include <vcl/vclptr.hxx>
namespace vcl { class Window; }
-class OutputDevice;
class Menu;
+class OutputDevice;
+class PopupMenu;
namespace com::sun::star::awt {
class XGraphics;
+ class XPopupMenu;
class XToolkit;
class XWindow;
class XWindowPeer;
@@ -55,10 +57,13 @@ public:
virtual void ReleaseAllGraphics( OutputDevice* pOutDev ) = 0;
// Window
- virtual css::uno::Reference< css::awt::XWindowPeer> GetWindowInterface( vcl::Window* pWindow ) = 0;
+ virtual css::uno::Reference<css::awt::XWindowPeer> GetWindowInterface( vcl::Window* pWindow ) = 0;
virtual void SetWindowInterface( vcl::Window* pWindow, css::uno::Reference< css::awt::XWindowPeer > xIFace ) = 0;
virtual VclPtr<vcl::Window> GetWindow(const css::uno::Reference<css::awt::XWindow>& rxWindow) = 0;
+ // PopupMenu
+ virtual css::uno::Reference<css::awt::XPopupMenu> CreateMenuInterface( PopupMenu* pPopupMenu ) = 0;
+
virtual void WindowDestroyed( vcl::Window* pWindow ) = 0;
// Accessibility
diff --git a/svtools/source/control/managedmenubutton.cxx b/svtools/source/control/managedmenubutton.cxx
index 45e9d98ca1a8..4db9d2a1858b 100644
--- a/svtools/source/control/managedmenubutton.cxx
+++ b/svtools/source/control/managedmenubutton.cxx
@@ -9,11 +9,11 @@
#include <comphelper/processfactory.hxx>
#include <comphelper/propertyvalue.hxx>
-#include <toolkit/awt/vclxmenu.hxx>
#include <vcl/builderfactory.hxx>
#include <vcl/menu.hxx>
#include <vcl/menubtn.hxx>
+#include <com/sun/star/awt/XPopupMenu.hpp>
#include <com/sun/star/frame/theDesktop.hpp>
#include <com/sun/star/frame/ModuleManager.hpp>
#include <com/sun/star/frame/thePopupMenuControllerFactory.hpp>
@@ -31,7 +31,7 @@ public:
void dispose() override;
private:
- rtl::Reference<VCLXPopupMenu> m_xPopupMenu;
+ css::uno::Reference<css::awt::XPopupMenu> m_xPopupMenu;
css::uno::Reference<css::frame::XPopupMenuController> m_xPopupController;
};
@@ -71,7 +71,7 @@ void ManagedMenuButton::Activate()
}
if (!m_xPopupMenu.is())
- m_xPopupMenu.set(new VCLXPopupMenu(GetPopupMenu()));
+ m_xPopupMenu = GetPopupMenu()->CreateMenuInterface();
// FIXME: get the frame from the parent VclBuilder.
css::uno::Reference<css::uno::XComponentContext> xContext(comphelper::getProcessComponentContext());
@@ -112,7 +112,7 @@ void ManagedMenuButton::Activate()
"com.sun.star.comp.framework.ResourceMenuController", aArgs, xContext), css::uno::UNO_QUERY);
if (m_xPopupController.is())
- m_xPopupController->setPopupMenu(m_xPopupMenu.get());
+ m_xPopupController->setPopupMenu(m_xPopupMenu);
}
}
diff --git a/toolkit/inc/helper/unowrapper.hxx b/toolkit/inc/helper/unowrapper.hxx
index cfb890584c61..6e10e870506d 100644
--- a/toolkit/inc/helper/unowrapper.hxx
+++ b/toolkit/inc/helper/unowrapper.hxx
@@ -55,6 +55,9 @@ public:
virtual void SetWindowInterface( vcl::Window* pWindow, css::uno::Reference< css::awt::XWindowPeer> xIFace ) override;
virtual VclPtr<vcl::Window> GetWindow(const css::uno::Reference<css::awt::XWindow>& rxWindow) override;
+ // Menu
+ virtual css::uno::Reference<css::awt::XPopupMenu> CreateMenuInterface( PopupMenu* pPopupMenu ) override;
+
void WindowDestroyed( vcl::Window* pWindow ) override;
// Accessibility
diff --git a/toolkit/source/helper/unowrapper.cxx b/toolkit/source/helper/unowrapper.cxx
index eb37d4137419..edac7fe62b34 100644
--- a/toolkit/source/helper/unowrapper.cxx
+++ b/toolkit/source/helper/unowrapper.cxx
@@ -21,6 +21,7 @@
#include <toolkit/awt/vclxwindow.hxx>
#include <toolkit/awt/vclxwindows.hxx>
#include <toolkit/awt/vclxcontainer.hxx>
+#include <toolkit/awt/vclxmenu.hxx>
#include <toolkit/awt/vclxtopwindow.hxx>
#include <awt/vclxgraphics.hxx>
@@ -179,6 +180,11 @@ void UnoWrapper::SetWindowInterface( vcl::Window* pWindow, css::uno::Reference<
pWindow->SetWindowPeer( xIFace, pVCLXWindow );
}
+css::uno::Reference<css::awt::XPopupMenu> UnoWrapper::CreateMenuInterface( PopupMenu* pPopupMenu )
+{
+ return new VCLXPopupMenu(pPopupMenu);
+}
+
css::uno::Reference< css::awt::XGraphics> UnoWrapper::CreateGraphics( OutputDevice* pOutDev )
{
css::uno::Reference< css::awt::XGraphics> xGrf;
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
index 1f13715a5e7f..ea08e0a05855 100644
--- a/vcl/source/window/menu.cxx
+++ b/vcl/source/window/menu.cxx
@@ -3113,6 +3113,14 @@ tools::Long PopupMenu::ImplCalcHeight( sal_uInt16 nEntries ) const
return nHeight;
}
+css::uno::Reference<css::awt::XPopupMenu> PopupMenu::CreateMenuInterface()
+{
+ UnoWrapperBase* pWrapper = UnoWrapperBase::GetUnoWrapper();
+ if ( pWrapper )
+ return pWrapper->CreateMenuInterface(this);
+ return nullptr;
+}
+
ImplMenuDelData::ImplMenuDelData( const Menu* pMenu )
: mpNext( nullptr )
, mpMenu( nullptr )