diff options
author | Caolán McNamara <caolanm@redhat.com> | 2014-10-07 16:52:11 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2014-10-07 16:55:08 +0100 |
commit | 4b7b013491ddf78b4555e17e89b95f085e2fb34f (patch) | |
tree | b15527fe35f9dfd6ec182cabd9e51d9193ee7460 /editeng | |
parent | 63e6cbc3180047000787a9071513152fdd9ce942 (diff) |
Resolves: fdo#44998 crash when opening context menu of a field
If you right click on a field in an inactive text box, then a mouse down,
context command, mouse up sequence is sent. The mouse up is supposed to be
captured by the context menu here. But it doesn't because the mouse down in
draw sends an artificial mouse down to the editengine which eventually sets up
a MouseCapture window so the context menu doesn't get considered (because it
occurs before the capture window is released) so the mouse up gets send to sd
while the context menu is up and that causes all sorts of havoc.
Change-Id: If3b7c501586f8561be484d0828c630d84644f770
Diffstat (limited to 'editeng')
-rw-r--r-- | editeng/source/editeng/editview.cxx | 5 | ||||
-rw-r--r-- | editeng/source/editeng/impedit.cxx | 5 | ||||
-rw-r--r-- | editeng/source/editeng/impedit.hxx | 2 | ||||
-rw-r--r-- | editeng/source/editeng/impedit2.cxx | 5 | ||||
-rw-r--r-- | editeng/source/outliner/outlvw.cxx | 6 |
5 files changed, 22 insertions, 1 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 ); |