$OpenBSD: patch-x_c,v 1.3 2002/09/15 07:29:55 fgsch Exp $
--- x.c.orig	Thu Sep 12 04:31:03 2002
+++ x.c	Sun Sep 15 03:52:31 2002
@@ -168,6 +168,20 @@ x_hash_table[X_HASH_TABLE_SIZE];
 
 static int flush_in_progress=0;
 
+static void x_do_paste(struct graphics_device* gd)
+{
+	int num=0;
+	unsigned char *buffer,*p;
+				
+	buffer=XFetchBytes(x_display,&num);
+	for (p=buffer;num>0;num--,p++)
+	{
+		if (*p==10)gd->keyboard_handler(gd,KBD_ENTER,0);
+		else
+			if (*p>=32)gd->keyboard_handler(gd,*p,0);
+	}
+	if (buffer)XFree(buffer);
+}
 
 static void x_do_flush(void *ignore)
 {
@@ -598,6 +612,11 @@ static void x_process_events(void *data)
 				gd=x_find_gd(&(event.xkey.window));
 				if (!gd)break;
 				x_translate_key((XKeyEvent*)(&event),&k,&f);
+				if (k == KBD_INS && f == KBD_SHIFT)
+				{
+					x_do_paste(gd);
+					return;
+				}
 				gd->keyboard_handler(gd,k,f);
 			}
 			break;
@@ -686,21 +705,8 @@ static void x_process_events(void *data)
 
 					case 2:
 					a=B_MIDDLE;
-					if (event.xbutton.state & ShiftMask) /* paste */
-					{
-						int num=0;
-						unsigned char *buffer,*p;
-						
-						buffer=XFetchBytes(x_display,&num);
-						for (p=buffer;num>0;num--,p++)
-						{
-							if (*p==10)gd->keyboard_handler(gd,KBD_ENTER,0);
-							else
-								if (*p>=32)gd->keyboard_handler(gd,*p,0);
-						}
-						if (buffer)XFree(buffer);
-						return;
-					}
+ 					x_do_paste(gd);
+ 					return;
 					break;
 
 					case 4:
