2013-06-14 9 views
5

Sto provando a utilizzare XResizeWindow() per creare una finestra che occuperà 2 monitor, ma il? Window manager? lo sta limitando a uno.Come rendere la finestra X11 estesa a più monitor

C'è un suggerimento o una proprietà che posso associare alla finestra per dire al WM di non limitarlo?

Per il mio caso di test, ho due monitor 1600x1200 che nVidia presenta come uno schermo 3200x1200 su KDE4. XDisplayWidth (display, 0); restituisce 3200 e XDisplayHeight (display, 0); restituisce 1200.

Quando chiamo

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

di 1700x930 finestra al 220,0 ottengo una finestra di 1593x930 a 0,0, mantenendolo interamente sul monitor di sinistra. Qualsiasi XResizeWindow più grande di quello viene ridotto a 1593. (Suppongo che i 7 pixel siano decorazione della finestra, che va bene.)

Ma, se io XMoveWindow (visualizzazione, vinci, 800, 0), si sposterà la finestra per allargare gli schermi e posso quindi ingrandirlo fino a 3200 di larghezza (meno pochi pixel).

C'è qualcosa che posso fare per dire al window manager, oa chiunque stia facendo questo, non limitare la finestra ad un singolo monitor, e lasciarmi usare l'intero schermo?

Grazie!

%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 

risposta

2

In generale, un'applicazione non deve cercare di controllare rigidamente le dimensioni e posizione delle finestre, come si suppone WM essere intelligenti e posizionare le finestre nel miglior modo possibile. Se si desidera controllare in ogni caso, provare a utilizzare XSizeHints come questo:

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 rispetteranno min_width e non si ridurrà la finestra più piccola di questo.

Se è necessaria una finestra a schermo intero che si estende su più monitor, questa operazione viene eseguita in modo diverso, vedere here.

+0

Aha! L'impostazione di min_width fa il trucco. L'applicazione cerca di essere rigida sulla dimensione solo quando l'utente dice esplicitamente all'applicazione quanto vuole che fosse la finestra. Così posso controllare le dimensioni dello schermo e se è abbastanza grande, forzarlo manualmente con min_width, quindi ridimensionare min_width a 640 dopo che è stato ridimensionato. Grazie! –

+1

Per la dimensione specificata utilizzata è necessario utilizzare USSize/USMinSize ecc anziché il P * (le preferenze specificate dall'utente devono essere rispettate di più). –

Problemi correlati