Compare commits

..

15 Commits

Author SHA1 Message Date
b758105bd7 Update version number for 5.27.0
GIT_SILENT
2023-02-09 11:41:27 +00:00
79441811ff Update kf5 version requirement to 5.102.0
GIT_SILENT
2023-01-21 20:17:53 +00:00
fc06e945c8 Update version number for 5.26.90
GIT_SILENT
2023-01-19 11:17:24 +00:00
b95910c086 Use ecm_set_disabled_deprecation_versions 2022-12-23 13:50:51 +01:00
70dc87f673 Use KDE_INSTALL_CMAKEPACKAGEDIR
GIT_SILENT
2022-10-22 13:59:13 +00:00
7b9c2c1db1 Update version number for 5.26.80
GIT_SILENT
2022-09-15 13:57:50 +01:00
9b5a39922b Update version number for 5.25.90
GIT_SILENT
2022-09-15 11:50:08 +01:00
91db77acc2 Update kf5 version requirement to 5.98.0
GIT_SILENT
2022-09-15 11:10:38 +01:00
5af50ac3ee Add FreeBSD Qt6 CI support 2022-08-27 14:40:53 +02:00
7bfac45da8 Make fully reuse compliant 2022-08-23 21:52:18 +02:00
7bd63669ea Use change signals on Window interface class.
QWaylandLayerSurface pulled data from the Window on startup. The Window
pushed data into the QWaylandLayerSurface on changes. Having two
patterns is a sign of something being off.

This moves everything to a single design, pulling from the public
interface. This allows us to drop a code path that meddles with
QWaylandWindow internals.
2022-06-30 08:09:21 +00:00
13961ef7b9 Update qt5 version requirement to 5.15.2
GIT_SILENT
2022-06-27 10:02:56 +01:00
ff6155a5af Update kf5 version requirement to 5.94
GIT_SILENT
2022-06-27 10:02:56 +01:00
34e7c90c2d Mark required deps as required
BUG: 454912
2022-06-06 12:26:10 +02:00
563b61c75c Update version number for 5.25.80
GIT_SILENT
2022-05-19 12:26:13 +01:00
6 changed files with 48 additions and 44 deletions

View File

@ -2,6 +2,8 @@
# SPDX-License-Identifier: CC0-1.0 # SPDX-License-Identifier: CC0-1.0
include: include:
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/reuse-lint.yml
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux.yml - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux.yml
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd.yml - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd.yml
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux-qt6.yml - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux-qt6.yml
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd-qt6.yml

View File

