Advertisement
Guest User

Untitled

a guest
Mar 12th, 2016
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.34 KB | None | 0 0
  1. #include <xcb/xcb.h>
  2. #define XK_LATIN1
  3. #include <xcb/xcb_keysyms.h>
  4. #include <X11/keysymdef.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. int
  9. main ()
  10. {
  11.   xcb_connection_t *conn;
  12.  
  13.   conn = xcb_connect (NULL, NULL);
  14.  
  15.   xcb_key_symbols_t * keysyms = xcb_key_symbols_alloc(conn);
  16.  
  17.   xcb_keycode_t * keycodesPtr = xcb_key_symbols_get_keycode(keysyms, XK_space);
  18.  
  19.   const xcb_setup_t* setup = xcb_get_setup(conn);
  20.  
  21.   xcb_screen_iterator_t screens = xcb_setup_roots_iterator(setup);
  22.   int screensCnt = screens.rem;
  23.  
  24.   for (int i=0; i<screensCnt; i++) {
  25.  
  26.       xcb_void_cookie_t rez_grab = xcb_grab_key(conn, 1, screens.data->root, XCB_MOD_MASK_ANY, keycodesPtr[0], XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC);
  27.  
  28.       const static uint32_t values[] = { XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_BUTTON_PRESS };
  29.  
  30.       xcb_change_window_attributes (conn, screens.data->root, XCB_CW_EVENT_MASK, values);
  31.  
  32.       xcb_screen_next(&screens);
  33.   }
  34.  
  35.   xcb_flush(conn);
  36.  
  37.   // start event loop
  38.   while (1) {
  39.       xcb_generic_event_t *ev = xcb_wait_for_event(conn);
  40.  
  41.       if (ev && ((ev->response_type & ~0x80) == XCB_KEY_PRESS))
  42.       {
  43.           xcb_key_press_event_t *kp = (xcb_key_press_event_t *)ev;
  44.           printf ("Got key press %d\n", (int)kp->event);
  45.       }
  46.  
  47.       if (ev != NULL) {
  48.           free(ev);
  49.       }
  50.   }
  51.  
  52.   return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement