LINUX.ORG.RU

Обработка XEvent как сигнала

 , , ,


0

1

Здравствуйте. Для отображения списка открытых окон в текущий момент из документации я выбрал способ через обработку события XEvent. В итоге получилось как-то так:

...
Display* display;
...
void updateWindowList(QHBoxLayout* windowList) {
    XEvent event;
    XNextEvent(display, &event);
    if (event.type == CreateNotify) {
        // обновление списка окон в windowList
    }
}
...
int result;
display = XkbOpenDisplay(getenv("DISPLAY"), NULL, NULL, NULL, NULL, &result);
Таймером обрабатывать событие не получилось (таймер, также как и цикл, который для теста делал, просто перестает выполняться) (да и не эффективно это). Подскажите, пожалуйста, каким образом можно сделать событие XEvent слотом, который можно обработать сигналом. Спасибо.



Последнее исправление: thm (всего исправлений: 1)

Отдельная нить, в котором проверять пришедшие события. В Х другого способа нет

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

А не будет ли это потреблять слишком много ресурсов? Вот здесь (https://github.com/lxqt/lxqt-panel/blob/b2d98ab97ad9c6f44459dac18c1821080bca8496/plugin-taskbar/lxqttaskbar.cpp, строка 98) вижу, как используется сигнал от KWindowSystem для обработки нового окна. Т.е. если использовать KWindowSystem, то можно через сигналы.

thm
() автор топика
Последнее исправление: thm (всего исправлений: 3)

делаешь класс XEventPool от QThread заполняешь run и фсё, тамже определяешь свои сигналы, где нужно их ловишь слотами, создаешь объект и стартуешь - это же элементарно!

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.