LINUX.ORG.RU

Xlib Xinput2 XIWarpPointer Xinerama глюки

 , , ,


0

1

Доброго времени суток,

итак есть два монитора, работает xinerama, общее разрешение 2820*1440, слева 900*1440, справа 1920*1200, тот что 1920*1200 - основной экран.

При помощи XInput2 получаю ID виртуального мастера (masterPtrDevId) для указателя плюс ID реального устройства(slavePtrDevId) который к этому мастеру подключен.

Средствами xlib создаю окно, вешаю на него пассивную прослушку кликов с устройства slavePtrDevId.

При обнаружении клика (кнопку мыши отпустили) хочу передвинуть курсор в фиксированую позицию.

Двигаем средствами XInput:

XWarpPointer(ctx->xDpy, None, ctx->rootW, 0, 0, 0, 0, 100, 100);

Всё двигается как и ожидалось.

Создаём второе мастер устройство, привязываем к нему вторую мышку, работаем уже с этим новым мастером отслеживая привязаную к нему мышку.

Двигаем средствами XInput2:

XIWarpPointer (ctx->xDpy,
               ctx->masterPtrDevId,
               None,
               ctx->rootW,
               0.0,   0.0,
               0,     0,
               100.0, 100.0);

И облом... Не то чтобы совсем - курсор второго виртуального мастера двигается, но не в 100, 100 общего рута, который размером 2820*1440, т.е. в левый не основной монитор размером 900*1440, а в 1000, 100 или в 100, 100 второго монитора который указан как основной и размером 1920*1200, при этом, стоит на пиксель подвинуть мышь и она таки «доскакивает» до 100, 100 левого монитора, вообще любое событие этой мыши(клики, колёсико) доводит её до нужного места. То же самое поведение даже если не создавать второго мастера, т.е. обе мыши к одному мастеру привязаны.

xprop -root -tree показывает что рут только один xwininfo по пустой области обоих моников (xmonad-пустая область это рут) показывают одно и то же окно.

Я не правильно понял документацию на XIWarpPointer или пора писать разрабам?


XIWarpPointer ставит курсор в экран под номером 0, и плевать ему что там xinerama c виртуальным рутовым окном делает... Как бороться?

awpe ()

Залез в исходники XIWarpPointer даже в послдней версии не доделан, прям в коде комментарии на тему «надо бы сделать как в XWarpPointer» :)

awpe ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.