mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-11 16:45:48 -04:00
Track whether a hotkey is user or server defined
This commit is contained in:
parent
fa4a63b3bd
commit
b62e9fd10c
@ -229,7 +229,7 @@ void HacksComp_RecheckFlags(struct HacksComp* hacks) {
|
||||
/* Can use hacks by default (also case with WoM), no need to check +hax */
|
||||
cc_bool hax = !String_ContainsConst(&hacks->HacksFlags, "-hax");
|
||||
HacksComp_SetAll(hacks, hax);
|
||||
hacks->CanBePushed = true;
|
||||
hacks->CanBePushed = true;
|
||||
|
||||
HacksComp_ParseFlag(hacks, "+fly", "-fly", &hacks->CanFly);
|
||||
HacksComp_ParseFlag(hacks, "+noclip", "-noclip", &hacks->CanNoclip);
|
||||
|
12
src/Input.c
12
src/Input.c
@ -420,12 +420,12 @@ static void Hotkeys_QuickSort(int left, int right) {
|
||||
}
|
||||
}
|
||||
|
||||
static void Hotkeys_AddNewHotkey(int trigger, cc_uint8 modifiers, const cc_string* text, cc_bool more) {
|
||||
static void Hotkeys_AddNewHotkey(int trigger, cc_uint8 modifiers, const cc_string* text, cc_uint8 flags) {
|
||||
struct HotkeyData hKey;
|
||||
hKey.trigger = trigger;
|
||||
hKey.mods = modifiers;
|
||||
hKey.textIndex = HotkeysText.count;
|
||||
hKey.staysOpen = more;
|
||||
hKey.flags = flags;
|
||||
|
||||
if (HotkeysText.count == HOTKEYS_MAX_COUNT) {
|
||||
Chat_AddRaw("&cCannot define more than 256 hotkeys");
|
||||
@ -449,7 +449,7 @@ static void Hotkeys_RemoveText(int index) {
|
||||
}
|
||||
|
||||
|
||||
void Hotkeys_Add(int trigger, cc_uint8 modifiers, const cc_string* text, cc_bool more) {
|
||||
void Hotkeys_Add(int trigger, cc_uint8 modifiers, const cc_string* text, cc_uint8 flags) {
|
||||
struct HotkeyData* hk = HotkeysList;
|
||||
int i;
|
||||
|
||||
@ -457,12 +457,12 @@ void Hotkeys_Add(int trigger, cc_uint8 modifiers, const cc_string* text, cc_bool
|
||||
if (hk->trigger != trigger || hk->mods != modifiers) continue;
|
||||
Hotkeys_RemoveText(hk->textIndex);
|
||||
|
||||
hk->staysOpen = more;
|
||||
hk->flags = flags;
|
||||
hk->textIndex = HotkeysText.count;
|
||||
StringsBuffer_Add(&HotkeysText, text);
|
||||
return;
|
||||
}
|
||||
Hotkeys_AddNewHotkey(trigger, modifiers, text, more);
|
||||
Hotkeys_AddNewHotkey(trigger, modifiers, text, flags);
|
||||
}
|
||||
|
||||
cc_bool Hotkeys_Remove(int trigger, cc_uint8 modifiers) {
|
||||
@ -938,7 +938,7 @@ static void HandleHotkeyDown(int key) {
|
||||
hkey = &HotkeysList[i];
|
||||
text = StringsBuffer_UNSAFE_Get(&HotkeysText, hkey->textIndex);
|
||||
|
||||
if (!hkey->staysOpen) {
|
||||
if (!(hkey->flags & HOTKEY_FLAG_STAYS_OPEN)) {
|
||||
Chat_Send(&text, false);
|
||||
} else if (!Gui.InputGrab) {
|
||||
ChatScreen_OpenInput(&text);
|
||||
|
@ -141,12 +141,17 @@ CC_API cc_bool KeyBind_IsPressed(KeyBind binding);
|
||||
/* Set the key that the given key binding is bound to. (also updates options list) */
|
||||
void KeyBind_Set(KeyBind binding, int key);
|
||||
|
||||
/* whether to leave text input open for user to enter further input */
|
||||
#define HOTKEY_FLAG_STAYS_OPEN 0x01
|
||||
/* Whether the hotkey was auto defined (e.g. by server) */
|
||||
#define HOTKEY_FLAG_AUTO_DEFINED 0x02
|
||||
|
||||
extern const cc_uint8 Hotkeys_LWJGL[256];
|
||||
struct HotkeyData {
|
||||
int textIndex; /* contents to copy directly into the input bar */
|
||||
cc_uint8 trigger; /* Member of Key enumeration */
|
||||
cc_uint8 mods; /* HotkeyModifiers bitflags */
|
||||
cc_bool staysOpen; /* whether the user is able to enter further input */
|
||||
cc_uint8 flags; /* HOTKEY_FLAG flags */
|
||||
};
|
||||
|
||||
#define HOTKEYS_MAX_COUNT 256
|
||||
@ -157,7 +162,7 @@ enum HotkeyModifiers {
|
||||
};
|
||||
|
||||
/* Adds or updates a new hotkey. */
|
||||
void Hotkeys_Add(int trigger, cc_uint8 modifiers, const cc_string* text, cc_bool more);
|
||||
void Hotkeys_Add(int trigger, cc_uint8 modifiers, const cc_string* text, cc_uint8 flags);
|
||||
/* Removes the given hotkey. */
|
||||
cc_bool Hotkeys_Remove(int trigger, cc_uint8 modifiers);
|
||||
/* Returns the first hotkey which is bound to the given key and has its modifiers pressed. */
|
||||
|
16
src/Menus.c
16
src/Menus.c
@ -789,7 +789,8 @@ static void EditHotkeyScreen_UpdateLeaveOpen(struct EditHotkeyScreen* s) {
|
||||
String_InitArray(text, textBuffer);
|
||||
|
||||
String_AppendConst(&text, "Input stays open: ");
|
||||
String_AppendConst(&text, s->curHotkey.staysOpen ? "ON" : "OFF");
|
||||
String_AppendConst(&text,
|
||||
(s->curHotkey.flags & HOTKEY_FLAG_STAYS_OPEN) ? "ON" : "OFF");
|
||||
ButtonWidget_Set(&s->btns[2], &text, &s->titleFont);
|
||||
}
|
||||
|
||||
@ -817,7 +818,8 @@ static void EditHotkeyScreen_LeaveOpen(void* screen, void* b) {
|
||||
EditHotkeyScreen_UpdateModifiers(s);
|
||||
}
|
||||
|
||||
s->curHotkey.staysOpen = !s->curHotkey.staysOpen;
|
||||
/* Toggle Input Stays Open flag */
|
||||
s->curHotkey.flags ^= HOTKEY_FLAG_STAYS_OPEN;
|
||||
EditHotkeyScreen_UpdateLeaveOpen(s);
|
||||
}
|
||||
|
||||
@ -829,12 +831,14 @@ static void EditHotkeyScreen_SaveChanges(void* screen, void* b) {
|
||||
Hotkeys_Remove(hk.trigger, hk.mods);
|
||||
StoredHotkeys_Remove(hk.trigger, hk.mods);
|
||||
}
|
||||
|
||||
hk = s->curHotkey;
|
||||
|
||||
if (hk.trigger) {
|
||||
cc_string text = s->input.base.text;
|
||||
Hotkeys_Add(hk.trigger, hk.mods, &text, hk.staysOpen);
|
||||
StoredHotkeys_Add(hk.trigger, hk.mods, hk.staysOpen, &text);
|
||||
cc_string text = s->input.base.text;
|
||||
cc_bool staysOpen = hk.flags & HOTKEY_FLAG_STAYS_OPEN;
|
||||
|
||||
Hotkeys_Add(hk.trigger, hk.mods, &text, hk.flags);
|
||||
StoredHotkeys_Add(hk.trigger, hk.mods, staysOpen, &text);
|
||||
}
|
||||
HotkeyListScreen_Show();
|
||||
}
|
||||
|
@ -1015,9 +1015,11 @@ static void CPE_SetTextHotkey(cc_uint8* data) {
|
||||
StoredHotkeys_Load(key, keyMods);
|
||||
} else if (action.buffer[action.length - 1] == '\n') {
|
||||
action.length--;
|
||||
Hotkeys_Add(key, keyMods, &action, false);
|
||||
Hotkeys_Add(key, keyMods, &action,
|
||||
HOTKEY_FLAG_AUTO_DEFINED);
|
||||
} else { /* more input needed by user */
|
||||
Hotkeys_Add(key, keyMods, &action, true);
|
||||
Hotkeys_Add(key, keyMods, &action,
|
||||
HOTKEY_FLAG_AUTO_DEFINED | HOTKEY_FLAG_STAYS_OPEN);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user