summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--editeng/source/editeng/editview.cxx5
-rw-r--r--editeng/source/editeng/impedit.cxx5
-rw-r--r--editeng/source/editeng/impedit.hxx2
-rw-r--r--editeng/source/editeng/impedit2.cxx5
-rw-r--r--editeng/source/outliner/outlvw.cxx6
-rw-r--r--include/editeng/editview.hxx1
-rw-r--r--include/editeng/outliner.hxx1
-rw-r--r--include/vcl/seleng.hxx7
-rw-r--r--sd/source/ui/view/drviews4.cxx3
-rw-r--r--vcl/source/window/seleng.cxx9
10 files changed, 42 insertions, 2 deletions
diff --git a/editeng/source/editeng/editview.cxx b/editeng/source/editeng/editview.cxx
index f972ad75cecb..d86ee0ab3264 100644
--- a/editeng/source/editeng/editview.cxx
+++ b/editeng/source/editeng/editview.cxx
@@ -365,6 +365,11 @@ bool EditView::MouseButtonUp( const MouseEvent& rMouseEvent )
return pImpEditView->MouseButtonUp( rMouseEvent );
}
+void EditView::ReleaseMouse()
+{
+ return pImpEditView->ReleaseMouse();
+}
+
bool EditView::MouseButtonDown( const MouseEvent& rMouseEvent )
{
return pImpEditView->MouseButtonDown( rMouseEvent );
diff --git a/editeng/source/editeng/impedit.cxx b/editeng/source/editeng/impedit.cxx
index 1c7ee7c50bfb..5e112874ecd4 100644
--- a/editeng/source/editeng/impedit.cxx
+++ b/editeng/source/editeng/impedit.cxx
@@ -1064,6 +1064,11 @@ bool ImpEditView::MouseButtonUp( const MouseEvent& rMouseEvent )
return pEditEngine->pImpEditEngine->MouseButtonUp( rMouseEvent, GetEditViewPtr() );
}
+void ImpEditView::ReleaseMouse()
+{
+ pEditEngine->pImpEditEngine->ReleaseMouse();
+}
+
bool ImpEditView::MouseButtonDown( const MouseEvent& rMouseEvent )
{
pEditEngine->CheckIdleFormatter(); // If fast typing and mouse button downs
diff --git a/editeng/source/editeng/impedit.hxx b/editeng/source/editeng/impedit.hxx
index 4e93d9322d4e..68ef6edcf255 100644
--- a/editeng/source/editeng/impedit.hxx
+++ b/editeng/source/editeng/impedit.hxx
@@ -288,6 +288,7 @@ public:
bool MouseButtonUp( const MouseEvent& rMouseEvent );
bool MouseButtonDown( const MouseEvent& rMouseEvent );
+ void ReleaseMouse();
bool MouseMove( const MouseEvent& rMouseEvent );
void Command( const CommandEvent& rCEvt );
@@ -728,6 +729,7 @@ public:
bool MouseButtonUp( const MouseEvent& rMouseEvent, EditView* pView );
bool MouseButtonDown( const MouseEvent& rMouseEvent, EditView* pView );
+ void ReleaseMouse();
bool MouseMove( const MouseEvent& rMouseEvent, EditView* pView );
void Command( const CommandEvent& rCEvt, EditView* pView );
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx
index fd3f7a001142..f1b0fbc76b97 100644
--- a/editeng/source/editeng/impedit2.cxx
+++ b/editeng/source/editeng/impedit2.cxx
@@ -586,6 +586,11 @@ bool ImpEditEngine::MouseButtonUp( const MouseEvent& rMEvt, EditView* pView )
return true;
}
+void ImpEditEngine::ReleaseMouse()
+{
+ GetSelEngine().ReleaseMouse();
+}
+
bool ImpEditEngine::MouseMove( const MouseEvent& rMEvt, EditView* pView )
{
// MouseMove is called directly after ShowQuickHelp()!
diff --git a/editeng/source/outliner/outlvw.cxx b/editeng/source/outliner/outlvw.cxx
index c0d2d98fe083..bc0aeedead0d 100644
--- a/editeng/source/outliner/outlvw.cxx
+++ b/editeng/source/outliner/outlvw.cxx
@@ -51,7 +51,6 @@ using namespace ::com::sun::star;
OutlinerView::OutlinerView( Outliner* pOut, vcl::Window* pWin )
{
-
pOwner = pOut;
pEditView = new EditView( pOut->pEditEngine, pWin );
@@ -363,6 +362,11 @@ bool OutlinerView::MouseButtonUp( const MouseEvent& rMEvt )
return pEditView->MouseButtonUp( rMEvt );
}
+void OutlinerView::ReleaseMouse()
+{
+ pEditView->ReleaseMouse();
+}
+
void OutlinerView::ImpToggleExpand( Paragraph* pPara )
{
sal_Int32 nPara = pOwner->pParaList->GetAbsPos( pPara );
diff --git a/include/editeng/editview.hxx b/include/editeng/editview.hxx
index 176de82f65e5..cf26a6250b68 100644
--- a/include/editeng/editview.hxx
+++ b/include/editeng/editview.hxx
@@ -140,6 +140,7 @@ public:
bool MouseButtonUp( const MouseEvent& rMouseEvent );
bool MouseButtonDown( const MouseEvent& rMouseEvent );
+ void ReleaseMouse();
bool MouseMove( const MouseEvent& rMouseEvent );
void Command( const CommandEvent& rCEvt );
diff --git a/include/editeng/outliner.hxx b/include/editeng/outliner.hxx
index ac5f18b6ffab..932cc9f19a8b 100644
--- a/include/editeng/outliner.hxx
+++ b/include/editeng/outliner.hxx
@@ -214,6 +214,7 @@ public:
bool PostKeyEvent( const KeyEvent& rKEvt, vcl::Window* pFrameWin = NULL );
bool MouseButtonDown( const MouseEvent& );
bool MouseButtonUp( const MouseEvent& );
+ void ReleaseMouse();
bool MouseMove( const MouseEvent& );
void ShowCursor( bool bGotoCursor = true );
diff --git a/include/vcl/seleng.hxx b/include/vcl/seleng.hxx
index afe30c39a87a..d0da0e89148f 100644
--- a/include/vcl/seleng.hxx
+++ b/include/vcl/seleng.hxx
@@ -100,6 +100,13 @@ public:
bool SelMouseButtonDown( const MouseEvent& rMEvt );
bool SelMouseButtonUp( const MouseEvent& rMEvt );
bool SelMouseMove( const MouseEvent& rMEvt );
+ //SelMouseButtonDown captures mouse events, SelMouseButtonUp
+ //releases the capture. If you need to release the mouse
+ //capture after SelMouseButtonDown but before
+ //SelMouseButtonUp, e.g. to allow events to go to a
+ //context menu via "Command" which is delivered after
+ //mouse down but before mouse up, then use this
+ void ReleaseMouse();
// Keyboard
void CursorPosChanging( bool bShift, bool bMod1 );
diff --git a/sd/source/ui/view/drviews4.cxx b/sd/source/ui/view/drviews4.cxx
index dbe9323a7f33..e92efea8be57 100644
--- a/sd/source/ui/view/drviews4.cxx
+++ b/sd/source/ui/view/drviews4.cxx
@@ -541,6 +541,9 @@ void DrawViewShell::Command(const CommandEvent& rCEvt, ::sd::Window* pWin)
eLanguage = pOLV->GetOutliner()->GetLanguage( aSelection.nStartPara, aSelection.nStartPos );
}
+ //fdo#44998 if the outliner has captured the mouse events release the lock
+ //so the SdFieldPopup can get them
+ pOLV->ReleaseMouse();
SdFieldPopup aFieldPopup( pFldItem->GetField(), eLanguage );
if ( rCEvt.IsMouseEvent() )
diff --git a/vcl/source/window/seleng.cxx b/vcl/source/window/seleng.cxx
index 63569289ae33..b9aa184d761a 100644
--- a/vcl/source/window/seleng.cxx
+++ b/vcl/source/window/seleng.cxx
@@ -244,7 +244,7 @@ bool SelectionEngine::SelMouseButtonUp( const MouseEvent& rMEvt )
if( !rMEvt.IsRight() )
{
- pWin->ReleaseMouse();
+ ReleaseMouse();
}
if( (nFlags & SELENG_WAIT_UPEVT) && !(nFlags & SELENG_CMDEVT) &&
@@ -276,6 +276,13 @@ bool SelectionEngine::SelMouseButtonUp( const MouseEvent& rMEvt )
return true;
}
+void SelectionEngine::ReleaseMouse()
+{
+ if (!pWin)
+ return;
+ pWin->ReleaseMouse();
+}
+
bool SelectionEngine::SelMouseMove( const MouseEvent& rMEvt )
{