r667 - in trunk: . code/unix
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Fri Mar 24 16:46:07 EST 2006
Author: tma
Date: 2006-03-24 16:46:07 -0500 (Fri, 24 Mar 2006)
New Revision: 667
Modified:
trunk/README
trunk/code/unix/linux_glimp.c
Log:
* Shift no longer modifies bound keys. Use in_shiftedKeys for the old
behaviour.
Modified: trunk/README
===================================================================
--- trunk/README 2006-03-24 17:28:27 UTC (rev 666)
+++ trunk/README 2006-03-24 21:46:07 UTC (rev 667)
@@ -117,6 +117,7 @@
r_GLlibCoolDownMsec - wait for some milliseconds to close GL library
com_altivec - enable use of altivec on PowerPC systems
s_backend - read only, indicates the current sound backend
+ in_shiftedKeys - non-SDL Linux only. Enables binding to shifted keys
cl_consoleHistory - read only, stores the console history
cl_platformSensitivity - read only, indicates the mouse input scaling
Modified: trunk/code/unix/linux_glimp.c
===================================================================
--- trunk/code/unix/linux_glimp.c 2006-03-24 17:28:27 UTC (rev 666)
+++ trunk/code/unix/linux_glimp.c 2006-03-24 21:46:07 UTC (rev 667)
@@ -117,6 +117,7 @@
static cvar_t *in_mouse;
static cvar_t *in_dgamouse; // user pref for dga mouse
+static cvar_t *in_shiftedKeys; // obey modifiers for certain keys in non-console (comma, numbers, etc)
cvar_t *in_subframe;
cvar_t *in_nograb; // this is strictly for developers
@@ -199,6 +200,7 @@
static char *XLateKey(XKeyEvent *ev, int *key)
{
static char buf[64];
+ static char bufnomod[2];
KeySym keysym;
int XLookupRet;
@@ -208,14 +210,23 @@
#ifdef KBD_DBG
ri.Printf(PRINT_ALL, "XLookupString ret: %d buf: %s keysym: %x\n", XLookupRet, buf, keysym);
#endif
-
+
+ if (!in_shiftedKeys->integer) {
+ // also get a buffer without modifiers held
+ ev->state = 0;
+ XLookupRet = XLookupString(ev, bufnomod, sizeof bufnomod, &keysym, 0);
+#ifdef KBD_DBG
+ ri.Printf(PRINT_ALL, "XLookupString (minus modifiers) ret: %d buf: %s keysym: %x\n", XLookupRet, buf, keysym);
+#endif
+ }
+
switch (keysym)
{
- case XK_KP_Page_Up:
+ case XK_KP_Page_Up:
case XK_KP_9: *key = K_KP_PGUP; break;
case XK_Page_Up: *key = K_PGUP; break;
- case XK_KP_Page_Down:
+ case XK_KP_Page_Down:
case XK_KP_3: *key = K_KP_PGDN; break;
case XK_Page_Down: *key = K_PGDN; break;
@@ -239,7 +250,7 @@
case XK_KP_2: *key = K_KP_DOWNARROW; break;
case XK_Down: *key = K_DOWNARROW; break;
- case XK_KP_Up:
+ case XK_KP_Up:
case XK_KP_8: *key = K_KP_UPARROW; break;
case XK_Up: *key = K_UPARROW; break;
@@ -274,7 +285,7 @@
case XK_F12: *key = K_F12; break;
- // bk001206 - from Ryan's Fakk2
+ // bk001206 - from Ryan's Fakk2
//case XK_BackSpace: *key = 8; break; // ctrl-h
case XK_BackSpace: *key = K_BACKSPACE; break; // ctrl-h
@@ -287,13 +298,13 @@
case XK_Shift_L:
case XK_Shift_R: *key = K_SHIFT; break;
- case XK_Execute:
- case XK_Control_L:
+ case XK_Execute:
+ case XK_Control_L:
case XK_Control_R: *key = K_CTRL; break;
- case XK_Alt_L:
- case XK_Meta_L:
- case XK_Alt_R:
+ case XK_Alt_L:
+ case XK_Meta_L:
+ case XK_Alt_R:
case XK_Meta_R: *key = K_ALT; break;
case XK_KP_Begin: *key = K_KP_5; break;
@@ -318,17 +329,17 @@
case XK_asterisk: *key = '8'; break;
case XK_parenleft: *key = '9'; break;
case XK_parenright: *key = '0'; break;
-
+
// weird french keyboards ..
// NOTE: console toggle is hardcoded in cl_keys.c, can't be unbound
// cleaner would be .. using hardware key codes instead of the key syms
// could also add a new K_KP_CONSOLE
case XK_twosuperior: *key = '~'; break;
-
- // https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=472
- case XK_space:
- case XK_KP_Space: *key = K_SPACE; break;
+ // https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=472
+ case XK_space:
+ case XK_KP_Space: *key = K_SPACE; break;
+
default:
if (XLookupRet == 0)
{
@@ -341,16 +352,20 @@
else
{
// XK_* tests failed, but XLookupString got a buffer, so let's try it
- *key = *(unsigned char *)buf;
- if (*key >= 'A' && *key <= 'Z')
- *key = *key - 'A' + 'a';
- // if ctrl is pressed, the keys are not between 'A' and 'Z', for instance ctrl-z == 26 ^Z ^C etc.
- // see https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=19
- else if (*key >= 1 && *key <= 26)
- *key = *key + 'a' - 1;
+ if (in_shiftedKeys->integer) {
+ *key = *(unsigned char *)buf;
+ if (*key >= 'A' && *key <= 'Z')
+ *key = *key - 'A' + 'a';
+ // if ctrl is pressed, the keys are not between 'A' and 'Z', for instance ctrl-z == 26 ^Z ^C etc.
+ // see https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=19
+ else if (*key >= 1 && *key <= 26)
+ *key = *key + 'a' - 1;
+ } else {
+ *key = bufnomod[0];
+ }
}
break;
- }
+ }
return buf;
}
@@ -1734,6 +1749,7 @@
// mouse variables
in_mouse = Cvar_Get ("in_mouse", "1", CVAR_ARCHIVE);
in_dgamouse = Cvar_Get ("in_dgamouse", "1", CVAR_ARCHIVE);
+ in_shiftedKeys = Cvar_Get ("in_shiftedKeys", "0", CVAR_ARCHIVE);
// turn on-off sub-frame timing of X events
in_subframe = Cvar_Get ("in_subframe", "1", CVAR_ARCHIVE);
More information about the quake3-commits
mailing list