Перенос событий XCB в события XLib

Я использую Qt 5.3.2 и библиотеку обработки ввода под названием gainput. Gainput может принимать только события XLib, а не структуры событий XCB. Большая проблема в том, что Qt использует xcb. Есть ли какой-то «простой» способ переноса событий xcb в события xlib?

xcb_generic_event_t* xcbEvent = /* ... Poll/Wait for events ... */
XEvent* xlibEvent = GenericEventConvertionFunction(xcbEvent); // Something like this...

person Sillydan    schedule 01.01.2018    source источник


Ответы (1)


Я не думаю, что есть простой способ получить то, что вы ищете.

Я не знаком с Qt, усилением или характером вашего проекта, но вы можете "преобразовать" существующий Xlib соединение с соединением xcb. Таким образом, вы можете смешивать вызовы Xlib и XCB.

Только один из Xlib и XCB может управлять очередью событий. По умолчанию это делает Xlib. Чтобы изменить это, вызовите XSetEventQueueOwner() (из "Xlib-xcb.h") перед выполнением других вызовов.

В идеале вы могли бы изначально создать объект Xlib Display, создать соответствующий xcb_display, использовать первый для Qt и опросить/подождать последний и передать ему усиление

Следует отметить, что вы можете конвертировать только одним способом.

Как получить объект Display с помощью объекта xcb_connection_t? Вы не можете.

Если этого решения недостаточно. Я не знаю хорошего способа решить вашу проблему. С другой стороны, события Xlib и xcb более или менее эквивалентны, поэтому ручное преобразование не будет слишком сложным (размеры по крайней мере некоторых событий различаются, поэтому прямого приведения будет недостаточно).

ИЗМЕНИТЬ

Я полагаю, что у кого-то был похожий вопрос несколько лет назад. По-видимому, Display *display = QX11Info::display(); это то, что вы можете сделать

person TAAPSogeking    schedule 23.07.2018