summaryrefslogtreecommitdiff
path: root/src/input.c
diff options
context:
space:
mode:
authorsabetts <sabetts>2003-03-26 02:42:05 +0000
committersabetts <sabetts>2003-03-26 02:42:05 +0000
commit84ee56d66b889363903eddd81a8b2a07f180656f (patch)
tree6f7d51890ffbe521774f2a633e385d296458ba51 /src/input.c
parent71a80e9852ad1de0fb88174ca9242a8dddcde384 (diff)
downloadratpoison-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.c21
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;