From 5a9f941bc10507eab2e352978bd7f35ca26920dc Mon Sep 17 00:00:00 2001 From: Neil Date: Sat, 14 May 2016 10:32:49 +1000 Subject: Post a caret moved accessibility event in Editor::MovedCaret so that screen readers like NVDA will speak when extending the selection with a Shift+Down key combination scrolls but does not move the caret position relative to the screen. --- doc/ScintillaHistory.html | 5 +++++ src/Editor.cxx | 4 ++++ src/Editor.h | 1 + win32/ScintillaWin.cxx | 5 +++++ 4 files changed, 15 insertions(+) diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html index eb8127af4..517d3ae6a 100644 --- a/doc/ScintillaHistory.html +++ b/doc/ScintillaHistory.html @@ -529,6 +529,11 @@ Fixed bug on Win32 that allowed resizing autocompletion from bottom when it was located above the caret. +
  • + On Win32, when using a screen reader and selecting text using Shift+Arrow, + fix bug when scrolling made the caret stay at the same screen location + so the screen reader did not speak the added or removed selection. +
  • Release 3.6.5 diff --git a/src/Editor.cxx b/src/Editor.cxx index 9a41bab09..125399622 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -828,6 +828,7 @@ void Editor::MovedCaret(SelectionPosition newPos, SelectionPosition previousPos, } ShowCaretAtCurrentPosition(); + NotifyCaretMove(); ClaimSelection(); SetHoverIndicatorPosition(sel.MainCaret()); @@ -1437,6 +1438,9 @@ void Editor::InvalidateCaret() { UpdateSystemCaret(); } +void Editor::NotifyCaretMove() { +} + void Editor::UpdateSystemCaret() { } diff --git a/src/Editor.h b/src/Editor.h index c1545d34b..93a86fa39 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -365,6 +365,7 @@ protected: // ScintillaBase subclass needs access to much of Editor void DropCaret(); void CaretSetPeriod(int period); void InvalidateCaret(); + virtual void NotifyCaretMove(); virtual void UpdateSystemCaret(); bool Wrapping() const; diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index 3c7cd45be..3ed249ca0 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -325,6 +325,7 @@ class ScintillaWin : virtual void SetTrackMouseLeaveEvent(bool on); virtual bool PaintContains(PRectangle rc); virtual void ScrollText(int linesToMove); + virtual void NotifyCaretMove(); virtual void UpdateSystemCaret(); virtual void SetVerticalScrollPos(); virtual void SetHorizontalScrollPos(); @@ -1838,6 +1839,10 @@ void ScintillaWin::ScrollText(int /* linesToMove */) { UpdateSystemCaret(); } +void ScintillaWin::NotifyCaretMove() { + NotifyWinEvent(EVENT_OBJECT_LOCATIONCHANGE, MainHWND(), OBJID_CARET, CHILDID_SELF); +} + void ScintillaWin::UpdateSystemCaret() { if (hasFocus) { if (HasCaretSizeChanged()) { -- cgit v1.2.3