在窗口上创建“叠加”

时间:2009-10-02 06:20:36

标签: c linux x11 vala

是否可以创建一个窗口作为另一个窗口的叠加层,例如,您可以在窗口的标题栏或状态栏中显示的图标?

为了这个问题的目的,假设:

  • 窗口是外窗(不属于我的应用程序)
  • 叠加层为16x16像素,背景为透明
  • 叠加显示非常靠近窗口的右上角,并且应该相对于窗口的右上边框保持定位。
  • 叠加层有兴趣处理鼠标左键单击而没有其他输入。
  • 叠加层应该永远不会有输入焦点,它应该知道它何时被点击。

如果有可能,怎么办呢?我试图创建一个窗口并在正确的位置显示它,但我从来没有看到它;就好像它不存在一样。我获取 Window句柄,甚至可以将其转换为GdkWindow对象,但我无法达到它的目的。

ETA :可以在线找到我想要做的示例,first without what I'm trying to doagain with it。在这种情况下,请查看右侧的菜单栏。我想为任意应用程序执行此操作,并让用户能够单击该小图标以“停靠”窗口。

2 个答案:

答案 0 :(得分:1)

窗口管理器的工作方式是通过一个新窗口并添加窗口的装饰 作为窗口的新窗口的“父”。

您可以使用XReparent()窗口api在窗口管理器的装饰窗口和现有窗口之间插入窗口。

答案 1 :(得分:0)

应该可以仅使用GDK命令来执行此操作,因为它们或多或少地映射到Xlib的相同调用中。也许你没有考虑到你应该以某种方式处理暴露事件(那些不是发送到您的应用程序,而是发送给外国的事件)? 顺便说一句,你究竟如何将XWindow手柄转换为GtkWindow?