From 10f49b7705b5125b9a60fde55fa50ae8ac06036e Mon Sep 17 00:00:00 2001 From: Spoike Date: Tue, 5 Feb 2008 00:38:41 +0000 Subject: [PATCH] Support for x11 mwheel conventions instead of traditional support, and hopefully fixed gamma on task switches in the glx renderer. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2908 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/gl/gl_vidlinuxglx.c | 65 ++++++++++++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 13 deletions(-) diff --git a/engine/gl/gl_vidlinuxglx.c b/engine/gl/gl_vidlinuxglx.c index db2eb9ebb..d8e415f21 100644 --- a/engine/gl/gl_vidlinuxglx.c +++ b/engine/gl/gl_vidlinuxglx.c @@ -374,6 +374,7 @@ static void GetEvent(void) XEvent event; int b; qboolean wantwindowed; + qboolean x11violations = true; if (!vid_dpy) return; @@ -421,17 +422,36 @@ static void GetEvent(void) case ButtonPress: b=-1; if (event.xbutton.button == 1) - b = 0; + b = K_MOUSE1; else if (event.xbutton.button == 2) - b = 2; + b = K_MOUSE3; else if (event.xbutton.button == 3) - b = 1; + b = K_MOUSE2; + //note, the x11 protocol does not support a mousewheel + //we only support it because we follow convention. the actual protocol specifies 4+5 as regular buttons else if (event.xbutton.button == 4) - b = 3; + b = x11violations?K_MWHEELUP:K_MOUSE4; else if (event.xbutton.button == 5) - b = 4; + b = x11violations?K_MWHEELDOWN:K_MOUSE5; + //note, the x11 protocol does not support more than 5 mouse buttons + //which is a bit of a shame, but hey. + else if (event.xbutton.button == 6) + b = x11violations?K_MOUSE4:-1; + else if (event.xbutton.button == 7) + b = x11violations?K_MOUSE5:-1; + else if (event.xbutton.button == 8) + b = x11violations?K_MOUSE6:-1; + else if (event.xbutton.button == 9) + b = x11violations?K_MOUSE7:-1; + else if (event.xbutton.button == 10) + b = x11violations?K_MOUSE8:-1; + else if (event.xbutton.button == 11) + b = x11violations?K_MOUSE9:-1; + else if (event.xbutton.button == 12) + b = x11violations?K_MOUSE10:-1; + if (b>=0) - Key_Event(K_MOUSE1 + b, true); + Key_Event(b, true); #ifdef WITH_VMODE if (vidmode_ext && vidmode_usemode>=0) if (!ActiveApp) @@ -445,21 +465,39 @@ static void GetEvent(void) case ButtonRelease: b=-1; if (event.xbutton.button == 1) - b = 0; + b = K_MOUSE1; else if (event.xbutton.button == 2) - b = 2; + b = K_MOUSE3; else if (event.xbutton.button == 3) - b = 1; + b = K_MOUSE2; + //note, the x11 protocol does not support a mousewheel + //we only support it because we follow convention. the actual protocol specifies 4+5 as regular buttons else if (event.xbutton.button == 4) - b = 3; + b = x11violations?K_MWHEELUP:K_MOUSE4; else if (event.xbutton.button == 5) - b = 4; + b = x11violations?K_MWHEELDOWN:K_MOUSE5; + //note, the x11 protocol does not support more than 5 mouse buttons + //which is a bit of a shame, but hey. + else if (event.xbutton.button == 6) + b = x11violations?K_MOUSE4:-1; + else if (event.xbutton.button == 7) + b = x11violations?K_MOUSE5:-1; + else if (event.xbutton.button == 8) + b = x11violations?K_MOUSE6:-1; + else if (event.xbutton.button == 9) + b = x11violations?K_MOUSE7:-1; + else if (event.xbutton.button == 10) + b = x11violations?K_MOUSE8:-1; + else if (event.xbutton.button == 11) + b = x11violations?K_MOUSE9:-1; + else if (event.xbutton.button == 12) + b = x11violations?K_MOUSE10:-1; + if (b>=0) - Key_Event(K_MOUSE1 + b, false); + Key_Event(b, false); break; case FocusIn: - Cvar_ForceCallback(&v_gamma); ActiveApp = true; #ifdef WITH_VMODE if (vidmode_ext && vidmode_usemode>=0) @@ -474,6 +512,7 @@ static void GetEvent(void) XF86VidModeSetViewPort(vid_dpy, scrnum, 0, 0); } #endif + Cvar_ForceCallback(&v_gamma); break; case FocusOut: #ifdef WITH_VMODE