2010-08-24 8 views
6

(देखें संपादन)मैं नो-टैब करते समय जीनोम को दो विंडो दिखाने से कैसे रोक सकता हूं? (C++ क्यूटी एप्लिकेशन)

मैं एक क्यूटी/C++ Gnome के अंतर्गत आवेदन के विकास कर रहा हूँ।

एप्लिकेशन एक मुख्य विंडो और QListBox बाल विंडो एप्लिकेशन।

जब मैं एप्लिकेशन से alt-tab दूर करता हूं तो ये दोनों विंडो अलग-अलग मुख्य विंडो के रूप में दिखाई देती हैं।

मैं इसे कैसे बना सकता हूं ताकि जब मैं (या बाद में उपयोगकर्ता) alt-tab का उपयोग करता है तो केवल एक विंडो दिखाई देगी?

मुझे लगता है कि यह व्यवहार आता है क्योंकि एक मुख्य विंडो सबविंडो को क्लिप नहीं करती है - सबविंडो मुख्य विंडो की सीमा बढ़ाता है। जीनोम में कई अन्य अनुप्रयोगों के लिए भी खराब alt-tab व्यवहार है, जो मुख्य विंडो से अलग-अलग मोडल डायलॉग बॉक्स दिखा रहा है। लेकिन मेरे ऐप के मामले में, यह वास्तव में कष्टप्रद है।

मुझे लगता है कि मैं एक विशाल पारदर्शी खिड़की बना सकता हूं जिसमें मौजूदा विंडोज़ दोनों शामिल हैं। लेकिन यह एक "साफ" समाधान खोजने के लिए अच्छा होगा।

(। सबसे तार्किक अनुमान यह खिड़की झंडे के साथ कुछ करने के लिए है कि वास्तव में मैं झंडे के हर उचित संयोजन मैं के बारे में सोच सकता है की कोशिश की है खिड़की प्रकार here वर्णित हैं।)

संपादित करें: ऐप में एक क्यूविजेट है जो इसकी मुख्य विंडो (QMainWindow नहीं) के रूप में है, QListView QWidget ऑब्जेक्ट में निहित है और मुख्य विंडो पर एक बिंदु पारित करके बनाया गया है। क्यूटी :: टूल | के साथ स्टाइल है क्यूटी :: FramelessWindowHint।

EDIT2: क्यूटी :: X11BypassWindowManagerHint शैली ऑल्ट-टैब सूची से खिड़की को दूर करने के काम करता है। समस्या यह है कि यह खिड़की को "अप्रबंधित" बनाता है ताकि यह अन्य खिड़कियों को कवर कर सके। जब भी मैं फोकस खो देता हूं तो मैं मैन्युअल रूप से छिप सकता हूं - बेहतर समाधान के लिए अब पुरस्कार।

+1

मुझे लगता है कि खिड़की के झंडे के साथ इसका कुछ संबंध है ... उदाहरण के लिए, यदि आपने इसे टूल विंडो बनाया है, तो क्या यह दोनों तब होगा? जब मैं खुले कार्यालय का उपयोग करता हूं, उदाहरण के लिए, gnome अपने फ़्लोटिंग टूल विंडो के माध्यम से टैब नहीं करता है, लेकिन केवल मुख्य वाले हैं। –

+0

मुझे लगता है कि QListBox के माता-पिता विंडो पॉइंटर को QMainWindow पर सेट किया गया है? इस मुद्दे को उत्पन्न करने के लिए न्यूनतम आवश्यक कोड के कंकाल पर कोई मौका? – sleepynate

उत्तर

3

अपनी QListBox विंडो के लिए विंडो बनाने के दौरान अपने निर्माता में Qt::Tool विंडो ध्वज सेट करें या बाद में setWindowFlags फ़ंक्शन कॉल के साथ सेट करें।

 
int main(int argc, char** argv) 
{ 
    QApplication app(argc, argv); 
    QMainWindow mw; 
    mw.show(); 
    QWidget toolWindow(&mw, Qt::Window|Qt::Tool); 
    QHBoxLayout layout(&toolWindow); 
    toolWindow.setLayout(&layout); 
    QListView lv(&toolWindow); 
    layout.addWidget(&lv); 
    toolWindow.show(); 

    return app.exec(); 
}

मैं हाल में बनाए गए उपयोगकर्ता के साथ अपने डेबियन sid बॉक्स पर यह परीक्षण किया है (ग्नोम 2.30, मेटासिटी 2.30.1): यहाँ कुछ कोड का टुकड़ा (मैं छोड़ा गया शीर्षलेख) है image proof on answer to question #3553428

यदि यह वही नहीं है जो आप चाहते थे, तो कृपया सही सॉफ़्टवेयर का नाम दें या आप इसे स्वयं देख सकते हैं। टर्मिनल विंडो में xprop चलाने के लिए और उस विंडो पर क्लिक करें जिसमें आप रुचि रखते हैं। आउटपुट में विंडो झंडे होंगे। जिसकी आप रुचि रखते हैं वह _NET_WM_WINDOW_TYPE(ATOM) है। उपकरण खिड़की (यानी ऑल्ट-टैब में सूचीबद्ध नहीं) के लिए इस ध्वज है:

_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_UTILITY, _NET_WM_WINDOW_TYPE_NORMAL 

इन झंडे के साथ खिड़की एक टूलबॉक्स खिड़की नहीं है तो कुछ अपने विंडो प्रबंधक साथ कुछ गड़बड़ है या आप व्यक्तिगत रूप से इस तरह के व्यवहार की स्थापना की है ।

+0

ठीक है, आपको एकमात्र जवाब मिल गया है - समस्या यह है कि आप गलत हैं। मैं बस बंद कर दूंगा। शायद अगर आप मेरे प्रश्न में टिप्पणियों को प्रतिबिंबित करने के लिए संपादित करते हैं तो इसे पुरस्कृत करें ... –

+0

ठीक है, मुझे लगता है कि समाधान मेरे संपादन में है - आपको इसकी सभी समस्याओं के साथ Qt :: X11BypassWindowManagerHint शैली का उपयोग करने की आवश्यकता है। लेकिन हे, अगर आप इतनी परेशानी कर चुके हैं, तो आप किसी और के मुकाबले करीब हैं ... –

+0

लेकिन फ्रिकिन स्टैक ओवरफ़्लो ने बोनस खा लिया होगा क्योंकि मैं उन्हें दिखाई नहीं दे रहा हूं। बुरा एसओ यह जगह वह नहीं है जो इसका उपयोग करती थी ... –

1

आप इसे wmctrl टूल के साथ हाथ से आजमा सकते हैं। "-r -b कुछ" के साथ आप NET_WM तर्कों को संशोधित कर सकते हैं। इन्हें [1] में आज़माएं।

यदि यह काम करता है, तो आप उन्हें एक्सलिब-कॉल के साथ जोड़ सकते हैं (यदि आपको क्यूटी से एक्स 11 विंडो नंबर पता है।मुझे यकीन है कि यह संभव है)।

[1] http://standards.freedesktop.org/wm-spec/1.3/ar01s05.html 
संबंधित मुद्दे

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