keys: don't cache position for unknown keys

This commit is contained in:
Miroslav Lichvar 2014-03-20 18:12:46 +01:00
parent 7dd3cc354d
commit 0059a43254

33
keys.c
View file

@ -295,13 +295,20 @@ lookup_key(unsigned long id)
static int static int
get_key_pos(unsigned long key_id) get_key_pos(unsigned long key_id)
{ {
if (!cache_valid || key_id != cache_key_id) { int position;
if (cache_valid && key_id == cache_key_id)
return cache_key_pos;
position = lookup_key(key_id);
if (position >= 0) {
cache_valid = 1; cache_valid = 1;
cache_key_pos = lookup_key(key_id); cache_key_pos = position;
cache_key_id = key_id; cache_key_id = key_id;
} }
return cache_key_pos; return position;
} }
/* ================================================== */ /* ================================================== */
@ -321,25 +328,7 @@ KEY_GetCommandKey(void)
int int
KEY_KeyKnown(unsigned long key_id) KEY_KeyKnown(unsigned long key_id)
{ {
int position; return get_key_pos(key_id) >= 0;
if (cache_valid && (key_id == cache_key_id)) {
return 1;
} else {
position = lookup_key(key_id);
if (position >= 0) {
/* Store key in cache, we will probably be using it in a
minute... */
cache_valid = 1;
cache_key_pos = position;
cache_key_id = key_id;
return 1;
} else {
return 0;
}
}
} }
/* ================================================== */ /* ================================================== */