/** * @brief Make a client listen for button press events. * * @param c The client that needs to listen for button presses. */ void grab_buttons(Client *c) { xcb_ungrab_button(dpy, XCB_BUTTON_INDEX_ANY, c->win, XCB_GRAB_ANY); xcb_grab_button(dpy, 1, c->win, XCB_EVENT_MASK_BUTTON_PRESS, XCB_GRAB_MODE_SYNC, XCB_GRAB_MODE_ASYNC, XCB_WINDOW_NONE, XCB_CURSOR_NONE, XCB_BUTTON_INDEX_ANY, XCB_BUTTON_MASK_ANY); }
void ungrab(void) { PUTS("ungrab"); xcb_ungrab_key(dpy, XCB_GRAB_ANY, root, XCB_BUTTON_MASK_ANY); xcb_ungrab_button(dpy, XCB_BUTTON_INDEX_ANY, root, XCB_MOD_MASK_ANY); xcb_flush(dpy); grabbed = false; }
void ungrab_buttons(void) { for (monitor_t *m = mon_head; m != NULL; m = m->next) { for (desktop_t *d = m->desk_head; d != NULL; d = d->next) { for (node_t *n = first_extrema(d->root); n != NULL; n = next_leaf(n, d->root)) { xcb_ungrab_button(dpy, XCB_BUTTON_INDEX_ANY, n->id, XCB_MOD_MASK_ANY); } } } }
/** Grab or ungrab buttons on a window. * \param win The window. * \param buttons The buttons to grab. */ void xwindow_buttons_grab(xcb_window_t win, button_array_t *buttons) { if(win == XCB_NONE) return; /* Ungrab everything first */ xcb_ungrab_button(globalconf.connection, XCB_BUTTON_INDEX_ANY, win, XCB_BUTTON_MASK_ANY); foreach(b, *buttons) xcb_grab_button(globalconf.connection, false, win, BUTTONMASK, XCB_GRAB_MODE_SYNC, XCB_GRAB_MODE_ASYNC, XCB_NONE, XCB_NONE, (*b)->button, (*b)->modifiers); }
void ungrab_buttons(void) { xcb_ungrab_button(dpy, XCB_BUTTON_INDEX_1, screen->root, button_modifier); xcb_ungrab_button(dpy, XCB_BUTTON_INDEX_2, screen->root, button_modifier); xcb_ungrab_button(dpy, XCB_BUTTON_INDEX_3, screen->root, button_modifier); }