예제 #1
0
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);
    }
}
예제 #2
0
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);
}