diff options
author | Neil <nyamatongwe@gmail.com> | 2017-03-07 22:20:45 +1100 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2017-03-07 22:20:45 +1100 |
commit | f60ab1f9516f12b5fccd81f2376f2aef42d83152 (patch) | |
tree | 3251922fba5b0c1281146f7a250fbb0fe5662eaa /gtk/ScintillaGTKAccessible.cxx | |
parent | 25acad3cbc9b56dd0f006e32c94d56824f1669db (diff) | |
download | scintilla-mirror-f60ab1f9516f12b5fccd81f2376f2aef42d83152.tar.gz |
Bug [#1910]. Accessibility support may be queried and, on GTK+, disabled.
Diffstat (limited to 'gtk/ScintillaGTKAccessible.cxx')
-rw-r--r-- | gtk/ScintillaGTKAccessible.cxx | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/gtk/ScintillaGTKAccessible.cxx b/gtk/ScintillaGTKAccessible.cxx index 4fcfcda99..001f2703f 100644 --- a/gtk/ScintillaGTKAccessible.cxx +++ b/gtk/ScintillaGTKAccessible.cxx @@ -788,6 +788,10 @@ void ScintillaGTKAccessible::AtkEditableTextIface::init(::AtkEditableTextIface * //~ iface->set_run_attributes = SetRunAttributes; } +bool ScintillaGTKAccessible::Enabled() const { + return sci->accessibilityEnabled == SC_ACCESSIBILITY_ENABLED; +} + // Callbacks void ScintillaGTKAccessible::UpdateCursor() { @@ -820,6 +824,10 @@ void ScintillaGTKAccessible::UpdateCursor() { } void ScintillaGTKAccessible::ChangeDocument(Document *oldDoc, Document *newDoc) { + if (!Enabled()) { + return; + } + if (oldDoc == newDoc) { return; } @@ -854,7 +862,15 @@ void ScintillaGTKAccessible::NotifyReadOnly() { #endif } +void ScintillaGTKAccessible::SetAccessibility() { + // Called by ScintillaGTK when application has enabled or disabled accessibility + character_offsets.resize(0); + character_offsets.push_back(0); +} + void ScintillaGTKAccessible::Notify(GtkWidget *, gint, SCNotification *nt) { + if (!Enabled()) + return; switch (nt->nmhdr.code) { case SCN_MODIFIED: { if (nt->modificationType & (SC_MOD_INSERTTEXT | SC_MOD_DELETETEXT)) { @@ -864,6 +880,13 @@ void ScintillaGTKAccessible::Notify(GtkWidget *, gint, SCNotification *nt) { character_offsets.resize(line + 1); } } + if (nt->modificationType & (SC_MOD_INSERTTEXT | SC_MOD_DELETETEXT)) { + // invalidate character offset cache if applicable + const Position line = sci->pdoc->LineFromPosition(nt->position); + if (character_offsets.size() > static_cast<size_t>(line + 1)) { + character_offsets.resize(line + 1); + } + } if (nt->modificationType & SC_MOD_INSERTTEXT) { int startChar = CharacterOffsetFromByteOffset(nt->position); int lengthChar = sci->pdoc->CountCharacters(nt->position, nt->position + nt->length); |