summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wu <lekensteyn@gmail.com>2012-09-27 18:48:17 +0200
committerPeter Wu <lekensteyn@gmail.com>2012-09-27 18:48:17 +0200
commit99b98cde93b35a90d35e780deb4335f84d0f65b3 (patch)
tree464d93d2b425c0779b8ec2e1dce87bfa57a2a4e1
parent2497c1392b81e093f4de2541a98746aebd449a7f (diff)
downloadc-files-99b98cde93b35a90d35e780deb4335f84d0f65b3.tar.gz
xcbviewfs: close on pressing ESC
-rw-r--r--xcbviewfs.c19
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: