Kaydet (Commit) acebc2d6 authored tarafından Colomban Wendling's avatar Colomban Wendling

scintilla: Accessible: emit the text deletion signal before deletion

This allows the accessibility layer to request detail, such as which
characters have been deleted.  ATK will query the deleted range to
report the data that was removed, so it must still be available for
the query to give a correct answer.
So, emit the signal in BEFOREDELETE instead of DELETETEXT.

X-Scintilla-Bug-URL: https://sourceforge.net/p/scintilla/bugs/2095/
X-Scintilla-Commit-ID: 0a937b4c0b2be02042473baed62543ff73d90807
üst a587385d
......@@ -156,7 +156,6 @@ ScintillaGTKAccessible *ScintillaGTKAccessible::FromAccessible(GtkAccessible *ac
ScintillaGTKAccessible::ScintillaGTKAccessible(GtkAccessible *accessible_, GtkWidget *widget_) :
accessible(accessible_),
sci(ScintillaGTK::FromWidget(widget_)),
deletionLengthChar(0),
old_pos(-1) {
SetAccessibility(true);
g_signal_connect(widget_, "sci-notify", G_CALLBACK(SciNotify), this);
......@@ -882,14 +881,11 @@ void ScintillaGTKAccessible::Notify(GtkWidget *, gint, SCNotification *nt) {
UpdateCursor();
}
if (nt->modificationType & SC_MOD_BEFOREDELETE) {
// We cannot compute the deletion length in DELETETEXT as it requires accessing the
// buffer, so that the character are still present. So, we cache the value here,
// and use it in DELETETEXT that fires quickly after.
deletionLengthChar = sci->pdoc->CountCharacters(nt->position, nt->position + nt->length);
int startChar = CharacterOffsetFromByteOffset(nt->position);
int lengthChar = sci->pdoc->CountCharacters(nt->position, nt->position + nt->length);
g_signal_emit_by_name(accessible, "text-changed::delete", startChar, lengthChar);
}
if (nt->modificationType & SC_MOD_DELETETEXT) {
int startChar = CharacterOffsetFromByteOffset(nt->position);
g_signal_emit_by_name(accessible, "text-changed::delete", startChar, deletionLengthChar);
UpdateCursor();
}
if (nt->modificationType & SC_MOD_CHANGESTYLE) {
......
......@@ -18,8 +18,6 @@ private:
GtkAccessible *accessible;
ScintillaGTK *sci;
// cached length of the deletion, in characters (see Notify())
int deletionLengthChar;
// local state for comparing
Sci::Position old_pos;
std::vector<SelectionRange> old_sels;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment