/** Get the pointer position on the screen. * \param x This will be set to the Pointer-x-coordinate relative to window. * \param y This will be set to the Pointer-y-coordinate relative to window. * \param child This will be set to the window under the pointer. * \param mask This will be set to the current buttons state. * \return True on success, false if an error occurred. */ static bool mouse_query_pointer_root(int16_t *x, int16_t *y, xcb_window_t *child, uint16_t *mask) { xcb_window_t root = globalconf.screen->root; return mouse_query_pointer(root, x, y, child, mask); }
/** Grab the mouse. * \param cursor The cursor to use while grabbing. * \return True if mouse was grabbed. */ static bool mousegrabber_grab(xcb_cursor_t cursor) { xcb_window_t root = XCB_NONE; for(int screen = 0; screen < xcb_setup_roots_length(xcb_get_setup(globalconf.connection)); screen++) { int16_t x, y; uint16_t mask; root = xutil_screen_get(globalconf.connection, screen)->root; if(mouse_query_pointer(root, &x, &y, NULL, &mask)) break; } for(int i = 1000; i; i--) { xcb_grab_pointer_reply_t *grab_ptr_r; xcb_grab_pointer_cookie_t grab_ptr_c = xcb_grab_pointer_unchecked(globalconf.connection, false, root, XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE | XCB_EVENT_MASK_POINTER_MOTION, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC, root, cursor, XCB_CURRENT_TIME); if((grab_ptr_r = xcb_grab_pointer_reply(globalconf.connection, grab_ptr_c, NULL))) { p_delete(&grab_ptr_r); return true; } usleep(1000); } return false; }
/** Get the pointer position on the screen. * \param x This will be set to the Pointer-x-coordinate relative to window. * \param y This will be set to the Pointer-y-coordinate relative to window. * \param child This will be set to the window under the pointer. * \param mask This will be set to the current buttons state. * \return True on success, false if an error occurred. */ static inline bool mouse_query_pointer_root(int16_t *x, int16_t *y, xcb_window_t *child) { return mouse_query_pointer(globalconf.screen->root, x, y, child); }