【问题标题】:Creating subwindow fails with BadRegion?BadRegion 创建子窗口失败?
【发布时间】:2021-12-10 01:18:26
【问题描述】:

在尝试修复https://stackoverflow.com/a/69647995?noredirect=1 时,我有一个想法;如果我在框架窗口的子窗口中绘制了东西(未能直接在窗口上绘制)怎么办?看起来像 Openbox 这样的其他 WM 也采用了这种方法。

所以我尝试这样做:

 let text_win = self.conn.generate_id()?;
        let text_win_aux = xproto::CreateWindowAux::new()
            .event_mask(
                xproto::EventMask::EXPOSURE
                    | xproto::EventMask::SUBSTRUCTURE_REDIRECT
                    | xproto::EventMask::SUBSTRUCTURE_NOTIFY
                    | xproto::EventMask::BUTTON_PRESS
                    | xproto::EventMask::BUTTON_RELEASE
                    | xproto::EventMask::POINTER_MOTION
                    | xproto::EventMask::ENTER_WINDOW
                    | xproto::EventMask::PROPERTY_CHANGE,
            )
            .background_pixel(0xFFFFFF);
        self.conn.create_window(
            COPY_DEPTH_FROM_PARENT,
            text_win,
            frame_win,
            15,
            15,
            60,
            25,
            0,
            xproto::WindowClass::INPUT_OUTPUT,
            screen.root_visual,
            &text_win_aux,
        )?;
        self.conn.map_window(text_win)?

但它不起作用(没有呈现白色矩形),而且看起来我也收到了 BadRegion 错误。 我期望的是在框架窗口上呈现一个白色矩形(因为孩子的 background_pixel 是白色的,我将它映射到框架)。 我可能做错了什么?顺便说一句,这似乎不受深度的影响。

【问题讨论】:

  • 在问题本身中包含完整的问题(不要在链接中留下部分描述)
  • 如果这就是你的意思,也将“不起作用”改为“什么都不做”。
  • 这是什么语言?看起来有点像 C# 什么的
  • 语言是 Rust。为什么我要把“不起作用”改为“什么都不做”?代码没有按预期工作,所以我认为术语非常好。完整的问题在这里,链接只是说明我为什么尝试这个;但实际问题的问题都在这里。
  • 因为“不起作用”非常不具体,并且不能帮助回答者诊断问题。 “一个窗口弹出并立即消失”,“它显示错误消息ABC”,“它使计算机崩溃”是特定的。

标签: rust x11


【解决方案1】:

我想通了。 “text_win”需要使用与框架窗口相同的视觉效果;我不小心改用了 X11 屏幕的根视觉效果。

所以这个 create_window 调用按预期运行:

    .background_pixel(0xFFFFFF);
        self.conn.create_window(
            COPY_DEPTH_FROM_PARENT,
            text_win,
            frame_win,
            15,
            15,
            60,
            25,
            0,
            xproto::WindowClass::INPUT_OUTPUT,
            attr.visual,
            &text_win_aux,
        )?;

(另外,我发现 BadRegion 是别的东西,它是一个 xcompmgr 错误,与此无关)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2012-07-22
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多