Вопрос 1
Можно ли средствами Qt отобразить окно так, чтоб его не увидел пользователь и проигнорировал WM?
Пояснение к вопросу
Недавно я поймал баг в Dolphin: при генерации превьюшек для html-файлов появляются ненужные окна, которые захватывают фокус и таким образом мешают работать (в отчёте по ссылке имеется видео). Если файлов в каталоге много, то это происходит долго и парализует всю DE, и единственный выход — так или иначе закрыть dolphin, поймав момент. Важно, что происходит это только в Wayland-сессии. В Xorg ничего такого нет.
Если я правильно понял (а я понятия не имею, как работает KDE и Qt), генерация изображения происходит в плагине, который предоставляет Konqueror. Видимо, это его самое сердце: https://github.com/KDE/konqueror/blob/56c8860135e64a04235fc44bb609408847c0ca2c/plugins/webarchiver/thumbnailer/webarchivecreator.cpp#L91
Суть метода, как я понял, такова (убрал лишнее и раскрыл ifdef’ы):
QWebEngineView view;
// ...
view.load(indexUrl);
// ...
view.setAttribute(Qt::WA_ShowWithoutActivating);
view.setAttribute(Qt::WA_OutsideWSRange);
view.setWindowFlags(view.windowFlags()|Qt::BypassWindowManagerHint|Qt::FramelessWindowHint);
view.move(5000, 5000);
view.show();
//...
QPixmap pix(pixSize);
// ...
view.render(&pix); // render the view into the pixmap
view.hide(); // finished with the view and page
// ...
То есть формируется окно далеко за пределами разрешения монитора (хотя по нынешним временам не очень-то далеко), там всё рисуется, потом окно убирается.
Вопрос 1.1
Правильно ли я понимаю, что в Wayland игнорируются атрибуты WA_ShowWithoutActivating
, BypassWindowManagerHint
и метод move
? Я слышал, что в Wayland нельзя отобразить окно там, где хочет приложение.
Вопрос 2
Как реализовать рендеринг html в файл, минуя экран, средствами Qt в Wayland?
Этот вопрос мучает не только меня, как оказалось, хотя в том случае Wayland прямо не упоминается, но драма примерно такая же.
Заключение
Понятно, что, во-первых, превью html-файлов — не слишком нужная вещь, во-вторых, можно (наверное) принудительно скрывать эти лишние окна с помощью настроек kwin. Но, во-первых, мне просто интересно, а во-вторых, автор приложения не может гарантировать, что работает именно в kwin.