diff options
author | Peter Wu <lekensteyn@gmail.com> | 2012-09-27 18:48:17 +0200 |
---|---|---|
committer | Peter Wu <lekensteyn@gmail.com> | 2012-09-27 18:48:17 +0200 |
commit | 99b98cde93b35a90d35e780deb4335f84d0f65b3 (patch) | |
tree | 464d93d2b425c0779b8ec2e1dce87bfa57a2a4e1 | |
parent | 2497c1392b81e093f4de2541a98746aebd449a7f (diff) | |
download | c-files-99b98cde93b35a90d35e780deb4335f84d0f65b3.tar.gz |
xcbviewfs: close on pressing ESC
-rw-r--r-- | xcbviewfs.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/xcbviewfs.c b/xcbviewfs.c index 79386dd..fdd7497 100644 --- a/xcbviewfs.c +++ b/xcbviewfs.c @@ -41,6 +41,12 @@ int main(int argc, char **argv) { } screen = xcb_setup_roots_iterator(xcb_get_setup(c)).data; win = xcb_generate_id(c); + /* For each mask, need to add valwin item in order as defined by the + * enum, see See http://xcb.freedesktop.org/tutorial/events/ */ + uint32_t mask = XCB_CW_EVENT_MASK; + uint32_t valwin[] = { + XCB_EVENT_MASK_KEY_PRESS, + }; xcb_create_window(c, 0, win, /* conn, depth, WinID */ screen->root, /* parent */ 0, 0, /* x y */ @@ -48,7 +54,7 @@ int main(int argc, char **argv) { 0, /* border_width */ XCB_WINDOW_CLASS_INPUT_OUTPUT, /* class */ screen->root_visual, - 0, NULL); + mask, valwin); xcb_map_window(c, win); xcb_flush(c); @@ -126,7 +132,16 @@ int main(int argc, char **argv) { xcb_flush(c); } xcb_generic_event_t *e; - while ((e = xcb_wait_for_event(c))) { + int running = 1; + while (running && (e = xcb_wait_for_event(c))) { + switch (e->response_type) { + case XCB_KEY_PRESS: ; + xcb_button_press_event_t *press = (xcb_button_press_event_t *)e; + xcb_keycode_t key = press->detail; + if (key == 9 /* ESC */) + running = 0; + break; + } free(e); } ungrab_kbd: |