From 9526452f4d6e6688c34e71db34ef2c7beed1e92c Mon Sep 17 00:00:00 2001
From: cy <cy@FreeBSD.org>
Date: Sat, 10 Mar 2012 17:37:56 +0000
Subject: Fix backspace bug (Debian Bug#130199).

Assume maintainership.

Obtained from:  debian.org 004-backspace.dpatch
Feature safe:	yes
---
 devel/xxgdb/Makefile             |  4 +-
 devel/xxgdb/files/patch-dialog.c | 79 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 81 insertions(+), 2 deletions(-)
 create mode 100644 devel/xxgdb/files/patch-dialog.c

diff --git a/devel/xxgdb/Makefile b/devel/xxgdb/Makefile
index b9233ad43f79..7affdb25f8a1 100644
--- a/devel/xxgdb/Makefile
+++ b/devel/xxgdb/Makefile
@@ -7,12 +7,12 @@
 
 PORTNAME=	xxgdb
 PORTVERSION=	1.12
-PORTREVISION=	2
+PORTREVISION=	3
 CATEGORIES=	devel
 MASTER_SITES=	${MASTER_SITE_XCONTRIB}
 MASTER_SITE_SUBDIR=	utilities
 
-MAINTAINER=	ports@FreeBSD.org
+MAINTAINER=	cy@FreeBSD.org
 COMMENT=	An X window interface for gdb
 
 USE_IMAKE=	yes
diff --git a/devel/xxgdb/files/patch-dialog.c b/devel/xxgdb/files/patch-dialog.c
new file mode 100644
index 000000000000..e2999e17d66b
--- /dev/null
+++ b/devel/xxgdb/files/patch-dialog.c
@@ -0,0 +1,79 @@
+diff -urNad dialog.c dialog.c
+--- dialog.c	1995-06-20 00:15:13.000000000 +0200
++++ dialog.c	2008-05-16 17:31:45.000000000 +0200
+@@ -130,8 +130,8 @@
+     Cardinal	 	i;
+ 
+     textblock.firstPos = 0;
+-    textblock.length   = 0;
+-    textblock.ptr      = "";
++    textblock.length   = 1;
++    textblock.ptr      = " ";
+ 
+     pos = XawTextGetInsertionPoint(w); 
+     if (pos <= StartPos)
+@@ -142,6 +142,30 @@
+     XawTextSetInsertionPoint(w, i);
+ }
+ 
++/*  Erases the preceding word.
++ *  Simulates the action of the WERASE character (ctrl-W).
++ */
++/* ARGSUSED */
++void DeleteChar(w, event, params, num_params)
++    Widget w;
++    XEvent *event;
++    String *params;
++    Cardinal *num_params;
++{
++    XawTextBlock    	textblock;
++    XawTextPosition	pos;
++
++    textblock.firstPos = 0;
++    textblock.length   = 1;
++    textblock.ptr      = " ";
++
++    pos = XawTextGetInsertionPoint(w); 
++    if (pos > StartPos) {
++    	XawTextReplace(w, pos-1, pos, &textblock);
++    	XawTextSetInsertionPoint(w, pos-1);
++    }
++}
++
+ 
+ /*  Deletes the entire current input line.
+  *  simulates the action of the KILL character (ctrl-U).
+@@ -159,8 +183,8 @@
+     char		*s;
+ 
+     textblock.firstPos = 0;
+-    textblock.length   = 0;
+-    textblock.ptr      = "";
++    textblock.length   = 1;
++    textblock.ptr      = " ";
+ 
+     pos = XawTextGetInsertionPoint(w); 
+     if (w == dialogWindow) {
+@@ -307,6 +331,7 @@
+ 	{"SigQuit", 	(XtActionProc) SigQuit},
+ 	{"InsertSpace", (XtActionProc) InsertSpace},
+ 	{"Dispatch", 	(XtActionProc) Dispatch},
++	{"DeleteChar", 	(XtActionProc) DeleteChar},
+         {NULL, NULL}
+     };
+ 
+@@ -316,10 +341,10 @@
+  	Ctrl<Key>|:	SigQuit()\n\
+  	Ctrl<Key>W:	DeleteWord()\n\
+  	Ctrl<Key>U:	DeleteLine()\n\
+- 	Ctrl<Key>H:	InsertSpace() delete-previous-character()\n\
+- 	<Key>Delete:	InsertSpace() delete-previous-character()\n\
+- 	<Key>BackSpace:	InsertSpace() delete-previous-character()\n\
+- 	<Key>Return:	newline() Dispatch()\n\
++ 	Ctrl<Key>H:	DeleteChar()\n\
++ 	<Key>Delete:	DeleteChar()\n\
++ 	<Key>BackSpace:	DeleteChar()\n\
++ 	<Key>Return:	newline()Dispatch()\n\
+     ";
+ 
+     n = 0;
-- 
cgit