From c45112d4babb508c0471a2c12fd9cd407a6981ee Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 15 Feb 2020 10:32:16 +0200 Subject: [PATCH] Ignore next key release support. --- include/keybuf.h | 1 + keybuf.cpp | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/include/keybuf.h b/include/keybuf.h index 5c47174f..01f629f0 100644 --- a/include/keybuf.h +++ b/include/keybuf.h @@ -18,5 +18,6 @@ extern void keybuf_init (void); extern int getcapslockstate (void); extern void setcapslockstate (int); extern void keybuf_inject(const uae_char*); +extern void keybuf_ignore_next_release(void); #endif /* UAE_KEYBUF_H */ diff --git a/keybuf.cpp b/keybuf.cpp index c637cc24..87778023 100644 --- a/keybuf.cpp +++ b/keybuf.cpp @@ -32,6 +32,7 @@ static int keyinject_offset; static uae_u8 keyinject_previous; static bool keyinject_state; static bool keyinject_do; +static bool ignore_next_release; struct kbtab { @@ -252,8 +253,16 @@ int record_key (int kc) int record_key_direct (int kc) { int kpb_next = kpb_first + 1; + int kcd = (kc << 7) | (kc >> 1); - //write_log (_T("got kc %02X\n"), ((kc << 7) | (kc >> 1)) & 0xff); + if (ignore_next_release) { + ignore_next_release = false; + if (kcd & 0x80) { + return 0; + } + } + + //write_log (_T("got kc %02X\n"), kcd & 0xff); if (kpb_next == KEYBUF_SIZE) kpb_next = 0; if (kpb_next == kpb_last) { @@ -274,6 +283,11 @@ void keybuf_init (void) inputdevice_updateconfig (&changed_prefs, &currprefs); } +void keybuf_ignore_next_release(void) +{ + ignore_next_release = true; +} + void keybuf_inject(const uae_char *txt) { uae_char *newbuf = xmalloc(uae_char, strlen(txt) + 1); -- 2.47.3