+ if (event.GetEventType() == wxEVT_KEY_DOWN)
+ {
+ // Must process this before translation, otherwise it's translated into a WXK_DELETE event.
+ if (event.CmdDown() && event.GetKeyCode() == WXK_BACK)
+ {
+ BeginBatchUndo(_("Delete Text"));
+
+ long newPos = m_caretPosition;
+
+ DeleteSelectedContent(& newPos);
+
+ // Submit range in character positions, which are greater than caret positions,
+ // so subtract 1 for deleted character and add 1 for conversion to character position.
+ if (newPos > -1)
+ {
+ bool processed = false;
+ if (event.CmdDown())
+ {
+ long pos = wxRichTextCtrl::FindNextWordPosition(-1);
+ if (pos != -1 && (pos < newPos))
+ {
+ GetBuffer().DeleteRangeWithUndo(wxRichTextRange(pos+1, newPos), this);
+ processed = true;
+ }
+ }
+
+ if (!processed)
+ GetBuffer().DeleteRangeWithUndo(wxRichTextRange(newPos, newPos), this);
+ }
+
+ EndBatchUndo();
+
+ if (GetLastPosition() == -1)
+ {
+ GetBuffer().Reset();
+
+ m_caretPosition = -1;
+ PositionCaret();
+ SetDefaultStyleToCursorStyle();
+ }
+
+ ScrollIntoView(m_caretPosition, WXK_LEFT);
+
+ wxRichTextEvent cmdEvent(
+ wxEVT_COMMAND_RICHTEXT_DELETE,
+ GetId());
+ cmdEvent.SetEventObject(this);
+ cmdEvent.SetFlags(flags);
+ cmdEvent.SetPosition(m_caretPosition+1);
+ GetEventHandler()->ProcessEvent(cmdEvent);
+
+ Update();
+ }
+ else
+ event.Skip();
+
+ return;
+ }
+