mirror of
https://invent.kde.org/plasma/layer-shell-qt.git
synced 2026-07-10 05:20:23 -04:00
Compare commits
14 Commits
v6.6.3
...
work/zzag/
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4e4f3c48ac | ||
|
|
7da48d8af4 | ||
|
|
4488263f94 | ||
|
|
168d51c848 | ||
|
|
c0888c1fc8 | ||
|
|
9feb153716 | ||
|
|
ba986ea573 | ||
|
|
8be764bb9a | ||
|
|
aac600107a | ||
|
|
9c02b52291 | ||
|
|
15f108b536 | ||
|
|
dd76feea81 | ||
|
|
430ad3630f | ||
|
|
68df285294 |
@@ -9,4 +9,4 @@ Dependencies:
|
||||
'third-party/wayland-protocols': '@latest'
|
||||
|
||||
Options:
|
||||
require-passing-tests-on: ['Linux', 'FreeBSD', 'Windows']
|
||||
require-passing-tests-on: ['@all']
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
project(layershellqt)
|
||||
set(PROJECT_VERSION "6.6.3")
|
||||
set(PROJECT_VERSION "6.7.80")
|
||||
set(PROJECT_VERSION_MAJOR 6)
|
||||
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
|
||||
set(QT_MIN_VERSION "6.10.0")
|
||||
set(KF6_MIN_VERSION "6.22.0")
|
||||
set(KF6_MIN_VERSION "6.26.0")
|
||||
set(KDE_COMPILERSETTINGS_LEVEL "5.82")
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
@@ -36,9 +36,7 @@ include(ECMGenerateExportHeader)
|
||||
|
||||
find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS WaylandClient Qml)
|
||||
|
||||
if (Qt6WaylandClient_VERSION VERSION_GREATER_EQUAL "6.10.0")
|
||||
find_package(Qt6WaylandClientPrivate ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE)
|
||||
endif()
|
||||
find_package(Qt6WaylandClientPrivate ${QT_MIN_VERSION} REQUIRED NO_MODULE)
|
||||
|
||||
find_package(WaylandScanner REQUIRED)
|
||||
find_package(Wayland 1.3 COMPONENTS Client Server)
|
||||
|
||||
@@ -7,11 +7,8 @@ add_library(LayerShellQtInterface)
|
||||
|
||||
qt6_extract_metatypes(LayerShellQtInterface)
|
||||
|
||||
if (Qt6_VERSION VERSION_GREATER_EQUAL "6.8.0")
|
||||
set(private_code_option "PRIVATE_CODE")
|
||||
endif()
|
||||
qt6_generate_wayland_protocol_client_sources(LayerShellQtInterface
|
||||
${private_code_option}
|
||||
PRIVATE_CODE
|
||||
FILES
|
||||
${WaylandProtocols_DATADIR}/stable/xdg-shell/xdg-shell.xml
|
||||
${WaylandProtocols_DATADIR}/staging/xdg-activation/xdg-activation-v1.xml
|
||||
|
||||
@@ -104,7 +104,11 @@ void QWaylandLayerSurface::zwlr_layer_surface_v1_closed()
|
||||
void QWaylandLayerSurface::zwlr_layer_surface_v1_configure(uint32_t serial, uint32_t width, uint32_t height)
|
||||
{
|
||||
ack_configure(serial);
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 13, 0)
|
||||
m_pendingSize = QSize(width, height);
|
||||
#else
|
||||
m_pendingSize = QSizeF(width, height) / compositorToClientScale();
|
||||
#endif
|
||||
|
||||
if (!m_configured) {
|
||||
m_configured = true;
|
||||
@@ -133,6 +137,7 @@ void QWaylandLayerSurface::applyConfigure()
|
||||
window()->resizeFromApplyConfigure(m_pendingSize);
|
||||
}
|
||||
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 13, 0)
|
||||
void QWaylandLayerSurface::setDesiredSize(const QSize &size)
|
||||
{
|
||||
const bool horizontallyConstrained = m_interface->anchors().testFlags({Window::AnchorLeft, Window::AnchorRight});
|
||||
@@ -147,6 +152,22 @@ void QWaylandLayerSurface::setDesiredSize(const QSize &size)
|
||||
}
|
||||
set_size(effectiveSize.width(), effectiveSize.height());
|
||||
}
|
||||
#else
|
||||
void QWaylandLayerSurface::setDesiredSize(const QSizeF &size)
|
||||
{
|
||||
const bool horizontallyConstrained = m_interface->anchors().testFlags({Window::AnchorLeft, Window::AnchorRight});
|
||||
const bool verticallyConstrained = m_interface->anchors().testFlags({Window::AnchorTop, Window::AnchorBottom});
|
||||
|
||||
QSize effectiveSize = (size * clientToCompositorScale()).toSize();
|
||||
if (horizontallyConstrained) {
|
||||
effectiveSize.setWidth(0);
|
||||
}
|
||||
if (verticallyConstrained) {
|
||||
effectiveSize.setHeight(0);
|
||||
}
|
||||
set_size(effectiveSize.width(), effectiveSize.height());
|
||||
}
|
||||
#endif
|
||||
|
||||
void QWaylandLayerSurface::setAnchor(uint anchor)
|
||||
{
|
||||
@@ -155,7 +176,7 @@ void QWaylandLayerSurface::setAnchor(uint anchor)
|
||||
|
||||
void QWaylandLayerSurface::setExclusiveZone(int32_t zone)
|
||||
{
|
||||
set_exclusive_zone(zone);
|
||||
set_exclusive_zone(std::round(zone * clientToCompositorScale()));
|
||||
}
|
||||
|
||||
void QWaylandLayerSurface::setExclusiveEdge(uint32_t edge)
|
||||
@@ -167,7 +188,14 @@ void QWaylandLayerSurface::setExclusiveEdge(uint32_t edge)
|
||||
|
||||
void QWaylandLayerSurface::setMargins(const QMargins &margins)
|
||||
{
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 13, 0)
|
||||
set_margin(margins.top(), margins.right(), margins.bottom(), margins.left());
|
||||
#else
|
||||
set_margin(std::round(margins.top() * clientToCompositorScale()),
|
||||
std::round(margins.right() * clientToCompositorScale()),
|
||||
std::round(margins.bottom() * clientToCompositorScale()),
|
||||
std::round(margins.left() * clientToCompositorScale()));
|
||||
#endif
|
||||
}
|
||||
|
||||
void QWaylandLayerSurface::setKeyboardInteractivity(uint32_t interactivity)
|
||||
@@ -181,7 +209,11 @@ void QWaylandLayerSurface::setLayer(uint32_t layer)
|
||||
set_layer(layer);
|
||||
}
|
||||
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 13, 0)
|
||||
void QWaylandLayerSurface::setWindowSize(const QSize &size)
|
||||
#else
|
||||
void QWaylandLayerSurface::setWindowSize(const QSizeF &size)
|
||||
#endif
|
||||
{
|
||||
if (m_interface->desiredSize().isNull()) {
|
||||
setDesiredSize(size);
|
||||
@@ -204,7 +236,7 @@ bool QWaylandLayerSurface::requestActivate()
|
||||
return true;
|
||||
} else {
|
||||
const auto focusWindow = QGuiApplication::focusWindow();
|
||||
const auto wlWindow = focusWindow ? static_cast<QtWaylandClient::QWaylandWindow *>(focusWindow->handle()) : window();
|
||||
const auto wlWindow = focusWindow && focusWindow->handle() ? static_cast<QtWaylandClient::QWaylandWindow *>(focusWindow->handle()) : window();
|
||||
if (const auto seat = wlWindow->display()->lastInputDevice()) {
|
||||
const auto tokenProvider = activation->requestXdgActivationToken(wlWindow->display(), wlWindow->wlSurface(), seat->serial(), QString());
|
||||
connect(tokenProvider, &QWaylandXdgActivationTokenV1::done, this, [this](const QString &token) {
|
||||
|
||||
@@ -34,7 +34,11 @@ public:
|
||||
}
|
||||
void attachPopup(QtWaylandClient::QWaylandShellSurface *popup) override;
|
||||
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 13, 0)
|
||||
void setDesiredSize(const QSize &size);
|
||||
#else
|
||||
void setDesiredSize(const QSizeF &size);
|
||||
#endif
|
||||
void setAnchor(uint32_t anchor);
|
||||
void setExclusiveZone(int32_t zone);
|
||||
void setExclusiveEdge(uint32_t edge);
|
||||
@@ -43,7 +47,11 @@ public:
|
||||
void setLayer(uint32_t layer);
|
||||
|
||||
void applyConfigure() override;
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 13, 0)
|
||||
void setWindowSize(const QSize &size) override;
|
||||
#else
|
||||
void setWindowSize(const QSizeF &size) override;
|
||||
#endif
|
||||
|
||||
bool requestActivate() override;
|
||||
bool requestActivateOnShow() override;
|
||||
@@ -58,7 +66,11 @@ private:
|
||||
QWaylandLayerShellIntegration *m_shell;
|
||||
LayerShellQt::Window *m_interface;
|
||||
QtWaylandClient::QWaylandWindow *m_window;
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 13, 0)
|
||||
QSize m_pendingSize;
|
||||
#else
|
||||
QSizeF m_pendingSize;
|
||||
#endif
|
||||
QString m_activationToken;
|
||||
|
||||
bool m_configured = false;
|
||||
|
||||
Reference in New Issue
Block a user