diff options
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); | 
