كيف يمكنني منع GNOME من إظهار نوافذ عند القيام ببديل؟ (C ++ QT App)

StackOverflow https://stackoverflow.com/questions/3553428

سؤال

(انظر التعديلات)

أقوم بتطوير تطبيق QT/C ++ تحت Gnome.

التطبيق نافذة رئيسية ونافذة QListbox Child.

يظهر كل من هذين النوافذ كنوافذ رئيسية منفصلة عندما أقوم بتبريد التطبيق.

كيف يمكنني صنعها بحيث يتم عرض نافذة واحدة فقط عندما يستخدم (أو لاحقًا المستخدم) ALT-TAB؟

أظن أن هذا السلوك يأتي لأن نافذة رئيسية واحدة لا تقطع الرياح الفرعية - يمتد الريف الفرعي حدود النافذة الرئيسية. لدى Gnome سلوك سيئ البديل لعدد من التطبيقات الأخرى أيضًا ، مما يوضح مربعات الحوار الوسيطة بشكل منفصل عن النوافذ الرئيسية. ولكن في حالة تطبيقي ، هذا مزعج حقًا.

أفكر في أنه يمكنني صنع نافذة شفافة عملاقة تتضمن كلتا النوافذ الموجودة. ولكن سيكون من أجمل العثور على حل "نظيف".

(التخمين الأكثر منطقية هو في الواقع أن له علاقة بأعلام النوافذ. لقد جربت كل مجموعة معقولة من الأعلام التي يمكن أن أفكر فيها. يتم وصف أنواع النوافذ هنا)

تحرير: يحتوي التطبيق على QWidget كنافذة رئيسية (وليس Qmainwindow) ، ويرد QListView في كائن QWidget ويتم إنشاؤه عن طريق تمرير نقطة إلى النافذة الرئيسية. تم تصميمه باستخدام QT :: Tool | qt :: framelesswindowhint.

EDIT2: The QT :: x11bypasswindowmanagerhint نمط يفعل اعمل على إزالة النافذة من قائمة TAB ALT. المشكلة هي أنها تجعل النافذة "غير مُدارة" أيضًا بحيث تغطي النوافذ الأخرى. يمكن أن أختبئ مُلكما كلما فقدت التركيز - جائزة الآن لحل أفضل.

هل كانت مفيدة؟

المحلول

عند إنشاء نافذة لك 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();
}

لقد اختبرت ذلك على صندوق Debian Sid الخاص بي (Gnome 2.30 ، Metacity 2.30.1) مع مستخدم تم إنشاؤه حديثًا: image proof on answer to question #3553428.

إذا لم يكن هذا ما تريده ، فيرجى تسمية البرنامج الذي يعمل بشكل صحيح أو يمكنك التحقق منه بنفسك. للقيام بهذا المدى xprop في النافذة الطرفية وانقر على النافذة التي تهتم بها. سيحتوي الإخراج على أعلام نافذة. الشخص الذي تهتم به _NET_WM_WINDOW_TYPE(ATOM). بالنسبة إلى نافذة الأداة (أي غير مدرجة في ALT-TAB) ، فإن هذا العلم هو:

_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_UTILITY, _NET_WM_WINDOW_TYPE_NORMAL

إذا لم تكن النافذة التي تحتوي على هذه الأعلام نافذة مربع أدوات ، فسيكون هناك خطأ ما في مدير النافذة الخاص بك أو قمت بتعيين مثل هذا السلوك شخصيًا.

نصائح أخرى

يمكنك تجربتها باليد باستخدام أداة WMCTRL. مع "-r -b شيء" ، يمكنك تعديل وسيطات Net_wm إليها. جرب هذه في [1].

إذا نجح هذا ، فيمكنك إضافتها باستخدام XLIB-Cards (إذا تعرفت على رقم نافذة X11 من QT. أنا متأكد من أن هذا ممكن).

[1] http://standards.freedesktop.org/wm-spec/1.3/ar01s05.html
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top