shithub: drawterm

Download patch

ref: 40db9d5361e9283b53c368eca2f66f0db32cbdd9
parent: fad4eb92fbe9bed64060b1b7958d953c6ed67267
author: 23hiro <23hiro@gmail.com>
date: Sun Apr 10 19:30:20 EDT 2016

gux-x11: Alt key: if alt was pressed during focusout send a second alt to get out of composition mode on focusin.

--- a/gui-x11/x11.c	Wed Apr  6 17:18:03 2016
+++ b/gui-x11/x11.c	Sun Apr 10 19:30:20 2016
@@ -129,6 +129,7 @@
 static uchar			map7to8[128][2];
 static Colormap			xcmap;		/* Default shared colormap  */
 
+static int	focusarm; /* on focusin undo alt when pressed during focus out by sending second alt */
 extern int mousequeue;
 
 /* for copy/paste, lifted from plan9ports */
@@ -302,6 +303,9 @@
 		Button4MotionMask|
 		Button5MotionMask|
 		ExposureMask|
+		EnterWindowMask|
+		LeaveWindowMask|
+		FocusChangeMask|
 		StructureNotifyMask;
 
 	XSelectInput(xkmcon, xdrawable, mask);
@@ -729,6 +733,13 @@
 {
 	KeySym k;
 
+	if(e->xany.type == FocusIn && focusarm){
+		focusarm=0;
+		kbdkey(Kalt, 0);
+		kbdkey(Kalt, 1);
+		return;
+	}
+		
 	/*
 	 * I tried using XtGetActionKeysym, but it didn't seem to
 	 * do case conversion properly
@@ -869,6 +880,14 @@
 	if(k == NoSymbol) {
 		return;
 	}
+
+	if(k==Kalt && e->xany.type == KeyPress)
+		if(focusarm == 0)
+			focusarm=2;
+		else
+			focusarm=0;
+	else if(focusarm && e->xany.type == KeyPress)
+		focusarm--;	
 
 	kbdkey(k, e->xany.type == KeyPress);
 }