summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2017-08-13 13:37:28 +0200
committerAdolfo Jayme Barrientos <fitojb@ubuntu.com>2017-08-22 22:57:21 +0200
commit28ed0ea234a80474065592726e05967540e8db2e (patch)
tree3a9b298d1cf36c5cc893c2f37bdd70fcdc9b29c0
parentf6849191cdcd980b35f77707ca3bebf89a0c6b53 (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/41151 Reviewed-by: Michael Stahl <mstahl@redhat.com> Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com> Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com> Tested-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
-rw-r--r--editeng/source/editeng/impedit.cxx8
-rw-r--r--include/vcl/settings.hxx2
-rw-r--r--sc/source/ui/app/inputwin.cxx9
-rw-r--r--sc/source/ui/view/gridwin.cxx11
-rw-r--r--vcl/source/control/edit.cxx7
-rw-r--r--vcl/source/edit/textview.cxx10
-rw-r--r--vcl/source/window/winproc.cxx2
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
{