[Dosemu-cvs] [SCM] dosemu branch devel updated. dosemu-1.4.0.8-738-gd2b55cd
Brought to you by:
bartoldeman
From: Stas S. <st...@us...> - 2014-08-10 18:47:46
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "dosemu". The branch, devel has been updated via d2b55cdcb824d607fdd18acdf0cea10d819c18a9 (commit) via ca0067c60407e5a7c669ac9088cf146720d268eb (commit) via 256266350e3d2d5ae4ca8b2efa9c68d96a584ad6 (commit) from fbb014c08e2354a6b9de389a09095eaafff25319 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://sourceforge.net/p/dosemu/code/ci/d2b55cdcb824d607fdd18acdf0cea10d819c18a9 commit d2b55cdcb824d607fdd18acdf0cea10d819c18a9 Author: Stas Sergeev <st...@us...> Date: Sun Aug 10 22:43:18 2014 +0400 X: disable KeymapNotify event processing It sometimes causes duplicate keypresses. Should fix sf bug #542 diff --git a/src/plugin/X/X.c b/src/plugin/X/X.c index ce7666e..b3871f4 100644 --- a/src/plugin/X/X.c +++ b/src/plugin/X/X.c @@ -1575,12 +1575,14 @@ static void X_handle_events(void) keyrel_pending = 1; break; +#if 0 case KeymapNotify: X_printf("X: KeymapNotify event\n"); /* don't process keys when doing fullscreen switching (this generates two events for fullscreen and one back to windowed mode )*/ X_process_keys(&e.xkeymap); break; +#endif /* A keyboard mapping has been changed (e.g., with xmodmap). */ case MappingNotify: diff --git a/src/plugin/X/keyb_X.c b/src/plugin/X/keyb_X.c index 1a63282..44cd39b 100644 --- a/src/plugin/X/keyb_X.c +++ b/src/plugin/X/keyb_X.c @@ -243,6 +243,7 @@ void X_sync_shiftstate(Boolean make, KeyCode kc, unsigned int e_state) } static int initialized= 0; +#if 0 void X_process_keys(XKeymapEvent *e) { if (!initialized) { @@ -254,6 +255,7 @@ void X_process_keys(XKeymapEvent *e) return; } } +#endif void map_X_event(Display *display, XKeyEvent *e, struct mapped_X_event *result) { diff --git a/src/plugin/X/keyb_X_keycode.c b/src/plugin/X/keyb_X_keycode.c index 060a3ec..f3d0985 100644 --- a/src/plugin/X/keyb_X_keycode.c +++ b/src/plugin/X/keyb_X_keycode.c @@ -580,7 +580,7 @@ static void put_keycode(int make, int keycode, t_keysym sym) move_keynum(make, keynum, sym); } - +#if 0 void X_keycode_process_keys(XKeymapEvent *e) { int i; @@ -605,6 +605,7 @@ void X_keycode_process_keys(XKeymapEvent *e) } } } +#endif void X_keycode_process_key(XKeyEvent *e) { http://sourceforge.net/p/dosemu/code/ci/ca0067c60407e5a7c669ac9088cf146720d268eb commit ca0067c60407e5a7c669ac9088cf146720d268eb Author: Stas Sergeev <st...@us...> Date: Sun Aug 10 21:55:18 2014 +0400 X: keycode_to_keynum array now stores indexes of keynum_from_keycode array diff --git a/src/plugin/X/keyb_X_keycode.c b/src/plugin/X/keyb_X_keycode.c index e672f7b..060a3ec 100644 --- a/src/plugin/X/keyb_X_keycode.c +++ b/src/plugin/X/keyb_X_keycode.c @@ -30,8 +30,8 @@ struct X_keyb_config { struct X_keyb_config *keyb_config = NULL; #define MAX_X_KEYCODES 256 -static t_keysym keycode_to_keynum[MAX_X_KEYCODES]; -#define KEYCODE_TO_KEYNUM(i) keycode_to_keynum[i] +static int keycode_to_keynum[MAX_X_KEYCODES]; +#define KEYCODE_TO_KEYNUM(i) k2kn(i) #if 0 const char *XStatusString(Status status) @@ -449,6 +449,14 @@ static const struct { { NUM_PAUSE_BREAK, "BREA"}, }; +static t_keynum k2kn(KeyCode xcode) +{ + int idx = keycode_to_keynum[xcode]; + if (idx == -1) + return NUM_VOID; + return keynum_from_keycode[idx].keynum; +} + static Boolean setup_keycode_to_keynum_mapping(Display *display) { #if HAVE_XKB @@ -468,7 +476,7 @@ static Boolean setup_keycode_to_keynum_mapping(Display *display) keynum_from_keycode[i].keycode_name, TRUE); X_printf("X: looking for %s\n", keynum_from_keycode[i].keycode_name); if (xcode && (KEYCODE_TO_KEYNUM(xcode) == NUM_VOID)) { - keycode_to_keynum[xcode] = keynum_from_keycode[i].keynum; + keycode_to_keynum[xcode] = i; X_printf("X: mapping %s(%02x) -> %02x\n", keynum_from_keycode[i].keycode_name, xcode, @@ -516,8 +524,16 @@ static void setup_keycode_to_keynum(void *p, t_unicode dosemu_keysym, int keysyms_per_keycode; KeySym *sym = XGetKeyboardMapping (display, xcode, 1, &keysyms_per_keycode); - if (map < keysyms_per_keycode && sym[map] == xkey) - keycode_to_keynum[xcode] = keynum; + if (map < keysyms_per_keycode && sym[map] == xkey) { + int i; + for(i = 0; i < sizeof(keynum_from_keycode)/sizeof(keynum_from_keycode[0]); + i++) { + if (keynum_from_keycode[i].keynum == keynum) { + keycode_to_keynum[xcode] = i; + break; + } + } + } XFree(sym); } } @@ -531,7 +547,7 @@ static void X_keycode_initialize(Display *display) for(i = 0; i < MAX_X_KEYCODES; i++) { - keycode_to_keynum[i] = NUM_VOID; + keycode_to_keynum[i] = -1; } #if 0 display_x_keyboard(display); http://sourceforge.net/p/dosemu/code/ci/256266350e3d2d5ae4ca8b2efa9c68d96a584ad6 commit 256266350e3d2d5ae4ca8b2efa9c68d96a584ad6 Author: Stas Sergeev <st...@us...> Date: Sun Aug 10 21:34:18 2014 +0400 X: use macro to access keycode_to_keynum array diff --git a/src/plugin/X/keyb_X_keycode.c b/src/plugin/X/keyb_X_keycode.c index ab87e77..e672f7b 100644 --- a/src/plugin/X/keyb_X_keycode.c +++ b/src/plugin/X/keyb_X_keycode.c @@ -31,6 +31,7 @@ struct X_keyb_config *keyb_config = NULL; #define MAX_X_KEYCODES 256 static t_keysym keycode_to_keynum[MAX_X_KEYCODES]; +#define KEYCODE_TO_KEYNUM(i) keycode_to_keynum[i] #if 0 const char *XStatusString(Status status) @@ -466,7 +467,7 @@ static Boolean setup_keycode_to_keynum_mapping(Display *display) xcode = XkbFindKeycodeByName(desc, keynum_from_keycode[i].keycode_name, TRUE); X_printf("X: looking for %s\n", keynum_from_keycode[i].keycode_name); - if (xcode && (keycode_to_keynum[xcode] == NUM_VOID)) { + if (xcode && (KEYCODE_TO_KEYNUM(xcode) == NUM_VOID)) { keycode_to_keynum[xcode] = keynum_from_keycode[i].keynum; X_printf("X: mapping %s(%02x) -> %02x\n", keynum_from_keycode[i].keycode_name, @@ -545,7 +546,7 @@ static void X_keycode_initialize(Display *display) } #if 1 for(i = 0; i < MAX_X_KEYCODES; i++) { - t_keynum keynum = keycode_to_keynum[i]; + t_keynum keynum = KEYCODE_TO_KEYNUM(i); if (keynum != NUM_VOID) { k_printf("mapping keycode:%d -> keynum: 0x%02x\n", i, keynum); @@ -557,7 +558,7 @@ static void X_keycode_initialize(Display *display) static void put_keycode(int make, int keycode, t_keysym sym) { t_keysym keynum; - keynum = keycode_to_keynum[keycode]; + keynum = KEYCODE_TO_KEYNUM(keycode); if (keynum == NUM_VOID) return; move_keynum(make, keynum, sym); ----------------------------------------------------------------------- Summary of changes: src/plugin/X/X.c | 2 ++ src/plugin/X/keyb_X.c | 2 ++ src/plugin/X/keyb_X_keycode.c | 36 +++++++++++++++++++++++++++--------- 3 files changed, 31 insertions(+), 9 deletions(-) hooks/post-receive -- dosemu |