[mouse] add some Pointer related utility functions
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
108b9a2870
commit
b6a81100d1
74
mouse.c
74
mouse.c
|
@ -20,6 +20,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
#include <xcb/xcb.h>
|
#include <xcb/xcb.h>
|
||||||
#include <xcb/xcb_aux.h>
|
#include <xcb/xcb_aux.h>
|
||||||
|
@ -190,6 +191,79 @@ mouse_resizebar_new(int phys_screen, int border, area_t geometry,
|
||||||
return sw;
|
return sw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get the Pointer position
|
||||||
|
* \param window
|
||||||
|
* \param x will be set to the Pointer-x-coordinate relative to window
|
||||||
|
* \param y will be set to the Pointer-y-coordinate relative to window
|
||||||
|
* \return true on success, false if an error occured
|
||||||
|
**/
|
||||||
|
static bool
|
||||||
|
mouse_query_pointer(xcb_window_t window, int *x, int *y)
|
||||||
|
{
|
||||||
|
xcb_query_pointer_cookie_t query_ptr_c;
|
||||||
|
xcb_query_pointer_reply_t *query_ptr_r;
|
||||||
|
|
||||||
|
query_ptr_c = xcb_query_pointer(globalconf.connection, window);
|
||||||
|
query_ptr_r = xcb_query_pointer_reply(globalconf.connection, query_ptr_c, NULL);
|
||||||
|
|
||||||
|
if(!query_ptr_r)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
*x = query_ptr_r->win_x;
|
||||||
|
*y = query_ptr_r->win_y;
|
||||||
|
|
||||||
|
p_delete(&query_ptr_r);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Grab the Pointer
|
||||||
|
* \param window
|
||||||
|
* \param cursor the Cursor to display (see struct.h CurNormal, CurResize etc)
|
||||||
|
* \return true on success, false if an error occured
|
||||||
|
*/
|
||||||
|
static bool
|
||||||
|
mouse_grab_pointer(xcb_window_t window, size_t cursor)
|
||||||
|
{
|
||||||
|
xcb_grab_pointer_cookie_t grab_ptr_c;
|
||||||
|
xcb_grab_pointer_reply_t *grab_ptr_r;
|
||||||
|
|
||||||
|
if(cursor >= CurLast)
|
||||||
|
cursor = CurNormal;
|
||||||
|
|
||||||
|
grab_ptr_c = xcb_grab_pointer(globalconf.connection, false, window,
|
||||||
|
MOUSEMASK, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC,
|
||||||
|
window, globalconf.cursor[cursor], XCB_CURRENT_TIME);
|
||||||
|
grab_ptr_r = xcb_grab_pointer_reply(globalconf.connection, grab_ptr_c, NULL);
|
||||||
|
|
||||||
|
if(!grab_ptr_r)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
p_delete(&grab_ptr_r);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Ungrab the Pointer
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
mouse_ungrab_pointer()
|
||||||
|
{
|
||||||
|
xcb_ungrab_pointer(globalconf.connection, XCB_CURRENT_TIME);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set the Pointer position
|
||||||
|
* \param window the destination window
|
||||||
|
* \param x x-coordinate inside window
|
||||||
|
* \param y y-coordinate inside window
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
mouse_warp_pointer(xcb_window_t window, int x, int y)
|
||||||
|
{
|
||||||
|
xcb_warp_pointer(globalconf.connection, XCB_NONE, window,
|
||||||
|
0, 0, 0, 0, x, y );
|
||||||
|
}
|
||||||
|
|
||||||
/** Move the focused window with the mouse.
|
/** Move the focused window with the mouse.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue