From cd916794f0569dae37121d8eea77464e12e8e0f4 Mon Sep 17 00:00:00 2001
From: Vadim Zeitlin <vadim@wxwidgets.org>
Date: Thu, 2 Jan 2003 00:07:13 +0000
Subject: [PATCH] made generic EmulateKeyPress() to work with Delete and
 BackSpace (closes bug 658409)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18497 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 docs/changes.txt       |  4 ++--
 docs/latex/wx/text.tex |  3 +++
 src/common/textcmn.cpp | 20 ++++++++++++++++++++
 3 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/docs/changes.txt b/docs/changes.txt
index feb0423315..38e51842b4 100644
--- a/docs/changes.txt
+++ b/docs/changes.txt
@@ -18,6 +18,7 @@ Unix:
 wxGTK:
 
 - fixed wxMenu::Remove (John Skiff and Benjamin Williams)
+- made wxTextCtrl::EmulateKeyPress() work for Delete and Backspace
 
 wxMSW:
 
@@ -27,8 +28,7 @@ wxMSW:
 
 All:
 
-- Implemented GetEditControl for wxGenericTreeCtrl (Peter
-  Stieber)
+- Implemented GetEditControl for wxGenericTreeCtrl (Peter Stieber)
 - Improved contrib/utils/convertrc parsing (David J. Cooke)
 - Fixed handling of URLs and filenames in wxFileSystem
 - Implemented alignment for wxGrid bool editor and renderer
diff --git a/docs/latex/wx/text.tex b/docs/latex/wx/text.tex
index 32527801c3..47d21ad97d 100644
--- a/docs/latex/wx/text.tex
+++ b/docs/latex/wx/text.tex
@@ -433,6 +433,9 @@ inserted if the given key event had occured in the text control. The
 {\it event} object should be the same as the one passed to {\tt EVT\_KEY\_DOWN}
 handler previously by wxWindows.
 
+Please note that this function doesn't currently work correctly for all keys
+under any platform but MSW.
+
 \wxheading{Return value}
 
 {\tt TRUE} if the event resulted in a change to the control, {\tt FALSE}
diff --git a/src/common/textcmn.cpp b/src/common/textcmn.cpp
index de9a68979c..c7bb1f7f46 100644
--- a/src/common/textcmn.cpp
+++ b/src/common/textcmn.cpp
@@ -327,6 +327,26 @@ bool wxTextCtrlBase::EmulateKeyPress(const wxKeyEvent& event)
             ch = _T('/');
             break;
 
+        case WXK_DELETE:
+        case WXK_NUMPAD_DELETE:
+            // delete the character at cursor
+            {
+                const long pos = GetInsertionPoint(),
+                           last = GetLastPosition();
+                if ( pos < last )
+                    Remove(pos, pos + 1);
+            }
+            break;
+
+        case WXK_BACK:
+            // delete the character before the cursor
+            {
+                const long pos = GetInsertionPoint();
+                if ( pos > 0 )
+                    Remove(pos - 1, pos);
+            }
+            break;
+
         default:
             if ( keycode < 256 && keycode >= 0 && wxIsprint(keycode) )
             {
-- 
2.47.2

