2013-06-14 26 views
5

XResizeWindow() kullanarak 2 monitör, ancak pencere yöneticisi olacak bir pencere yapmak için kullanmaya çalışıyorum? onu bire sınırlıyor.Nasıl yapılır: X11 pencere birden çok monitör yayılıyor

WM'yi sınırlamamasını söylemek için pencereyle ilişkilendirebileceğim bir ipucu veya özellik var mı?

Test durumum için, nVidia'nın KDE4'e bir 3200x1200 ekran olarak sunmakta olduğu iki 1600x1200 monitörüm var. XDisplayWidth (görüntü, 0); 3200 ve XDisplayHeight döndürür (ekran, 0); Ben 0,0 bir pencere 1593x930 olsun 220,0 bir pencere 1700x930 için

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

diyoruz sol monitörde tamamen tutarak zaman 1200.

döndürür. Bundan daha büyük olan herhangi bir XResizeWindow, 1593'e küçültülebilir. (7 pikselin pencere süslemesi olduğunu düşünüyorum.)

Ancak, XMoveWindow (ekran, win, 800, 0) ise, pencereyi hareket ettirir. Ekranları genişletmek için 3200'e kadar genişleyebilirim (eksi birkaç piksel).

Pencere yöneticisine veya bunu yapan kişilere, pencereyi tek bir monitörle sınırlamamaya ve ekranın tamamını kullanmama izin vermek için yapabileceğim bir şey var mı?

Teşekkürler! WM akıllı olmak ve mümkün olan en iyi şekilde pencereler yerleştirmek gerekiyordu olarak

%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 

cevap

2

Genelde, bir uygulama, esnemez bir pencere boyutu ve konumunu kontrol çalışmamalıdır.

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); 

WMS min_width saygı göstereceğiz ve bu daha küçük pencereyi küçültmek olmaz: Yine kontrol istiyorsanız, böyle XSizeHints kullanmayı deneyin.

Birden çok monitöre sahip tam ekran bir pencereye ihtiyacınız varsa, bu farklı bir şekilde yapılır, bkz. here.

+0

Aha! Min_width ayarı hile yapar. Uygulama, kullanıcının uygulamayı pencerenin ne kadar büyük olmasını istediğini açıkça bildirmesiyle yalnızca boyut konusunda katı olmaya çalışır. Bu yüzden, ekran boyutunu kontrol edebilirim ve eğer yeterince büyükse, elle min_width ile zorlayın, sonra yeniden boyutlandırıldıktan sonra min_width değerini 640 olarak ayarlayın. Teşekkür ederiz! –

+1

Kullanılmış belirtilen boyutta biri, P * yerine USSize/USMinSize vb. Kullanmalıdır (kullanıcı tarafından belirlenen tercihlere daha fazla saygı gösterilmesi gerekir). –

İlgili konular