summaryrefslogtreecommitdiff
path: root/toolkit/source/controls/unocontrol.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/source/controls/unocontrol.cxx')
-rw-r--r--toolkit/source/controls/unocontrol.cxx55
1 files changed, 39 insertions, 16 deletions
diff --git a/toolkit/source/controls/unocontrol.cxx b/toolkit/source/controls/unocontrol.cxx
index 6c8435791883..2f41e3f367d4 100644
--- a/toolkit/source/controls/unocontrol.cxx
+++ b/toolkit/source/controls/unocontrol.cxx
@@ -94,27 +94,50 @@ static Sequence< OUString> lcl_ImplGetPropertyNames( const Reference< XMultiProp
return aNames;
}
-
-class VclListenerLock
+namespace
{
-private:
- VCLXWindow* m_pLockWindow;
-
-public:
- explicit VclListenerLock( VCLXWindow* _pLockWindow )
- : m_pLockWindow( _pLockWindow )
+VCLXWindow* GetParentSystemWindow(vcl::Window* pWindow)
+{
+ while (pWindow)
{
- if ( m_pLockWindow )
- m_pLockWindow->suspendVclEventListening( );
+ if (pWindow->IsSystemWindow())
+ break;
+
+ pWindow = pWindow->GetParent();
}
- ~VclListenerLock()
+
+ uno::Reference<awt::XWindow> xWindow = VCLUnoHelper::GetInterface(pWindow);
+ return VCLXWindow::GetImplementation(xWindow);
+}
+}
+
+VclListenerLock::VclListenerLock(VCLXWindow* _pLockWindow)
+ : m_pLockWindow(_pLockWindow)
+{
+ if (m_pLockWindow)
+ m_pLockWindow->suspendVclEventListening();
+}
+
+VclListenerLock::VclListenerLock(vcl::Window* pVclWindow, bool bSystemWindow)
+ : m_pLockWindow(nullptr)
+{
+ if (bSystemWindow)
+ m_pLockWindow = GetParentSystemWindow(pVclWindow);
+ else
{
- if ( m_pLockWindow )
- m_pLockWindow->resumeVclEventListening( );
+ uno::Reference<awt::XWindow> xWindow = VCLUnoHelper::GetInterface(pVclWindow);
+ m_pLockWindow = VCLXWindow::GetImplementation(xWindow);
}
- VclListenerLock(const VclListenerLock&) = delete;
- VclListenerLock& operator=(const VclListenerLock&) = delete;
-};
+
+ if (m_pLockWindow)
+ m_pLockWindow->suspendVclEventListening();
+}
+
+VclListenerLock::~VclListenerLock()
+{
+ if (m_pLockWindow)
+ m_pLockWindow->resumeVclEventListening();
+}
typedef ::std::map< OUString, sal_Int32 > MapString2Int;
struct UnoControl_Data