CL_KeyEvent must not handle GUI mouse events, as it's the job of the UIWindowManager

This commit is contained in:
smallmodel 2023-12-28 17:26:32 +01:00
parent d62242d653
commit 2fa568eb01
No known key found for this signature in database
GPG key ID: A96F163ED4891440

View file

@ -1132,120 +1132,122 @@ void CL_KeyEvent(int key, qboolean down, unsigned time)
} }
} }
if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_MOUSE3 || key == K_MOUSE4 || key == K_MOUSE5) { if (key >= K_MOUSE1 && key <= K_MOUSE5) {
if (down) { if (down) {
cl.mouseButtons |= (1 << (key + (256 - K_MOUSE1))); cl.mouseButtons |= (1 << (key + (256 - K_MOUSE1)));
} else { } else {
cl.mouseButtons &= ~(1 << (key + (256 - K_MOUSE1))); cl.mouseButtons &= ~(1 << (key + (256 - K_MOUSE1)));
} }
if (in_guimouse) {
return;
}
} }
if (!in_guimouse || key <= K_MWHEELUP || key > K_JOY1) { // keys can still be used for bound actions
// keys can still be used for bound actions if (down && (key <= K_BACKSPACE || key == K_MOUSE4) && (clc.demoplaying || clc.state == CA_CINEMATIC)
if (down && (key <= K_BACKSPACE || key == K_MOUSE4) && (clc.demoplaying || clc.state == CA_CINEMATIC) && Key_GetCatcher() == 0) {
&& Key_GetCatcher() == 0) { Cvar_Set("nextdemo", "");
Cvar_Set("nextdemo", ""); key = K_ESCAPE;
key = K_ESCAPE; }
}
// escape is always handled special // escape is always handled special
if (key == K_ESCAPE) { if (key == K_ESCAPE) {
if (down) { if (down) {
qboolean wasup = UI_MenuUp(); qboolean wasup = UI_MenuUp();
UI_DeactiveFloatingWindows(); UI_DeactiveFloatingWindows();
if (clc.state == CA_CINEMATIC) { if (clc.state == CA_CINEMATIC) {
SCR_StopCinematic(); SCR_StopCinematic();
return;
}
if (cls.realFrametime - last_escape_time <= 1000) {
UI_MenuEscape("main");
return;
}
if (wasup) {
UI_MenuEscape("main");
return;
}
if (cl.snap.ps.stats[STAT_CINEMATIC] & 1 && clc.state == CA_ACTIVE) {
Cbuf_AddText("skipcinematic\n");
return;
}
if (clc.state <= CA_DISCONNECTED || clc.state == CA_ACTIVE) {
UI_MenuEscape("main");
}
return; return;
} }
} else if (down) {
if ((Key_GetCatcher() & KEYCATCH_UI && !menubound[key]) || UI_BindActive()) { if (cls.realFrametime - last_escape_time <= 1000) {
UI_KeyEvent(key, time); UI_MenuEscape("main");
} else if (cls.loading & KEYCATCH_MESSAGE) { return;
Message_Key(key); }
} else if (clc.state != CA_DISCONNECTED || menubound[key]) {
// send the bound action if (wasup) {
kb = altkeys[key].binding; UI_MenuEscape("main");
if (!kb || !altkeys[key].down) { return;
kb = ctrlkeys[key].binding; }
if (!kb || !ctrlkeys[key].down) {
kb = keys[key].binding; if (cl.snap.ps.stats[STAT_CINEMATIC] & 1 && clc.state == CA_ACTIVE) {
} Cbuf_AddText("skipcinematic\n");
} return;
if (!kb) { }
if (key >= 200) {
Com_Printf("%s is unbound, use controls menu to set.\n", Key_KeynumToString(key)); if (clc.state <= CA_DISCONNECTED || clc.state == CA_ACTIVE) {
} UI_MenuEscape("main");
} else if (kb[0] == '+') {
int i;
char button[1024], *buttonPtr;
buttonPtr = button;
for (i = 0;; i++) {
if (kb[i] == ';' || !kb[i]) {
*buttonPtr = '\0';
if (button[0] == '+') {
// button commands add keynum and time as parms so that multiple
// sources can be discriminated and subframe corrected
Com_sprintf(cmd, sizeof(cmd), "%s %i %i\n", button, key, time);
Cbuf_AddText(cmd);
} else {
// down-only command
Cbuf_AddText(button);
Cbuf_AddText("\n");
}
buttonPtr = button;
while ((kb[i] <= ' ' || kb[i] == ';') && kb[i] != 0) {
i++;
}
}
*buttonPtr++ = kb[i];
if (!kb[i]) {
break;
}
}
} else {
// down-only command
Cbuf_AddText(kb);
Cbuf_AddText("\n");
}
} }
return; return;
} }
} else if (down) {
if (altkeys[key].down) { if ((Key_GetCatcher() & KEYCATCH_UI && !menubound[key]) || UI_BindActive()) {
kb = altkeys[key].binding; UI_KeyEvent(key, time);
altkeys[key].down = false; } else if (cls.loading & KEYCATCH_MESSAGE) {
CL_AddKeyUpCommands(key, kb, time); Message_Key(key);
} else if (clc.state != CA_DISCONNECTED || menubound[key]) {
// send the bound action
kb = altkeys[key].binding;
if (!kb || !altkeys[key].down) {
kb = ctrlkeys[key].binding;
if (!kb || !ctrlkeys[key].down) {
kb = keys[key].binding;
}
}
if (!kb) {
if (key >= 200) {
Com_Printf("%s is unbound, use controls menu to set.\n", Key_KeynumToString(key));
}
} else if (kb[0] == '+') {
int i;
char button[1024], *buttonPtr;
buttonPtr = button;
for (i = 0;; i++) {
if (kb[i] == ';' || !kb[i]) {
*buttonPtr = '\0';
if (button[0] == '+') {
// button commands add keynum and time as parms so that multiple
// sources can be discriminated and subframe corrected
Com_sprintf(cmd, sizeof(cmd), "%s %i %i\n", button, key, time);
Cbuf_AddText(cmd);
} else {
// down-only command
Cbuf_AddText(button);
Cbuf_AddText("\n");
}
buttonPtr = button;
while ((kb[i] <= ' ' || kb[i] == ';') && kb[i] != 0) {
i++;
}
}
*buttonPtr++ = kb[i];
if (!kb[i]) {
break;
}
}
} else {
// down-only command
Cbuf_AddText(kb);
Cbuf_AddText("\n");
}
} }
if (ctrlkeys[key].down) { return;
kb = ctrlkeys[key].binding;
ctrlkeys[key].down = false;
CL_AddKeyUpCommands(key, kb, time);
}
CL_AddKeyUpCommands(key, keys[key].binding, time);
} }
if (altkeys[key].down) {
kb = altkeys[key].binding;
altkeys[key].down = false;
CL_AddKeyUpCommands(key, kb, time);
}
if (ctrlkeys[key].down) {
kb = ctrlkeys[key].binding;
ctrlkeys[key].down = false;
CL_AddKeyUpCommands(key, kb, time);
}
CL_AddKeyUpCommands(key, keys[key].binding, time);
} }
/* /*