i3
key_press.c
Go to the documentation of this file.
1/*
2 * vim:ts=4:sw=4:expandtab
3 *
4 * i3 - an improved tiling window manager
5 * © 2009 Michael Stapelberg and contributors (see also: LICENSE)
6 *
7 * key_press.c: key press handler
8 *
9 */
10#include "all.h"
11
12/*
13 * There was a KeyPress or KeyRelease (both events have the same fields). We
14 * compare this key code with our bindings table and pass the bound action to
15 * parse_command().
16 *
17 */
18void handle_key_press(xcb_key_press_event_t *event) {
19 const bool key_release = (event->response_type == XCB_KEY_RELEASE);
20
21 last_timestamp = event->time;
22
23 DLOG("%s %d, state raw = 0x%x\n", (key_release ? "KeyRelease" : "KeyPress"), event->detail, event->state);
24
25 Binding *bind = get_binding_from_xcb_event((xcb_generic_event_t *)event);
26
27 /* if we couldn't find a binding, we are done */
28 if (bind == NULL) {
29 return;
30 }
31
32 CommandResult *result = run_binding(bind, NULL);
33 command_result_free(result);
34}
Binding * get_binding_from_xcb_event(xcb_generic_event_t *event)
Returns a pointer to the Binding that matches the given xcb event or NULL if no such binding exists.
Definition bindings.c:315
CommandResult * run_binding(Binding *bind, Con *con)
Runs the given binding and handles parse errors.
Definition bindings.c:859
void command_result_free(CommandResult *result)
Frees a CommandResult.
void handle_key_press(xcb_key_press_event_t *event)
There was a key press.
Definition key_press.c:18
xcb_timestamp_t last_timestamp
The last timestamp we got from X11 (timestamps are included in some events and are used for some thin...
Definition main.c:64
#define DLOG(fmt,...)
Definition libi3.h:105
A struct that contains useful information about the result of a command as a whole (e....
Holds a keybinding, consisting of a keycode combined with modifiers and the command which is executed...
Definition data.h:306