@ -4,13 +4,13 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
project(layershellqt) project(layershellqt)
set(PROJECT_VERSION "5.25.2") set(PROJECT_VERSION "5.27.0")
set(PROJECT_VERSION_MAJOR 5) set(PROJECT_VERSION_MAJOR 5)
set(CMAKE_C_STANDARD 99) set(CMAKE_C_STANDARD 99)
set(QT_MIN_VERSION "5.15.2") set(QT_MIN_VERSION "5.15.2")
set(KF5_MIN_VERSION "5.94") set(KF5_MIN_VERSION "5.102.0")
set(KDE_COMPILERSETTINGS_LEVEL "5.82") set(KDE_COMPILERSETTINGS_LEVEL "5.82")
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
@ -23,6 +23,7 @@ include(KDEInstallDirs)
include(KDECMakeSettings) include(KDECMakeSettings)
include(KDECompilerSettings NO_POLICY_SCOPE) include(KDECompilerSettings NO_POLICY_SCOPE)
include(ECMSetupVersion) include(ECMSetupVersion)
include(ECMDeprecationSettings)
include(ECMGenerateHeaders) include(ECMGenerateHeaders)
include(CMakePackageConfigHelpers) include(CMakePackageConfigHelpers)
include(FeatureSummary) include(FeatureSummary)
@ -30,6 +31,7 @@ include(GenerateExportHeader)
include(KDEClangFormat) include(KDEClangFormat)
include(ECMQtDeclareLoggingCategory) include(ECMQtDeclareLoggingCategory)
find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS WaylandClient Qml) find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS WaylandClient Qml)
if (QT_MAJOR_VERSION EQUAL "5") if (QT_MAJOR_VERSION EQUAL "5")
find_package(Qt5XkbCommonSupport REQUIRED PRIVATE) find_package(Qt5XkbCommonSupport REQUIRED PRIVATE)
@ -53,10 +55,15 @@ ecm_setup_version(${PROJECT_VERSION} VARIABLE_PREFIX LAYERSHELLQT
file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h) file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h)
kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES}) kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
ecm_set_disabled_deprecation_versions(QT 5.15.2
KF 5.101
)
add_subdirectory(src) add_subdirectory(src)
add_subdirectory(tests) add_subdirectory(tests)
set(CMAKECONFIG_INSTALL_DIR ${KDE_INSTALL_LIBDIR}/cmake/LayerShellQt) set(CMAKECONFIG_INSTALL_DIR ${KDE_INSTALL_CMAKEPACKAGEDIR}/LayerShellQt)
install(EXPORT LayerShellQtTargets install(EXPORT LayerShellQtTargets
NAMESPACE LayerShellQt:: NAMESPACE LayerShellQt::
DESTINATION ${CMAKECONFIG_INSTALL_DIR} DESTINATION ${CMAKECONFIG_INSTALL_DIR}

View File

@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: None
# SPDX-License-Identifier: CC0-1.0
maintainer: maintainer:
- vladz - vladz
description: Layer Shell Qt description: Layer Shell Qt

View File

@ -5,10 +5,9 @@
*/ */
#include "window.h" #include "window.h"
#include "../qwaylandlayersurface_p.h"
#include <layershellqt_logging.h> #include <layershellqt_logging.h>
#include <private/qwaylandshellsurface_p.h>
#include <private/qwaylandwindow_p.h> #include <QPointer>
using namespace LayerShellQt; using namespace LayerShellQt;
@ -27,7 +26,6 @@ public:
Window::KeyboardInteractivity keyboardInteractivity = Window::KeyboardInteractivityExclusive; Window::KeyboardInteractivity keyboardInteractivity = Window::KeyboardInteractivityExclusive;
Window::Layer layer = Window::LayerTop; Window::Layer layer = Window::LayerTop;
QMargins margins; QMargins margins;
QWaylandLayerSurface *getSurface() const;
QPointer<QScreen> desiredOutput; QPointer<QScreen> desiredOutput;
}; };
@ -41,9 +39,7 @@ Window::~Window()
void Window::setAnchors(Anchors anchors) void Window::setAnchors(Anchors anchors)
{ {
d->anchors = anchors; d->anchors = anchors;
if (auto surface = d->getSurface()) { Q_EMIT anchorsChanged();
surface->setAnchor(anchors);
}
} }
Window::Anchors Window::anchors() const Window::Anchors Window::anchors() const
@ -54,9 +50,7 @@ Window::Anchors Window::anchors() const
void Window::setExclusiveZone(int32_t zone) void Window::setExclusiveZone(int32_t zone)
{ {
d->exclusionZone = zone; d->exclusionZone = zone;
if (auto surface = d->getSurface()) { Q_EMIT exclusionZoneChanged();
surface->setExclusiveZone(zone);
}
} }
int32_t Window::exclusionZone() const int32_t Window::exclusionZone() const
@ -67,9 +61,7 @@ int32_t Window::exclusionZone() const
void Window::setMargins(const QMargins &margins) void Window::setMargins(const QMargins &margins)
{ {
d->margins = margins; d->margins = margins;
if (auto surface = d->getSurface()) { Q_EMIT marginsChanged();
surface->setMargins(margins);
}
} }
QMargins Window::margins() const QMargins Window::margins() const
@ -80,9 +72,7 @@ QMargins Window::margins() const
void Window::setKeyboardInteractivity(KeyboardInteractivity interactivity) void Window::setKeyboardInteractivity(KeyboardInteractivity interactivity)
{ {
d->keyboardInteractivity = interactivity; d->keyboardInteractivity = interactivity;
if (auto surface = d->getSurface()) { Q_EMIT keyboardInteractivityChanged();
surface->setKeyboardInteractivity(interactivity);
}
} }
Window::KeyboardInteractivity Window::keyboardInteractivity() const Window::KeyboardInteractivity Window::keyboardInteractivity() const
@ -93,9 +83,6 @@ Window::KeyboardInteractivity Window::keyboardInteractivity() const
void Window::setLayer(Layer layer) void Window::setLayer(Layer layer)
{ {
d->layer = layer; d->layer = layer;
if (auto surface = d->getSurface()) {
surface->setLayer(layer);
}
} }
void Window::setScope(const QString &scope) void Window::setScope(const QString &scope)
@ -139,21 +126,3 @@ Window *Window::get(QWindow *window)
} }
return new Window(window); return new Window(window);
} }
QWaylandLayerSurface *WindowPrivate::getSurface() const
{
if (!parentWindow) {
return nullptr;
}
auto ww = dynamic_cast<QtWaylandClient::QWaylandWindow *>(parentWindow->handle());
if (!ww) {
qCDebug(LAYERSHELLQT) << "window not a wayland window" << parentWindow;
return nullptr;
}
QWaylandLayerSurface *s = qobject_cast<QWaylandLayerSurface *>(ww->shellSurface());
if (!s) {
qCDebug(LAYERSHELLQT) << "window not using wlr-layer-shell" << parentWindow << ww->shellSurface();
return nullptr;
}
return s;
}

