diff options
author | sabetts <sabetts> | 2003-03-26 02:42:05 +0000 |
---|---|---|
committer | sabetts <sabetts> | 2003-03-26 02:42:05 +0000 |
commit | 84ee56d66b889363903eddd81a8b2a07f180656f (patch) | |
tree | 6f7d51890ffbe521774f2a633e385d296458ba51 /src/input.c | |
parent | 71a80e9852ad1de0fb88174ca9242a8dddcde384 (diff) | |
download | ratpoison-84ee56d66b889363903eddd81a8b2a07f180656f.zip |
* src/split.h (show_frame_message): new prototype
* src/split.c (show_frame_message): new function
* src/main.c (init_screen): listen for key release events in the
key_window and input_window.
* src/input.c (read_key): new argument, gobble_rel. All callers
updated.
* src/actions.c (cmd_remove): only remove the current frame if it
isn't the ONLY one.
(cmd_remove): display a message informing the user if the frame
cannot be removed.
(cmd_resize): clean up resize loop.
(cmd_resize): display a window indicating which frame is being
resized.
Diffstat (limited to 'src/input.c')
-rw-r--r-- | src/input.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/input.c b/src/input.c index 6064d93..a5d5461 100644 --- a/src/input.c +++ b/src/input.c @@ -258,18 +258,33 @@ cook_keycode (XKeyEvent *ev, KeySym *keysym, unsigned int *mod, char *keysym_nam } int -read_key (KeySym *keysym, unsigned int *modifiers, char *keysym_name, int len) +read_key (KeySym *keysym, unsigned int *modifiers, char *keysym_name, int len, int gobble_rel) { + int key_presses = 0; XEvent ev; int nbytes; + unsigned int keycode; + /* Read a key from the keyboard. */ do { XMaskEvent (dpy, KeyPressMask, &ev); + /* Store the keycode so we can wait for it's corresponding key + release event. */ + keycode = ev.xkey.keycode; *modifiers = ev.xkey.state; nbytes = cook_keycode (&ev.xkey, keysym, modifiers, keysym_name, len, 0); } while (IsModifierKey (*keysym)); + PRINT_DEBUG (("key press events: %d\n", key_presses)); + + /* Gobble the release event for the key we pressed. */ + if (gobble_rel) + do + { + XMaskEvent (dpy, KeyReleaseMask, &ev); + } while (ev.xkey.keycode != keycode); + return nbytes; } @@ -357,7 +372,7 @@ get_more_input (char *prompt, char *preinput) /* XSync (dpy, False); */ - nbytes = read_key (&ch, &modifier, keysym_buf, keysym_bufsize); + nbytes = read_key (&ch, &modifier, keysym_buf, keysym_bufsize, 0); while (ch != XK_Return) { PRINT_DEBUG (("key %ld\n", ch)); @@ -429,7 +444,7 @@ get_more_input (char *prompt, char *preinput) update_input_window(s, prompt, str, cur_len); } - nbytes = read_key (&ch, &modifier, keysym_buf, keysym_bufsize); + nbytes = read_key (&ch, &modifier, keysym_buf, keysym_bufsize, 0); } str[cur_len] = 0; |