diff options
author | Caolán McNamara <caolanm@redhat.com> | 2014-02-19 12:26:47 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2014-02-19 15:32:00 +0000 |
commit | 49cecd8b41cac29cc9642944eaae5b5f63a1bd46 (patch) | |
tree | 133343199ab3a5f06e7ea1b858a88125466bcc5a /vcl | |
parent | e77819f578b4b01314359380e6f115bacb9967f5 (diff) |
Related: fdo#74242 hook up a selection and caret change for multiline edits
a) split the textengine selection changed broadcast into a text selection changed
and text caret change event
b) handle both in existing places that handled the text selection event
c) listen for them in VclMultiLineEdit and translate to
VCLEVENT_EDIT_SELECTIONCHANGED VCLEVENT_EDIT_CARETCHANGED events
d) profit from the VCLEVENT_EDIT_SELECTIONCHANGED and
VCLEVENT_EDIT_CARETCHANGED handling in
accessibility/source/standard/vclxaccessibleedit.cxx for VCLXAccessibleEdits
Change-Id: I09187e76ae4eb189ee9469e388374154087faf80
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/control/edit.cxx | 6 | ||||
-rw-r--r-- | vcl/source/edit/textview.cxx | 18 | ||||
-rw-r--r-- | vcl/source/edit/vclmedit.cxx | 18 |
3 files changed, 37 insertions, 5 deletions
diff --git a/vcl/source/control/edit.cxx b/vcl/source/control/edit.cxx index f923c51e32d3..cd75e6b46009 100644 --- a/vcl/source/control/edit.cxx +++ b/vcl/source/control/edit.cxx @@ -2642,13 +2642,13 @@ void Edit::ImplSetSelection( const Selection& rSelection, sal_Bool bPaint ) ImplInvalidateOrRepaint(); ImplShowCursor(); - sal_Bool bCaret = sal_False, bSelection = sal_False; + bool bCaret = false, bSelection = false; long nB=aNew.Max(), nA=aNew.Min(),oB=aTemp.Max(), oA=aTemp.Min(); long nGap = nB-nA, oGap = oB-oA; if (nB != oB) - bCaret = sal_True; + bCaret = true; if (nGap != 0 || oGap != 0) - bSelection = sal_True; + bSelection = true; if (bSelection) { diff --git a/vcl/source/edit/textview.cxx b/vcl/source/edit/textview.cxx index cd5a9b3907c3..53d49cc0138c 100644 --- a/vcl/source/edit/textview.cxx +++ b/vcl/source/edit/textview.cxx @@ -463,10 +463,24 @@ void TextView::ImpHighlight( const TextSelection& rSel ) void TextView::ImpSetSelection( const TextSelection& rSelection ) { - if ( rSelection != mpImpl->maSelection ) + if (rSelection != mpImpl->maSelection) { + bool bCaret = false, bSelection = false; + const TextPaM &rEnd = rSelection.GetEnd(); + const TextPaM &rOldEnd = mpImpl->maSelection.GetEnd(); + bool bGap = rSelection.HasRange(), bOldGap = mpImpl->maSelection.HasRange(); + if (rEnd != rOldEnd) + bCaret = true; + if (bGap || bOldGap) + bSelection = true; + mpImpl->maSelection = rSelection; - mpImpl->mpTextEngine->Broadcast( TextHint( TEXT_HINT_VIEWSELECTIONCHANGED ) ); + + if (bSelection) + mpImpl->mpTextEngine->Broadcast(TextHint(TEXT_HINT_VIEWSELECTIONCHANGED)); + + if (bCaret) + mpImpl->mpTextEngine->Broadcast(TextHint(TEXT_HINT_VIEWCARETCHANGED)); } } diff --git a/vcl/source/edit/vclmedit.cxx b/vcl/source/edit/vclmedit.cxx index c468468013a1..ca5e548418f5 100644 --- a/vcl/source/edit/vclmedit.cxx +++ b/vcl/source/edit/vclmedit.cxx @@ -561,6 +561,14 @@ void ImpVclMEdit::Notify( SfxBroadcaster&, const SfxHint& rHint ) ImpUpdateSrollBarVis(pVclMultiLineEdit->GetStyle()); pVclMultiLineEdit->Modify(); } + else if( rTextHint.GetId() == TEXT_HINT_VIEWSELECTIONCHANGED ) + { + pVclMultiLineEdit->SelectionChanged(); + } + else if( rTextHint.GetId() == TEXT_HINT_VIEWCARETCHANGED ) + { + pVclMultiLineEdit->CaretChanged(); + } } } @@ -1053,6 +1061,16 @@ void VclMultiLineEdit::Modify() pUpdateDataTimer->Start(); } +void VclMultiLineEdit::SelectionChanged() +{ + CallEventListeners(VCLEVENT_EDIT_SELECTIONCHANGED); +} + +void VclMultiLineEdit::CaretChanged() +{ + CallEventListeners(VCLEVENT_EDIT_CARETCHANGED); +} + IMPL_LINK_NOARG(VclMultiLineEdit, ImpUpdateDataHdl) { UpdateData(); |