6

我正在尝试使用 XResizeWindow() 创建一个跨越 2 个监视器的窗口,但是 ? 窗口管理器?将其限制为一个。

是否有我可以与窗口关联的提示或属性来告诉 WM 不要限制它?

对于我的测试案例,我有两台 1600x1200 显示器,nVidia 将它们作为一个 3200x1200 屏幕呈现给 KDE4。XDisplayWidth(显示, 0); 返回 3200 和 XDisplayHeight(display, 0); 返回 1200。

当我打电话

XCreateWindow(display, DefaultRootWindow(display),
              220, 0, 1700, 930,
              1, DefaultDepth(display,screen),
              InputOutput, CopyFromParent,
              CWCursor, &attributes);

对于 220,0 的 1700x930 窗口,我在 0,0 得到一个 1593x930 的窗口,将其完全保留在左侧显示器上。任何大于该值的 XResizeWindow 都会缩小到 1593。(我假设 7 个像素是窗口装饰,这很好。)

但是,如果我然后 XMoveWindow(display, win, 800, 0),它将移动窗口以跨越屏幕,然后我可以将其放大到 3200 宽(减去几个像素)。

有什么我可以告诉窗口管理器或执行此操作的人,不要将窗口限制为单个监视器,让我使用整个屏幕吗?

谢谢!

%xrandr -q --verbose
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 3200 x 1200, current 3200 x 1200, maximum 3200 x 1200
default connected 3200x1200+0+0 (0x161) normal (normal) 0mm x 0mm
    Identifier: 0x160
    Timestamp:  64409661
    Subpixel:   unknown
    Clones:    
    CRTC:       0
    CRTCs:      0
    Transform:  1.000000 0.000000 0.000000
                0.000000 1.000000 0.000000
                0.000000 0.000000 1.000000
               filter: 
3200x1200 (0x161)  192.0MHz *current
    h: width  3200 start    0 end    0 total 3200 skew    0 clock   60.0KHz
    v: height 1200 start    0 end    0 total 1200           clock   50.0Hz
4

1 回答 1

4

通常,应用程序不应试图严格控制其窗口大小和位置,因为 WM 应该是智能的,并且应该以最佳方式放置窗口。如果您仍然想要控制,请尝试XSizeHints像这样使用:

XSizeHints sh;
sh.width = sh.min_width = 1700;
sh.height = sh.min_height = 930;
sh.h = 220;
sh.y = 0;
sh.flags = PSize | PMinSize | PPosition;
XSetWMNormalHints(dpy, win, &sh);
XMapWindow(dpy, win);

WM 将尊重min_width并且不会缩小比这更小的窗口。

如果您需要跨多个监视器的全屏窗口,则使用_NET_WM_FULLSCREEN_MONITORS属性以不同的方式完成。见这里

于 2013-06-15T00:08:52.503 回答