Codechange: use std::string instead of strecat to build hotkey strings

This commit is contained in:
Rubidium 2023-05-12 20:56:09 +02:00 committed by rubidium42
parent 72c7536325
commit 86e5dfce3d
1 changed files with 21 additions and 37 deletions

View File

@ -167,53 +167,41 @@ static void ParseHotkeys(Hotkey *hotkey, const char *value)
* by a '+'. * by a '+'.
* @param keycode The keycode to convert to a string. * @param keycode The keycode to convert to a string.
* @return A string representation of this keycode. * @return A string representation of this keycode.
* @note The return value is a static buffer, stredup the result before calling
* this function again.
*/ */
static const char *KeycodeToString(uint16 keycode) static std::string KeycodeToString(uint16 keycode)
{ {
static char buf[32]; std::string str;
buf[0] = '\0';
bool first = true;
if (keycode & WKC_GLOBAL_HOTKEY) { if (keycode & WKC_GLOBAL_HOTKEY) {
strecat(buf, "GLOBAL", lastof(buf)); str += "GLOBAL";
first = false;
} }
if (keycode & WKC_SHIFT) { if (keycode & WKC_SHIFT) {
if (!first) strecat(buf, "+", lastof(buf)); if (!str.empty()) str += "+";
strecat(buf, "SHIFT", lastof(buf)); str += "SHIFT";
first = false;
} }
if (keycode & WKC_CTRL) { if (keycode & WKC_CTRL) {
if (!first) strecat(buf, "+", lastof(buf)); if (!str.empty()) str += "+";
strecat(buf, "CTRL", lastof(buf)); str += "CTRL";
first = false;
} }
if (keycode & WKC_ALT) { if (keycode & WKC_ALT) {
if (!first) strecat(buf, "+", lastof(buf)); if (!str.empty()) str += "+";
strecat(buf, "ALT", lastof(buf)); str += "ALT";
first = false;
} }
if (keycode & WKC_META) { if (keycode & WKC_META) {
if (!first) strecat(buf, "+", lastof(buf)); if (!str.empty()) str += "+";
strecat(buf, "META", lastof(buf)); str += "META";
first = false;
} }
if (!first) strecat(buf, "+", lastof(buf)); if (!str.empty()) str += "+";
keycode = keycode & ~WKC_SPECIAL_KEYS; keycode = keycode & ~WKC_SPECIAL_KEYS;
for (uint i = 0; i < lengthof(_keycode_to_name); i++) { for (uint i = 0; i < lengthof(_keycode_to_name); i++) {
if (_keycode_to_name[i].keycode == keycode) { if (_keycode_to_name[i].keycode == keycode) {
strecat(buf, _keycode_to_name[i].name, lastof(buf)); str += _keycode_to_name[i].name;
return buf; return str;
} }
} }
assert(keycode < 128); assert(keycode < 128);
char key[2]; str.push_back(keycode);
key[0] = keycode; return str;
key[1] = '\0';
strecat(buf, key, lastof(buf));
return buf;
} }
/** /**
@ -221,19 +209,15 @@ static const char *KeycodeToString(uint16 keycode)
* keycodes are attached to the hotkey they are split by a comma. * keycodes are attached to the hotkey they are split by a comma.
* @param hotkey The keycodes of this hotkey need to be converted to a string. * @param hotkey The keycodes of this hotkey need to be converted to a string.
* @return A string representation of all keycodes. * @return A string representation of all keycodes.
* @note The return value is a static buffer, stredup the result before calling
* this function again.
*/ */
const char *SaveKeycodes(const Hotkey *hotkey) std::string SaveKeycodes(const Hotkey *hotkey)
{ {
static char buf[128]; std::string str;
buf[0] = '\0';
for (uint i = 0; i < hotkey->keycodes.size(); i++) { for (uint i = 0; i < hotkey->keycodes.size(); i++) {
const char *str = KeycodeToString(hotkey->keycodes[i]); if (i > 0) str += ",";
if (i > 0) strecat(buf, ",", lastof(buf)); str += KeycodeToString(hotkey->keycodes[i]);
strecat(buf, str, lastof(buf));
} }
return buf; return str;
} }
/** /**