diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2017-08-13 13:37:28 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2017-08-17 13:54:37 +0200 |
commit | a0636486e54bf9c8cf35657368e2779792da8b6d (patch) | |
tree | 5a0f5947160c5dad32ee5d81f3bd4524d32c4471 | |
parent | a407285747c65894bc858c4aa722a24e57caca31 (diff) |
tdf#110988 Middle click does not paste primary selection
regression from commit 65b7b6322b662785bf032e66c76abc36c9a2bb0e
"loplugin:unusedenumconstants read-only constants in vcl"
Reviewed-on: https://gerrit.libreoffice.org/41111
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
(cherry picked from commit 5b3b0a91edc4c468c7c9c132cd066c0d25de9706)
Change-Id: I262dd4c9cd1dc6eca82521f5fd9fbfc952fb7745
Reviewed-on: https://gerrit.libreoffice.org/41133
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r-- | editeng/source/editeng/impedit.cxx | 8 | ||||
-rw-r--r-- | include/vcl/settings.hxx | 2 | ||||
-rw-r--r-- | sc/source/ui/app/inputwin.cxx | 9 | ||||
-rw-r--r-- | sc/source/ui/view/gridwin.cxx | 11 | ||||
-rw-r--r-- | vcl/source/control/edit.cxx | 7 | ||||
-rw-r--r-- | vcl/source/edit/textview.cxx | 10 | ||||
-rw-r--r-- | vcl/source/window/winproc.cxx | 2 |
7 files changed, 44 insertions, 5 deletions
diff --git a/editeng/source/editeng/impedit.cxx b/editeng/source/editeng/impedit.cxx index 10c7e9650fba..dcecf17887a6 100644 --- a/editeng/source/editeng/impedit.cxx +++ b/editeng/source/editeng/impedit.cxx @@ -1285,7 +1285,13 @@ bool ImpEditView::MouseButtonUp( const MouseEvent& rMouseEvent ) nExtraCursorFlags = GetCursorFlags::NONE; bClickedInSelection = false; - if ( rMouseEvent.IsLeft() && GetEditSelection().HasRange() ) + if ( rMouseEvent.IsMiddle() && !bReadOnly && + ( GetWindow()->GetSettings().GetMouseSettings().GetMiddleButtonAction() == MouseMiddleButtonAction::PasteSelection ) ) + { + Reference<css::datatransfer::clipboard::XClipboard> aClipBoard(GetWindow()->GetPrimarySelection()); + Paste( aClipBoard ); + } + else if ( rMouseEvent.IsLeft() && GetEditSelection().HasRange() ) { Reference<css::datatransfer::clipboard::XClipboard> aClipBoard(GetWindow()->GetPrimarySelection()); CutCopy( aClipBoard, false ); diff --git a/include/vcl/settings.hxx b/include/vcl/settings.hxx index 8dcaa4ceacfc..097605e7c251 100644 --- a/include/vcl/settings.hxx +++ b/include/vcl/settings.hxx @@ -79,7 +79,7 @@ namespace o3tl enum class MouseMiddleButtonAction { - Nothing, AutoScroll + Nothing, AutoScroll, PasteSelection }; enum class MouseWheelBehaviour diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx index dcc5ce7ec654..243783490cbb 100644 --- a/sc/source/ui/app/inputwin.cxx +++ b/sc/source/ui/app/inputwin.cxx @@ -1349,7 +1349,14 @@ void ScTextWnd::MouseButtonUp( const MouseEvent& rMEvt ) if (mpEditView) if (mpEditView->MouseButtonUp( rMEvt )) { - SC_MOD()->InputSelection( mpEditView.get() ); + if ( rMEvt.IsMiddle() && + GetSettings().GetMouseSettings().GetMiddleButtonAction() == MouseMiddleButtonAction::PasteSelection ) + { + // EditView may have pasted from selection + SC_MOD()->InputChanged( mpEditView.get() ); + } + else + SC_MOD()->InputSelection( mpEditView.get() ); } } diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 22a80c561b7a..ef859a001a6a 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -1823,7 +1823,16 @@ void ScGridWindow::MouseButtonUp( const MouseEvent& rMEvt ) SCROW nEditRow; pViewData->GetEditView( eWhich, pEditView, nEditCol, nEditRow ); pEditView->MouseButtonUp( rMEvt ); - pScMod->InputSelection( pEditView ); // parentheses etc. + + if ( rMEvt.IsMiddle() && + GetSettings().GetMouseSettings().GetMiddleButtonAction() == MouseMiddleButtonAction::PasteSelection ) + { + // EditView may have pasted from selection + pScMod->InputChanged( pEditView ); + } + else + pScMod->InputSelection( pEditView ); // parentheses etc. + pViewData->GetView()->InvalidateAttribs(); rBindings.Invalidate( SID_HYPERLINK_GETLINK ); bEEMouse = false; diff --git a/vcl/source/control/edit.cxx b/vcl/source/control/edit.cxx index 406cf2d9faba..d1f522f5f5fa 100644 --- a/vcl/source/control/edit.cxx +++ b/vcl/source/control/edit.cxx @@ -1370,6 +1370,13 @@ void Edit::MouseButtonUp( const MouseEvent& rMEvt ) ImplSetCursorPos( nCharPos, false ); mbClickedInSelection = false; } + else if ( rMEvt.IsMiddle() && !mbReadOnly && + ( GetSettings().GetMouseSettings().GetMiddleButtonAction() == MouseMiddleButtonAction::PasteSelection ) ) + { + css::uno::Reference<css::datatransfer::clipboard::XClipboard> aSelection(Window::GetPrimarySelection()); + ImplPaste( aSelection ); + ImplModified(); + } } void Edit::Tracking( const TrackingEvent& rTEvt ) diff --git a/vcl/source/edit/textview.cxx b/vcl/source/edit/textview.cxx index c6cb9618e4cf..f3c1b1a47b3c 100644 --- a/vcl/source/edit/textview.cxx +++ b/vcl/source/edit/textview.cxx @@ -736,7 +736,15 @@ void TextView::MouseButtonUp( const MouseEvent& rMouseEvent ) mpImpl->mbClickedInSelection = false; mpImpl->mnTravelXPos = TRAVEL_X_DONTKNOW; mpImpl->mpSelEngine->SelMouseButtonUp( rMouseEvent ); - if ( rMouseEvent.IsLeft() && GetSelection().HasRange() ) + if ( rMouseEvent.IsMiddle() && !IsReadOnly() && + ( GetWindow()->GetSettings().GetMouseSettings().GetMiddleButtonAction() == MouseMiddleButtonAction::PasteSelection ) ) + { + css::uno::Reference<css::datatransfer::clipboard::XClipboard> aSelection(GetWindow()->GetPrimarySelection()); + Paste( aSelection ); + if ( mpImpl->mpTextEngine->IsModified() ) + mpImpl->mpTextEngine->Broadcast( TextHint( SfxHintId::TextModified ) ); + } + else if ( rMouseEvent.IsLeft() && GetSelection().HasRange() ) { css::uno::Reference<css::datatransfer::clipboard::XClipboard> aSelection(GetWindow()->GetPrimarySelection()); Copy( aSelection ); diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx index c44b57db20b5..b37395ad9bd0 100644 --- a/vcl/source/window/winproc.cxx +++ b/vcl/source/window/winproc.cxx @@ -761,6 +761,8 @@ bool ImplHandleMouseEvent( const VclPtr<vcl::Window>& xWindow, MouseNotifyEvent MouseMiddleButtonAction nMiddleAction = pChild->GetSettings().GetMouseSettings().GetMiddleButtonAction(); if ( nMiddleAction == MouseMiddleButtonAction::AutoScroll ) bRet = !ImplCallCommand( pChild, CommandEventId::StartAutoScroll, nullptr, true, &aChildPos ); + else if ( nMiddleAction == MouseMiddleButtonAction::PasteSelection ) + bRet = !ImplCallCommand( pChild, CommandEventId::PasteSelection, nullptr, true, &aChildPos ); } else { |