3

我正在尝试以编程方式移动一个窗口,使其部分显示在屏幕上。例如,单击 VLC 标题栏并拖动它以便只有一半的窗口可见就可以了。

当我输出这个结果时wmctrl -lG效果很好:

0x04a00011  0 -293 138  600  420  HEVM002 VLC media player

但是,当我将其移回屏幕并尝试复制其位置时,它不起作用并将窗口剪辑到远端:

wmctrl -r "VLC media player" -e 0,-200,0,800,600

我已经在几个窗口管理器上进行了测试,它似乎在 xfwm 上运行良好,但在 compiz 上却不行。我可以设置一个标志或类似的东西来启用屏幕外的移动窗口吗?

4

1 回答 1

6

在窗口管理器下运行时,这完全取决于窗口管理器。是否有强制部分离屏位置的标志取决于它是哪个窗口管理器。

实现此目的的唯一窗口管理器不可知的方法是使窗口成为override_redirect窗口。但是,当然,这意味着不再管理窗口。再次使其成为普通窗口将导致窗口管理器再次对其进行管理,这可能再次取决于窗口管理器,这意味着再次强制它进入边界。

也就是说,查看 wmctrl 的源代码,_NET_MOVERESIZE_WINDOW如果窗口管理器支持,它会使用它,XMoveResizeWindow否则会回退到(或类似的)。但是,在第一种情况下,它将位置值转换为unsigned longfirst,这实际上意味着任何负值无论如何都会丢失。在第二种情况下,负值似乎表示“不要移动”,所以那里也没有运气。

您可以尝试使用xdotool windowmove它来正确处理负值。也许还考虑提交一个针对 wmctrl 的错误?

于 2016-04-11T12:49:20.583 回答