【发布时间】:2020-03-10 06:56:13
【问题描述】:
目前我只为一个函数 XRestackWindows 使用 Xlib,其余的是 XCB 和 QT5。要求仅使用 XCB 和 QT5。
我想知道一种在 XCB 中拥有适当 XRestackWindows 的方法,我尝试了 here 的解决方案,但窗口会闪烁
它必须几乎与它在 XLIB 中的工作方式完全相同。重新堆叠时没有窗口闪烁,如果我重新堆叠相同顺序的窗口,则不会发生屏幕闪烁。
无法正常工作的 XCB 代码(问题:重新堆叠时闪烁的窗口):
void restackWindows(std::vector<xcb_window_t> list)
{
xcb_connection_t *conn = QX11Info::connection();
unsigned int arg[1] = { XCB_STACK_MODE_ABOVE };
for ( auto win : list )
{
xcb_configure_window(conn, win, XCB_CONFIG_WINDOW_STACK_MODE, arg);
}
xcb_flush(conn);
}
注意:我试过不同的方法都没有运气,我一直在看 XRestackWindows 函数,似乎他们使用了 LockDisplay 和 UnlockDisplay,我在 XCB 中找不到。
【问题讨论】: