2013-06-14 5 views
5

मैं एक विंडो बनाने के लिए XResizeWindow() का उपयोग करने की कोशिश कर रहा हूं जो 2 मॉनीटरों का विस्तार करेगा, लेकिन विंडो प्रबंधक? इसे एक तक सीमित कर रहा है।एक्स 11 विंडो को कई मॉनीटर स्पैन करने के लिए कैसे करें

क्या कोई संकेत या संपत्ति है जो मैं खिड़की से जोड़ सकता हूं ताकि डब्लूएम को इसे सीमित न किया जा सके?

मेरे परीक्षण मामले के लिए, मेरे पास दो 1600x1200 मॉनीटर हैं जो एनवीडिया एक 3200x1200 स्क्रीन केडीई 4 के रूप में पेश कर रहा है। XDisplayWidth (प्रदर्शन, 0); 3200 और XDisplayHeight (प्रदर्शन, 0) देता है; रिटर्न 1200.

जब मैं 220,0 पर एक खिड़की 1700x930 के लिए

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

फोन मैं 0,0 पर एक खिड़की 1593x930 मिलता है, बाईं मॉनिटर पर पूरी तरह से यह ध्यान में रखते हुए। किसी भी XResizeWindow से बड़ा 1593 तक घट जाता है। (मुझे लगता है कि 7 पिक्सल खिड़की की सजावट हैं, जो ठीक है।)

लेकिन, यदि मैं तो XMoveWindow (प्रदर्शन, जीत, 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 

उत्तर

2

सामान्य तौर पर, एक आवेदन, सख्ती से अपनी खिड़की आकार और स्थिति को नियंत्रित करने के प्रयास नहीं करना चाहिए के रूप में 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); 

WMS min_width का सम्मान करेंगे और खिड़की इस की तुलना में छोटे हटना नहीं होंगे।

यदि आपको एकाधिक मॉनीटरों को फैलाने वाली पूर्णस्क्रीन विंडो की आवश्यकता है, तो यह अलग-अलग किया जाता है, here देखें।

+0

आह! Min_width सेट करना चाल करता है। एप्लिकेशन केवल आकार के बारे में कठोर होने का प्रयास करता है जब उपयोगकर्ता स्पष्ट रूप से एप्लिकेशन को बताता है कि वह विंडो कितना बड़ा चाहता है। इसलिए मैं स्क्रीन आकार की जांच कर सकता हूं और यदि यह काफी बड़ा है, तो इसे मैन्युअल रूप से min_width के साथ मजबूर करें, फिर आकार बदलने के बाद min_width को 640 पर वापस सेट करें। धन्यवाद! –

+1

प्रयुक्त-निर्दिष्ट आकार के लिए पी * के बजाय यूएसएसआईज़/यूएसमिन आकार आदि का उपयोग करने की आवश्यकता है (उपयोगकर्ता द्वारा निर्दिष्ट प्राथमिकताओं को और अधिक सम्मानित किया जाना चाहिए)। –

संबंधित मुद्दे