From 99b98cde93b35a90d35e780deb4335f84d0f65b3 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Thu, 27 Sep 2012 18:48:17 +0200 Subject: xcbviewfs: close on pressing ESC --- xcbviewfs.c | 19 +++++++++++++++++-- 1 file 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: -- cgit v1.2.1