Driver getkey() can return TERMKEY_RES_NONE which attempts getkey_simple() afterwards
This commit is contained in:
parent
de74ffa67f
commit
09edf2377f
|
@ -309,7 +309,7 @@ static termkey_result getkey(termkey_t *tk, void *info, termkey_key *key, int fo
|
||||||
return getkey_csi(tk, csi, 1, key, force);
|
return getkey_csi(tk, csi, 1, key, force);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return (*tk->method.getkey_simple)(tk, key, force);
|
return TERMKEY_RES_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static termkey_keysym register_csi_ss3(termkey_csi *csi, termkey_type type, termkey_keysym sym, unsigned char cmd, const char *name)
|
static termkey_keysym register_csi_ss3(termkey_csi *csi, termkey_type type, termkey_keysym sym, unsigned char cmd, const char *name)
|
||||||
|
|
|
@ -135,8 +135,7 @@ static termkey_result getkey(termkey_t *tk, void *info, termkey_key *key, int fo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// No special seq. Must be a simple key then
|
return TERMKEY_RES_NONE;
|
||||||
return (*tk->method.getkey_simple)(tk, key, force);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
|
|
34
termkey.c
34
termkey.c
|
@ -382,7 +382,11 @@ static termkey_result getkey_simple(termkey_t *tk, termkey_key *key, int force)
|
||||||
tk->buffcount--;
|
tk->buffcount--;
|
||||||
|
|
||||||
// Run the full driver
|
// Run the full driver
|
||||||
termkey_result metakey_result = (*tk->driver.getkey)(tk, tk->driver_info, key, force);
|
termkey_result metakey_result;
|
||||||
|
if(force)
|
||||||
|
metakey_result = termkey_getkey_force(tk, key);
|
||||||
|
else
|
||||||
|
metakey_result = termkey_getkey(tk, key);
|
||||||
|
|
||||||
tk->buffstart--;
|
tk->buffstart--;
|
||||||
tk->buffcount++;
|
tk->buffcount++;
|
||||||
|
@ -504,12 +508,36 @@ static termkey_result getkey_simple(termkey_t *tk, termkey_key *key, int force)
|
||||||
|
|
||||||
termkey_result termkey_getkey(termkey_t *tk, termkey_key *key)
|
termkey_result termkey_getkey(termkey_t *tk, termkey_key *key)
|
||||||
{
|
{
|
||||||
return (*tk->driver.getkey)(tk, tk->driver_info, key, 0);
|
termkey_result ret = (*tk->driver.getkey)(tk, tk->driver_info, key, 0);
|
||||||
|
|
||||||
|
switch(ret) {
|
||||||
|
case TERMKEY_RES_KEY:
|
||||||
|
case TERMKEY_RES_EOF:
|
||||||
|
case TERMKEY_RES_AGAIN:
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
case TERMKEY_RES_NONE:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return getkey_simple(tk, key, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
termkey_result termkey_getkey_force(termkey_t *tk, termkey_key *key)
|
termkey_result termkey_getkey_force(termkey_t *tk, termkey_key *key)
|
||||||
{
|
{
|
||||||
return (*tk->driver.getkey)(tk, tk->driver_info, key, 1);
|
termkey_result ret = (*tk->driver.getkey)(tk, tk->driver_info, key, 1);
|
||||||
|
|
||||||
|
switch(ret) {
|
||||||
|
case TERMKEY_RES_KEY:
|
||||||
|
case TERMKEY_RES_EOF:
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
case TERMKEY_RES_AGAIN:
|
||||||
|
case TERMKEY_RES_NONE:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return getkey_simple(tk, key, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
termkey_result termkey_waitkey(termkey_t *tk, termkey_key *key)
|
termkey_result termkey_waitkey(termkey_t *tk, termkey_key *key)
|
||||||
|
|
Loading…
Reference in New Issue