【问题标题】:Window is not responding to XMoveResizeWindow request窗口没有响应 XMoveResizeWindow 请求
【发布时间】:2021-10-09 14:22:48
【问题描述】:

我有一个窗口管理器代码,它可以做窗口移动,窗口调整大小。但是当我尝试同时使用 XMoveResizeWindow 执行这两项操作时,它不起作用,并且也没有错误日志出现。

我的代码如下

void WindowMgrLib::MoveResizeWindow(Window window, int x, int y, int width, int height)
{
    Display *display = XOpenDisplay(NULL);
    XSetErrorHandler(catch_error);
    XMoveResizeWindow(display, window, x, y, width, height);
    printf("x = %d, y= %d, width = %d, height=%d\n", x, y, width, height);
    XFlush(display);
    XCloseDisplay(display);
}

void WindowMgrLib::MoveWindow(Window window, int x, int y)
{
    Display *display = XOpenDisplay(NULL);
    XSetErrorHandler(catch_error);
    XMoveWindow(display, window, x, y);
    XFlush(display);
    XCloseDisplay(display);
}

void WindowMgrLib::ResizeWindow(Window window, int w, int h)
{
    Display *display = XOpenDisplay(NULL);
    XSetErrorHandler(catch_error);
    XResizeWindow(display, window, w, h);
    XFlush(display);
    XCloseDisplay(display);
}

这里WindowMgrLib::MoveWindowWindowMgrLib::ResizeWindow 工作正常。 有人能告诉我WindowMgrLib::MoveResizeWindow 有什么问题吗?

【问题讨论】:

    标签: c++ c ubuntu x11


    【解决方案1】:

    XCloseDisplay

    XCloseDisplay 函数关闭与 X 服务器的连接,用于显示结构中指定的显示,并销毁所有窗口、资源 ID(窗口、字体、像素图、颜色图、光标和 GContext)或其他资源客户端已在此显示上创建,除非资源的关闭模式已更改(请参阅 XSetCloseDownMode)。因此,这些窗口、资源 ID 和其他资源不应再次引用,否则将产生错误。在退出之前,您应该显式调用 XCloseDisplay,以便在 XCloseDisplay 执行最终 XSync 操作时报告任何未决错误。

    因此

    • 打开一次显示
    • 做你的事(创建窗口、接收/处理事件等)
    • 完成后(最后一个窗口关闭):关闭显示(一次)

    【讨论】:

      猜你喜欢
      • 2018-10-16
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 2016-03-30
      相关资源
      最近更新 更多