void grab_spec_keys(Window window, int is_grab) { if (is_grab) { // Ungrab hotkeys in root window XUngrabKey(main_window->display, AnyKey, AnyModifier, DefaultRootWindow (main_window->display)); // Grab all keys... XGrabKey(main_window->display, AnyKey, AnyModifier, window, FALSE, GrabModeAsync, GrabModeAsync); // ...without ModKeys. grab_modifier_keys(window, FALSE); } else { // Ungrab all keys in app window... XUngrabKey(main_window->display, AnyKey, AnyModifier, window); // ... and with hotkeys XUngrabKey(main_window->display, AnyKey, AnyModifier, DefaultRootWindow (main_window->display)); grab_manual_action(); grab_user_action(); // ...without ModKeys. grab_modifier_keys(DefaultRootWindow (main_window->display), FALSE); } }
void grab_all_keys(Window window, int is_grab) { if (is_grab) { // Grab all keys... XGrabKey(main_window->display, AnyKey, AnyModifier, window, FALSE, GrabModeAsync, GrabModeAsync); // ...without ModKeys. grab_modifier_keys(window, FALSE); XIEventMask mask; mask.deviceid = XIAllMasterDevices; mask.mask_len = XIMaskLen(XI_KeyPress)+ XIMaskLen(XI_KeyRelease); mask.mask = (void *)calloc(mask.mask_len, sizeof(char)); XISetMask(mask.mask, XI_KeyPress); XISetMask(mask.mask, XI_KeyRelease); XISelectEvents(main_window->display, window, &mask, 1); free(mask.mask); // Not used, XISelectEvents get actions //grab_action(window); //grab_user_action(window); } else { // Ungrab all keys in app window... XUngrabKey(main_window->display, AnyKey, AnyModifier, window); XIEventMask mask; mask.deviceid = XIAllMasterDevices; mask.mask_len = XIMaskLen(XI_KeyPress); mask.mask = (void *)calloc(mask.mask_len, sizeof(char)); XISetMask(mask.mask, 0); XISelectEvents(main_window->display, window, &mask, 1); free(mask.mask); } XSelectInput(main_window->display, window, FOCUS_CHANGE_MASK); }