wayland-weston デスクトップ システムで 2 つのアプリケーションのフォーカスを配置したいと考えています。2 つのアプリケーションは次のとおりです。
- Qt/QML で書かれたフルスクリーン
- Wayland Client API + OpenGL、フルスクリーンで作成
どちらかを殺してリスポーンしても、App#1 を常に上に、App#2 を常に下に維持したいと考えています。どちらもフルスクリーンアプリである間にこれを行いたいと思います。
私は調査し、これを達成するためのいくつかの方法を見つけました:
デスクトップシステムでウィンドウを配置するために使用
wmctrl
:これを試しました。しかし、私は得るCannot open display.
。wmctrl
Weston/XWayland では動作せず、X11 でのみ動作することが後でわかりました。したがって、これはもはやオプションではないと思います。App#1 (Qt/QML) をデフォルトで常に一番上にします: これを解決するために試したことは、main.qml に以下を追加したことです:
ApplicationWindow { visible: true visibility: "FullScreen" width: 1920 height: 720 flags: Qt.WindowStaysOnTopHint|Qt.FramelessWindowHint MainScreen{ anchors.fill: parent } }
App#2 (Wayland Client API/OpenGL) をデフォルトで常に一番下にします。正直なところ、私は Wayland Client API にあまり詳しくありませんが、このようなことが可能であれば、いくつかのガイダンスで調べることができます。
現在、私の焦点は Qt アプリケーションを常にトップに置くことです。私の PC では動作しますが、ターゲット プラットフォームでは動作しません。私のPCはXorgを搭載したUbuntu 16.04です。ターゲット プラットフォームには、xwayland バックエンドを備えた Weston コンポジターがあります。ターゲットで機能しない理由がわかりません。それはおそらくデスクトップシステムです。ガイダンスやアイデアをいただければ幸いです。ありがとう
編集: main.cpp
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
main.qmlを編集
import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Window 2.2
import "app/main"
ApplicationWindow {
visible: true
visibility: "FullScreen"
maximumWidth: 1920
maximumHeight: 720
minimumWidth: 1920
minimumHeight: 720
width: 1920
height: 720
title: qsTr("App")
flags: Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint
MainScreen{
anchors.fill: parent
}
}
編集: PC上のQtバージョンQt 5.10.1、ターゲットプラットフォーム上のQt 5.8.0