Как управлять укладкой окон на уровне приложений X11?

Есть ли способ иметь 2 окна в X11 по следующим критериям:

  • Второе окно всегда остается поверх первого
  • Второе окно не остается поверх окон других приложений
  • Нет мерцания при переключении окон
  • Оба окна должны быть окнами верхнего уровня (не друг под другом) и не блокировать

Создание второго модального почти работает, но оно блокирует первый, что нежелательно.

1 ответ

Вот как это можно сделать в Qt, создав немодальный QDialog виджеты.

#include <QObject>
#include <QApplication>
#include <QPushButton>
#include <QDialog>

int main(int argc, char **argv)
{
    QApplication a(argc, argv);

    QPushButton p1("moo", 0);

    QDialog d1(&p1);
    QPushButton p2("roo", &d1);

    QDialog d2(&p1);
    QPushButton p3("goo", &d2);

    QObject::connect(&p1, &QPushButton::clicked, [&](){p2.setText("w00t!");});
    QObject::connect(&p2, &QPushButton::clicked, [&](){p1.setText("n00t!");});
    QObject::connect(&p3, &QPushButton::clicked, [&](){p1.setText("eh?"); p2.setText("meh!");});

    p1.resize(400, 400);
    p2.resize(200, 200);
    p3.resize(200, 200);

    p1.show();
    p2.show();
    p3.show();
    d1.show();
    d2.show();

    return a.exec();
}

Насколько я могу судить, все ваши условия выполнены.

Другие вопросы по тегам