View File

@ -93,6 +93,13 @@ public:
*/ */
static Window *get(QWindow *window); static Window *get(QWindow *window);
Q_SIGNALS:
void anchorsChanged();
void exclusionZoneChanged();
void marginsChanged();
void keyboardInteractivityChanged();
void layerChanged();
private: private:
Window(QWindow *window); Window(QWindow *window);
QScopedPointer<WindowPrivate> d; QScopedPointer<WindowPrivate> d;

View File

@ -36,15 +36,31 @@ QWaylandLayerSurface::QWaylandLayerSurface(QWaylandLayerShell *shell, QtWaylandC
} }
} }
init(shell->get_layer_surface(window->waylandSurface()->object(), output, interface->layer(), interface->scope())); init(shell->get_layer_surface(window->waylandSurface()->object(), output, interface->layer(), interface->scope()));
connect(interface, &Window::layerChanged, this, [this, interface]() {
Window::Anchors anchors = interface->anchors(); setLayer(interface->layer());
});
set_anchor(interface->anchors()); set_anchor(interface->anchors());
setMargins(interface->margins()); connect(interface, &Window::anchorsChanged, this, [this, interface]() {
setKeyboardInteractivity(interface->keyboardInteractivity()); set_anchor(interface->anchors());
});
setExclusiveZone(interface->exclusionZone()); setExclusiveZone(interface->exclusionZone());
connect(interface, &Window::exclusionZoneChanged, this, [this, interface]() {
setExclusiveZone(interface->exclusionZone());
});
setMargins(interface->margins());
connect(interface, &Window::marginsChanged, this, [this, interface]() {
setMargins(interface->margins());
});
setKeyboardInteractivity(interface->keyboardInteractivity());
connect(interface, &Window::keyboardInteractivityChanged, this, [this, interface]() {
setKeyboardInteractivity(interface->keyboardInteractivity());
});
QSize size = window->surfaceSize(); QSize size = window->surfaceSize();
const Window::Anchors anchors = interface->anchors();
if ((anchors & Window::AnchorLeft) && (anchors & Window::AnchorRight)) { if ((anchors & Window::AnchorLeft) && (anchors & Window::AnchorRight)) {
size.setWidth(0); size.setWidth(0);
} }