XGrabKeyboard () не использует клавиатуру для определенного окна в x11 - PullRequest
0 голосов
/ 31 декабря 2018

Я запустил простой код C, который сначала печатает все активные окна и просит пользователя выбрать окно, в которое должен передаваться ввод с клавиатуры.

Я переключаюсь через функцию XGrabKeyboard (), в которойЯ могу указать окно, которое может захватить клавиатуру.Он работает правильно.

Например, я установил фокус на текстовом редакторе, и когда я запускаю код, курсор начинает мигать в текстовом редакторе.Но проблема в том, что он получает ввод и ведет себя так, как будто клавиатура заморожена.

У меня вопрос, что именно делает XGrabKeyboard ()?Используется ли он просто для того, чтобы захватить управление клавиатурой, или он может использоваться для полной привязки клавиатуры к окну и начала выполнения каких-либо действий с клавиатурой в этом окне?Или всегда следует захватывать DefaultRootWindow ()?

Я сталкивался со многими вопросами, но они не объясняют, что мне действительно нужно.

О XGrabKeyboard (): https://tronche.com/gui/x/xlib/input/XGrabKeyboard.html

// list holds window IDs received from a winlist function
list = (Window*)winlist(d,&len);
printf("And the window indices and  names are...\n");
for (i=0;i<(int)len;i++) {
    name = winame(d,list[i]);
    printf("-->index = %d\t%s<--\n",i, name);
    free(name);
}
int x;
printf("Select the window for which Keyboard should be grabbed (0 indexed) ");
scanf("%d",&x);

if(XGrabKeyboard(d, list[x], False, GrabModeAsync, GrabModeAsync, CurrentTime)!=0)//GrabSuccess)
printf("Keyboard grab failed for window = %s", winame(d, list[x]));
else
{
printf("Keyboard Grab Successful\n");
sleep(10);
}
...