diff options
Diffstat (limited to 'src/plugins/platforms/eglfs/deviceintegration')
13 files changed, 53 insertions, 29 deletions
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro index d65e136a96..7f1e7b9f59 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro @@ -2,7 +2,7 @@ TARGET = qeglfs-brcm-integration QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private -INCLUDEPATH += $$PWD/../.. +INCLUDEPATH += $$PWD/../../api CONFIG += egl LIBS += -lbcm_host diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro index 70ff054172..10571dc978 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro @@ -6,7 +6,7 @@ load(qt_plugin) QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private eglfs_kms_support-private -INCLUDEPATH += $$PWD/../.. $$PWD/../eglfs_kms_support +INCLUDEPATH += $$PWD/../../api $$PWD/../eglfs_kms_support # Avoid X11 header collision, use generic EGL native types DEFINES += QT_EGL_NO_X11 diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp index 99f6cfb0ca..3a220ec942 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp @@ -42,7 +42,7 @@ #include "qeglfskmsgbmdevice.h" #include "qeglfskmsgbmscreen.h" -#include "qeglfsintegration.h" +#include "qeglfsintegration_p.h" #include <QtCore/QLoggingCategory> #include <QtCore/private/qcore_unix_p.h> diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp index dde386fc57..75ff3ac749 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp @@ -42,7 +42,7 @@ #include "qeglfskmsgbmscreen.h" #include "qeglfskmsgbmdevice.h" #include "qeglfskmsgbmcursor.h" -#include "qeglfsintegration.h" +#include "qeglfsintegration_p.h" #include <QtCore/QLoggingCategory> diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro index 5f47b98369..582982df76 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro @@ -2,7 +2,7 @@ TARGET = qeglfs-kms-egldevice-integration QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private eglfs_kms_support-private -INCLUDEPATH += $$PWD/../.. $$PWD/../eglfs_kms_support +INCLUDEPATH += $$PWD/../../api $$PWD/../eglfs_kms_support # Avoid X11 header collision, use generic EGL native types DEFINES += QT_EGL_NO_X11 diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro index 464c64539f..f88a7c847e 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro @@ -4,7 +4,7 @@ load(qt_module) QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private -INCLUDEPATH += $$PWD/../.. +INCLUDEPATH += $$PWD/../../api # Avoid X11 header collision, use generic EGL native types DEFINES += QT_EGL_NO_X11 diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.cpp index 5944e8d51f..bf96a7d683 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.cpp @@ -42,7 +42,7 @@ #include "qeglfskmsdevice.h" #include "qeglfskmsscreen.h" -#include "qeglfsintegration.h" +#include "qeglfsintegration_p.h" #include <QtCore/QLoggingCategory> #include <QtCore/private/qcore_unix_p.h> @@ -159,7 +159,9 @@ static bool parseModeline(const QByteArray &text, drmModeModeInfoPtr mode) return true; } -QEglFSKmsScreen *QEglFSKmsDevice::createScreenForConnector(drmModeResPtr resources, drmModeConnectorPtr connector, int *virtualIndex) +QEglFSKmsScreen *QEglFSKmsDevice::createScreenForConnector(drmModeResPtr resources, + drmModeConnectorPtr connector, + VirtualDesktopInfo *vinfo) { const QByteArray connectorName = nameForConnector(connector); @@ -192,8 +194,16 @@ QEglFSKmsScreen *QEglFSKmsDevice::createScreenForConnector(drmModeResPtr resourc qWarning("Invalid mode \"%s\" for output %s", mode.constData(), connectorName.constData()); configuration = OutputConfigPreferred; } - if (virtualIndex) - *virtualIndex = userConnectorConfig.value(QStringLiteral("virtualIndex"), INT_MAX).toInt(); + if (vinfo) { + *vinfo = VirtualDesktopInfo(); + vinfo->virtualIndex = userConnectorConfig.value(QStringLiteral("virtualIndex"), INT_MAX).toInt(); + if (userConnectorConfig.contains(QStringLiteral("virtualPos"))) { + const QByteArray vpos = userConnectorConfig.value(QStringLiteral("virtualPos")).toByteArray(); + const QByteArrayList vposComp = vpos.split(','); + if (vposComp.count() == 2) + vinfo->virtualPos = QPoint(vposComp[0].trimmed().toInt(), vposComp[1].trimmed().toInt()); + } + } const uint32_t crtc_id = resources->crtcs[crtc]; @@ -357,22 +367,24 @@ QEglFSKmsDevice::~QEglFSKmsDevice() struct OrderedScreen { - OrderedScreen() : screen(nullptr), index(-1) { } - OrderedScreen(QEglFSKmsScreen *screen, int index) : screen(screen), index(index) { } + OrderedScreen() : screen(nullptr) { } + OrderedScreen(QEglFSKmsScreen *screen, const QEglFSKmsDevice::VirtualDesktopInfo &vinfo) + : screen(screen), vinfo(vinfo) { } QEglFSKmsScreen *screen; - int index; + QEglFSKmsDevice::VirtualDesktopInfo vinfo; }; QDebug operator<<(QDebug dbg, const OrderedScreen &s) { QDebugStateSaver saver(dbg); - dbg.nospace() << "OrderedScreen(" << s.screen << " : " << s.index << ")"; + dbg.nospace() << "OrderedScreen(" << s.screen << " : " << s.vinfo.virtualIndex + << " / " << s.vinfo.virtualPos << ")"; return dbg; } static bool orderedScreenLessThan(const OrderedScreen &a, const OrderedScreen &b) { - return a.index < b.index; + return a.vinfo.virtualIndex < b.vinfo.virtualIndex; } void QEglFSKmsDevice::createScreens() @@ -390,10 +402,10 @@ void QEglFSKmsDevice::createScreens() if (!connector) continue; - int virtualIndex; - QEglFSKmsScreen *screen = createScreenForConnector(resources, connector, &virtualIndex); + VirtualDesktopInfo vinfo; + QEglFSKmsScreen *screen = createScreenForConnector(resources, connector, &vinfo); if (screen) - screens.append(OrderedScreen(screen, virtualIndex)); + screens.append(OrderedScreen(screen, vinfo)); drmModeFreeConnector(connector); } @@ -411,11 +423,15 @@ void QEglFSKmsDevice::createScreens() for (const OrderedScreen &orderedScreen : screens) { QEglFSKmsScreen *s = orderedScreen.screen; // set up a horizontal or vertical virtual desktop - s->setVirtualPosition(pos); - if (m_integration->virtualDesktopLayout() == QEglFSKmsIntegration::VirtualDesktopLayoutVertical) - pos.ry() += s->geometry().height(); - else - pos.rx() += s->geometry().width(); + if (orderedScreen.vinfo.virtualPos.isNull()) { + s->setVirtualPosition(pos); + if (m_integration->virtualDesktopLayout() == QEglFSKmsIntegration::VirtualDesktopLayoutVertical) + pos.ry() += s->geometry().height(); + else + pos.rx() += s->geometry().width(); + } else { + s->setVirtualPosition(orderedScreen.vinfo.virtualPos); + } qCDebug(qLcEglfsKmsDebug) << "Adding screen" << s << "to QPA with geometry" << s->geometry(); // The order in qguiapp's screens list will match the order set by // virtualIndex. This is not only handy but also required since for instance diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.h index 4aad2e0143..3e7ac7e3f0 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.h +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.h @@ -53,6 +53,12 @@ QT_BEGIN_NAMESPACE class Q_EGLFS_EXPORT QEglFSKmsDevice { public: + struct VirtualDesktopInfo { + VirtualDesktopInfo() : virtualIndex(0) { } + int virtualIndex; + QPoint virtualPos; + }; + QEglFSKmsDevice(QEglFSKmsIntegration *integration, const QString &path); virtual ~QEglFSKmsDevice(); @@ -79,7 +85,9 @@ protected: quint32 m_connector_allocator; int crtcForConnector(drmModeResPtr resources, drmModeConnectorPtr connector); - QEglFSKmsScreen *createScreenForConnector(drmModeResPtr resources, drmModeConnectorPtr connector, int *virtualIndex); + QEglFSKmsScreen *createScreenForConnector(drmModeResPtr resources, + drmModeConnectorPtr connector, + VirtualDesktopInfo *vinfo); drmModePropertyPtr connectorProperty(drmModeConnectorPtr connector, const QByteArray &name); static void pageFlipHandler(int fd, diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp index f690cd668e..e4b6c67f28 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp @@ -41,7 +41,7 @@ #include "qeglfskmsscreen.h" #include "qeglfskmsdevice.h" -#include "qeglfsintegration.h" +#include "qeglfsintegration_p.h" #include <QtCore/QLoggingCategory> diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro index 6e32ca26d0..e72f5bdd14 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro @@ -5,7 +5,7 @@ QT += core-private gui-private platformsupport-private eglfsdeviceintegration-pr # Avoid X11 header collision, use generic EGL native types DEFINES += QT_EGL_NO_X11 -INCLUDEPATH += $$PWD/../.. +INCLUDEPATH += $$PWD/../../api CONFIG += egl QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro index 16880535e3..364812ec60 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro @@ -2,7 +2,7 @@ TARGET = qeglfs-viv-integration QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private -INCLUDEPATH += $$PWD/../.. +INCLUDEPATH += $$PWD/../../api CONFIG += egl DEFINES += LINUX=1 EGL_API_FB=1 QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro index 374c5bba6b..ccdf20b417 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro @@ -2,7 +2,7 @@ TARGET = qeglfs-viv-wl-integration QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private -INCLUDEPATH += $$PWD/../.. +INCLUDEPATH += $$PWD/../../api CONFIG += egl DEFINES += LINUX=1 EGL_API_FB=1 QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro index 10af57e487..51a026e2cf 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro @@ -5,7 +5,7 @@ QT += core-private gui-private platformsupport-private eglfsdeviceintegration-pr # Avoid X11 header collision, use generic EGL native types DEFINES += QT_EGL_NO_X11 -INCLUDEPATH += $$PWD/../.. +INCLUDEPATH += $$PWD/../../api CONFIG += egl QMAKE_USE += xcb_xlib |