mirror of
https://invent.kde.org/plasma/layer-shell-qt.git
synced 2026-02-07 22:30:12 -05:00
Compare commits
4 Commits
v6.5.90
...
work/david
| Author | SHA1 | Date | |
|---|---|---|---|
| 6a0c6c6f7f | |||
| dd76feea81 | |||
| 430ad3630f | |||
| 68df285294 |
@ -4,7 +4,7 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
project(layershellqt)
|
||||
set(PROJECT_VERSION "6.5.90")
|
||||
set(PROJECT_VERSION "6.6.80")
|
||||
set(PROJECT_VERSION_MAJOR 6)
|
||||
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
|
||||
@ -7,14 +7,14 @@
|
||||
#include "window.h"
|
||||
#include "../qwaylandlayershellintegration_p.h"
|
||||
|
||||
#include <QtWaylandClient/private/qwaylandclientshellapi_p.h>
|
||||
#include <layershellqt_logging.h>
|
||||
|
||||
#include <QPlatformSurfaceEvent>
|
||||
#include <QPointer>
|
||||
#include <mutex>
|
||||
#include <optional>
|
||||
|
||||
#include <QtWaylandClient/private/qwaylandwindow_p.h>
|
||||
|
||||
using namespace LayerShellQt;
|
||||
|
||||
class LayerShellQt::WindowPrivate
|
||||
@ -34,7 +34,8 @@ public:
|
||||
Window::Layer layer = Window::LayerTop;
|
||||
QMargins margins;
|
||||
QSize desiredSize = QSize(0, 0);
|
||||
Window::ScreenConfiguration screenConfiguration = Window::ScreenFromQWindow;
|
||||
QPointer<QScreen> screen;
|
||||
bool wantsToBeOnActiveScreen = false;
|
||||
bool closeOnDismissed = true;
|
||||
bool activateOnShow = true;
|
||||
};
|
||||
@ -152,14 +153,73 @@ Window::Layer Window::layer() const
|
||||
return d->layer;
|
||||
}
|
||||
|
||||
#if LAYERSHELLQTINTERFACE_BUILD_DEPRECATED_SINCE(6, 6)
|
||||
Window::ScreenConfiguration Window::screenConfiguration() const
|
||||
{
|
||||
return d->screenConfiguration;
|
||||
if (wantsToBeOnActiveScreen()) {
|
||||
return ScreenFromCompositor;
|
||||
} else {
|
||||
// If an explicit screen is set, it's quite inaccurate but it should be fine.
|
||||
return ScreenFromQWindow;
|
||||
}
|
||||
}
|
||||
|
||||
void Window::setScreenConfiguration(Window::ScreenConfiguration screenConfiguration)
|
||||
void Window::setScreenConfiguration(ScreenConfiguration screenConfiguration)
|
||||
{
|
||||
d->screenConfiguration = screenConfiguration;
|
||||
static std::once_flag deprecationFlag;
|
||||
std::call_once(deprecationFlag, []() {
|
||||
qWarning() << "LayerShellQt.Window.screenConfiguration is deprecated use screen and wantsToBeOnActiveScreen instead";
|
||||
});
|
||||
|
||||
if (screenConfiguration == ScreenFromCompositor) {
|
||||
setWantsToBeOnActiveScreen(true);
|
||||
} else {
|
||||
setWantsToBeOnActiveScreen(false);
|
||||
setScreen(nullptr);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void Window::setWantsToBeOnActiveScreen(bool set)
|
||||
{
|
||||
if (d->wantsToBeOnActiveScreen == set) {
|
||||
return;
|
||||
}
|
||||
|
||||
d->wantsToBeOnActiveScreen = set;
|
||||
|
||||
if (d->wantsToBeOnActiveScreen && d->screen) {
|
||||
d->screen = nullptr;
|
||||
Q_EMIT screenChanged();
|
||||
}
|
||||
|
||||
Q_EMIT wantsToBeOnActiveScreenChanged();
|
||||
}
|
||||
|
||||
bool Window::wantsToBeOnActiveScreen() const
|
||||
{
|
||||
return d->wantsToBeOnActiveScreen;
|
||||
}
|
||||
|
||||
void Window::setScreen(QScreen *screen)
|
||||
{
|
||||
if (d->screen == screen) {
|
||||
return;
|
||||
}
|
||||
|
||||
d->screen = screen;
|
||||
|
||||
if (d->screen && d->wantsToBeOnActiveScreen) {
|
||||
d->wantsToBeOnActiveScreen = false;
|
||||
Q_EMIT wantsToBeOnActiveScreenChanged();
|
||||
}
|
||||
|
||||
Q_EMIT screenChanged();
|
||||
}
|
||||
|
||||
QScreen *Window::screen() const
|
||||
{
|
||||
return d->screen;
|
||||
}
|
||||
|
||||
bool Window::closeOnDismissed() const
|
||||
@ -213,23 +273,27 @@ bool Window::eventFilter(QObject *watched, QEvent *event)
|
||||
|
||||
void Window::initializeShell()
|
||||
{
|
||||
auto waylandWindow = dynamic_cast<QtWaylandClient::QWaylandWindow *>(d->parentWindow->handle());
|
||||
if (!waylandWindow) {
|
||||
qCWarning(LAYERSHELLQT) << d->parentWindow << "is not a wayland window. Not creating zwlr_layer_surface";
|
||||
return;
|
||||
}
|
||||
// FIXME
|
||||
// auto waylandWindow = dynamic_cast<QtWaylandClient::QWaylandWindow *>(d->parentWindow->handle());
|
||||
// if (!waylandWindow) {
|
||||
// qCWarning(LAYERSHELLQT) << d->parentWindow << "is not a wayland window. Not creating zwlr_layer_surface";
|
||||
// return;
|
||||
// }
|
||||
|
||||
static QWaylandLayerShellIntegration *shellIntegration = nullptr;
|
||||
if (!shellIntegration) {
|
||||
shellIntegration = new QWaylandLayerShellIntegration();
|
||||
if (!shellIntegration->initialize(waylandWindow->display())) {
|
||||
// Why does it take a display that is unused
|
||||
if (!shellIntegration->initialize(nullptr)) {
|
||||
delete shellIntegration;
|
||||
shellIntegration = nullptr;
|
||||
qCWarning(LAYERSHELLQT) << "Failed to initialize layer-shell integration, possibly because compositor does not support the layer-shell protocol";
|
||||
return;
|
||||
}
|
||||
}
|
||||
waylandWindow->setShellIntegration(shellIntegration);
|
||||
// FIXME this is relevant when the plugin is not the default shell integration
|
||||
// Something like QWaylandShellIntegration::assignToWindow(QPlatformWindow *)?
|
||||
// waylandWindow->setShellIntegration(shellIntegration);
|
||||
}
|
||||
|
||||
Window *Window::get(QWindow *window)
|
||||
|
||||
@ -27,8 +27,12 @@ class LAYERSHELLQT_EXPORT Window : public QObject
|
||||
Q_PROPERTY(qint32 exclusionZone READ exclusionZone WRITE setExclusiveZone NOTIFY exclusionZoneChanged)
|
||||
Q_PROPERTY(Layer layer READ layer WRITE setLayer NOTIFY layerChanged)
|
||||
Q_PROPERTY(KeyboardInteractivity keyboardInteractivity READ keyboardInteractivity WRITE setKeyboardInteractivity NOTIFY keyboardInteractivityChanged)
|
||||
Q_PROPERTY(ScreenConfiguration screenConfiguration READ screenConfiguration WRITE setScreenConfiguration)
|
||||
Q_PROPERTY(bool activateOnShow READ activateOnShow WRITE setActivateOnShow)
|
||||
Q_PROPERTY(bool wantsToBeOnActiveScreen READ wantsToBeOnActiveScreen WRITE setWantsToBeOnActiveScreen NOTIFY wantsToBeOnActiveScreenChanged)
|
||||
Q_PROPERTY(QScreen *screen READ screen WRITE setScreen NOTIFY screenChanged)
|
||||
#if LAYERSHELLQTINTERFACE_ENABLE_DEPRECATED_SINCE(6, 6)
|
||||
Q_PROPERTY(ScreenConfiguration screenConfiguration READ screenConfiguration WRITE setScreenConfiguration)
|
||||
#endif
|
||||
|
||||
public:
|
||||
~Window() override;
|
||||
@ -64,17 +68,6 @@ public:
|
||||
};
|
||||
Q_ENUM(KeyboardInteractivity)
|
||||
|
||||
/**
|
||||
* This enum type is used to specify which screen to place the surface on.
|
||||
* ScreenFromQWindow (the default) reads QWindow::screen() while ScreenFromCompositor
|
||||
* passes nil and lets the compositor decide.
|
||||
*/
|
||||
enum ScreenConfiguration {
|
||||
ScreenFromQWindow = 0,
|
||||
ScreenFromCompositor = 1,
|
||||
};
|
||||
Q_ENUM(ScreenConfiguration)
|
||||
|
||||
void setAnchors(Anchors anchor);
|
||||
Anchors anchors() const;
|
||||
|
||||
@ -96,8 +89,48 @@ public:
|
||||
void setLayer(Layer layer);
|
||||
Layer layer() const;
|
||||
|
||||
#if LAYERSHELLQTINTERFACE_ENABLE_DEPRECATED_SINCE(6, 6)
|
||||
/**
|
||||
* This enum type is used to specify which screen to place the surface on.
|
||||
* ScreenFromQWindow (the default) reads QWindow::screen() while ScreenFromCompositor
|
||||
* passes nil and lets the compositor decide.
|
||||
*/
|
||||
LAYERSHELLQTINTERFACE_DEPRECATED_VERSION(6, 6, "Use wantsToBeOnActiveScreen and screen instead")
|
||||
enum ScreenConfiguration {
|
||||
ScreenFromQWindow = 0,
|
||||
ScreenFromCompositor = 1,
|
||||
};
|
||||
Q_ENUM(ScreenConfiguration)
|
||||
|
||||
LAYERSHELLQTINTERFACE_DEPRECATED_VERSION(6, 6, "Use wantsToBeOnActiveScreen and screen instead")
|
||||
void setScreenConfiguration(ScreenConfiguration screenConfiguration);
|
||||
LAYERSHELLQTINTERFACE_DEPRECATED_VERSION(6, 6, "Use wantsToBeOnActiveScreen and screen instead")
|
||||
ScreenConfiguration screenConfiguration() const;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Indicates whether the layer shell surface should be placed on the active screen based on @a set.
|
||||
*
|
||||
* The active screen depends on the compositor policies.
|
||||
*
|
||||
* If the screen() is @c null and the wantsToBeOnActiveScreen() is @c false, then the
|
||||
* QWindow::screen() will be used to decide what screen the layer shell surface should be placed on.
|
||||
*
|
||||
* The screen() will be reset if @a set is @c true.
|
||||
*/
|
||||
void setWantsToBeOnActiveScreen(bool set);
|
||||
bool wantsToBeOnActiveScreen() const;
|
||||
|
||||
/**
|
||||
* Indicates that the layer shell surface should be placed on the specified @a screen.
|
||||
*
|
||||
* If the screen() is @c null and the wantsToBeOnActiveScreen() is @c false, then the
|
||||
* QWindow::screen() will be used to decide what screen the layer shell surface should be placed on.
|
||||
*
|
||||
* The wantsToBeOnActiveScreen() will be reset to @c false after calling this function.
|
||||
*/
|
||||
void setScreen(QScreen *screen);
|
||||
QScreen *screen() const;
|
||||
|
||||
/**
|
||||
* Sets a string based identifier for this window.
|
||||
@ -148,6 +181,8 @@ Q_SIGNALS:
|
||||
void desiredSizeChanged();
|
||||
void keyboardInteractivityChanged();
|
||||
void layerChanged();
|
||||
void wantsToBeOnActiveScreenChanged();
|
||||
void screenChanged();
|
||||
|
||||
private:
|
||||
void initializeShell();
|
||||
|
||||
@ -9,9 +9,6 @@
|
||||
#include "qwaylandlayersurface_p.h"
|
||||
#include "qwaylandxdgactivationv1_p.h"
|
||||
|
||||
#include <QtWaylandClient/private/qwaylanddisplay_p.h>
|
||||
#include <QtWaylandClient/private/qwaylandwindow_p.h>
|
||||
|
||||
namespace LayerShellQt
|
||||
{
|
||||
QWaylandLayerShellIntegration::QWaylandLayerShellIntegration()
|
||||
|
||||
@ -10,12 +10,10 @@
|
||||
#include "qwaylandlayersurface_p.h"
|
||||
#include "qwaylandxdgactivationv1_p.h"
|
||||
|
||||
#include <QtWaylandClient/private/qwaylandinputdevice_p.h>
|
||||
#include <QtWaylandClient/private/qwaylandscreen_p.h>
|
||||
#include <QtWaylandClient/private/qwaylandsurface_p.h>
|
||||
#include <QtWaylandClient/private/qwaylandwindow_p.h>
|
||||
|
||||
#include <QGuiApplication>
|
||||
#include <QScreen>
|
||||
#include <qpa/qplatformwindow.h>
|
||||
#include <qpa/qplatformwindow_p.h> // private native interface
|
||||
|
||||
namespace LayerShellQt
|
||||
{
|
||||
@ -23,12 +21,19 @@ QWaylandLayerSurface::QWaylandLayerSurface(QWaylandLayerShellIntegration *shell,
|
||||
: QtWaylandClient::QWaylandShellSurface(window)
|
||||
, QtWayland::zwlr_layer_surface_v1()
|
||||
, m_shell(shell)
|
||||
, m_interface(Window::get(window->window()))
|
||||
// FIXME reverse lookup would a QWindow getter make sense, also below a bunch
|
||||
// QWindow * QWaylandShellSurface::window
|
||||
, m_interface(Window::get(platformWindow()->window()))
|
||||
, m_window(window)
|
||||
{
|
||||
wl_output *output = nullptr;
|
||||
if (m_interface->screenConfiguration() == Window::ScreenFromQWindow) {
|
||||
auto waylandScreen = dynamic_cast<QtWaylandClient::QWaylandScreen *>(window->window()->screen()->handle());
|
||||
if (!m_interface->wantsToBeOnActiveScreen()) {
|
||||
QScreen *desiredScreen = m_interface->screen();
|
||||
if (!desiredScreen) {
|
||||
desiredScreen = platformWindow()->window()->screen();
|
||||
}
|
||||
|
||||
auto waylandScreen = platformWindow()->window()->screen()->nativeInterface<QNativeInterface::QWaylandScreen>();
|
||||
// Qt will always assign a screen to a window, but if the compositor has no screens available a dummy QScreen object is created
|
||||
// this will not cast to a QWaylandScreen
|
||||
if (!waylandScreen) {
|
||||
@ -37,7 +42,7 @@ QWaylandLayerSurface::QWaylandLayerSurface(QWaylandLayerShellIntegration *shell,
|
||||
output = waylandScreen->output();
|
||||
}
|
||||
}
|
||||
init(shell->get_layer_surface(window->waylandSurface()->object(), output, m_interface->layer(), m_interface->scope()));
|
||||
init(shell->get_layer_surface(wlSurface(), output, m_interface->layer(), m_interface->scope()));
|
||||
connect(m_interface, &Window::layerChanged, this, [this]() {
|
||||
setLayer(m_interface->layer());
|
||||
});
|
||||
@ -46,7 +51,7 @@ QWaylandLayerSurface::QWaylandLayerSurface(QWaylandLayerShellIntegration *shell,
|
||||
connect(m_interface, &Window::anchorsChanged, this, [this]() {
|
||||
setAnchor(m_interface->anchors());
|
||||
if (m_interface->desiredSize().isNull()) {
|
||||
setDesiredSize(m_window->windowContentGeometry().size());
|
||||
setDesiredSize(m_lastContentGeometry.size());
|
||||
} else {
|
||||
setDesiredSize(m_interface->desiredSize());
|
||||
}
|
||||
@ -78,12 +83,22 @@ QWaylandLayerSurface::QWaylandLayerSurface(QWaylandLayerShellIntegration *shell,
|
||||
});
|
||||
|
||||
if (m_interface->desiredSize().isNull()) {
|
||||
setDesiredSize(window->windowContentGeometry().size());
|
||||
// FIXME QWaylandWindow should call setWindowContentGeometry when creating the shell surface
|
||||
// / Does a setWindowContentGeometry call arrive early enough?
|
||||
// setDesiredSize(window->windowContentGeometry().size());
|
||||
} else {
|
||||
setDesiredSize(m_interface->desiredSize());
|
||||
}
|
||||
}
|
||||
|
||||
void QWaylandLayerSurface::setContentGeometry(const QRect &rect)
|
||||
{
|
||||
m_lastContentGeometry = rect;
|
||||
if (m_interface->desiredSize().isNull()) {
|
||||
setDesiredSize(rect.size());
|
||||
}
|
||||
}
|
||||
|
||||
QWaylandLayerSurface::~QWaylandLayerSurface()
|
||||
{
|
||||
destroy();
|
||||
@ -92,7 +107,7 @@ QWaylandLayerSurface::~QWaylandLayerSurface()
|
||||
void QWaylandLayerSurface::zwlr_layer_surface_v1_closed()
|
||||
{
|
||||
if (m_interface->closeOnDismissed()) {
|
||||
window()->window()->close();
|
||||
platformWindow()->close();
|
||||
}
|
||||
}
|
||||
|
||||
@ -108,7 +123,7 @@ void QWaylandLayerSurface::zwlr_layer_surface_v1_configure(uint32_t serial, uint
|
||||
} else {
|
||||
// Later configures are resizes, so we have to queue them up for a time when we
|
||||
// are not painting to the window.
|
||||
window()->applyConfigureWhenPossible();
|
||||
applyConfigureWhenPossible();
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,7 +140,7 @@ void QWaylandLayerSurface::attachPopup(QtWaylandClient::QWaylandShellSurface *po
|
||||
|
||||
void QWaylandLayerSurface::applyConfigure()
|
||||
{
|
||||
window()->resizeFromApplyConfigure(m_pendingSize);
|
||||
resizeFromApplyConfigure(m_pendingSize);
|
||||
}
|
||||
|
||||
void QWaylandLayerSurface::setDesiredSize(const QSize &size)
|
||||
@ -190,20 +205,21 @@ bool QWaylandLayerSurface::requestActivate()
|
||||
return false;
|
||||
}
|
||||
if (!m_activationToken.isEmpty()) {
|
||||
activation->activate(m_activationToken, window()->wlSurface());
|
||||
activation->activate(m_activationToken, wlSurface());
|
||||
m_activationToken = {};
|
||||
return true;
|
||||
} else if (const auto token = qEnvironmentVariable("XDG_ACTIVATION_TOKEN"); !token.isEmpty()) {
|
||||
activation->activate(token, window()->wlSurface());
|
||||
activation->activate(token, wlSurface());
|
||||
qunsetenv("XDG_ACTIVATION_TOKEN");
|
||||
return true;
|
||||
} else {
|
||||
const auto focusWindow = QGuiApplication::focusWindow();
|
||||
const auto wlWindow = focusWindow ? 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());
|
||||
const auto waylandApp = qGuiApp->nativeInterface<QNativeInterface::QWaylandApplication>();
|
||||
const auto surface = focusWindow ? focusWindow->nativeInterface<QNativeInterface::Private::QWaylandWindow>()->surface() : wlSurface();
|
||||
if (const auto seat = waylandApp->lastInputSeat()) {
|
||||
const auto tokenProvider = activation->requestXdgActivationToken(seat, surface, waylandApp->lastInputSerial(), QString());
|
||||
connect(tokenProvider, &QWaylandXdgActivationTokenV1::done, this, [this](const QString &token) {
|
||||
m_shell->activation()->activate(token, window()->wlSurface());
|
||||
m_shell->activation()->activate(token, wlSurface());
|
||||
});
|
||||
connect(tokenProvider, &QWaylandXdgActivationTokenV1::done, tokenProvider, &QObject::deleteLater);
|
||||
return true;
|
||||
@ -222,7 +238,7 @@ bool QWaylandLayerSurface::requestActivateOnShow()
|
||||
return false;
|
||||
}
|
||||
|
||||
if (m_window->window()->property("_q_showWithoutActivating").toBool()) {
|
||||
if (platformWindow()->window()->property("_q_showWithoutActivating").toBool()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -240,16 +256,21 @@ void QWaylandLayerSurface::requestXdgActivationToken(quint32 serial)
|
||||
if (!activation->isActive()) {
|
||||
return;
|
||||
}
|
||||
auto tokenProvider = activation->requestXdgActivationToken(window()->display(), window()->wlSurface(), serial, QString());
|
||||
const auto waylandApp = qGuiApp->nativeInterface<QNativeInterface::QWaylandApplication>();
|
||||
auto tokenProvider = activation->requestXdgActivationToken(waylandApp->lastInputSeat(), wlSurface(), serial, QString());
|
||||
|
||||
connect(tokenProvider, &QWaylandXdgActivationTokenV1::done, this, [this](const QString &token) {
|
||||
Q_EMIT window()->xdgActivationTokenCreated(token);
|
||||
// FIXME No way to do this without knowing QWaylandWindow because QPlatofrmWindow is not QObject
|
||||
// But we wanted to make a better API as well or alternatively the signal needs to be on QWaylandShellSurface as well
|
||||
// Q_EMIT window()->xdgActivationTokenCreated(token);
|
||||
// QMetaObject::invokeMethod(window(), "xdgActivationTokenCreated", token);
|
||||
});
|
||||
connect(tokenProvider, &QWaylandXdgActivationTokenV1::done, tokenProvider, &QObject::deleteLater);
|
||||
}
|
||||
|
||||
void QWaylandLayerSurface::sendExpose()
|
||||
{
|
||||
window()->updateExposure();
|
||||
// FIXME No way to call this, needs wrapper in QWaylandShellSurface
|
||||
// window()->updateExposure();
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
#ifndef _LAYERSURFACE_H
|
||||
#define _LAYERSURFACE_H
|
||||
|
||||
#include <QRect>
|
||||
#include <wayland-client.h>
|
||||
|
||||
#include "qwaylandlayershellintegration_p.h"
|
||||
@ -41,7 +42,7 @@ public:
|
||||
void setMargins(const QMargins &margins);
|
||||
void setKeyboardInteractivity(uint32_t interactivity);
|
||||
void setLayer(uint32_t layer);
|
||||
|
||||
void setContentGeometry(const QRect &rect) override;
|
||||
void applyConfigure() override;
|
||||
void setWindowSize(const QSize &size) override;
|
||||
|
||||
@ -60,6 +61,7 @@ private:
|
||||
QtWaylandClient::QWaylandWindow *m_window;
|
||||
QSize m_pendingSize;
|
||||
QString m_activationToken;
|
||||
QRect m_lastContentGeometry;
|
||||
|
||||
bool m_configured = false;
|
||||
};
|
||||
|
||||
@ -3,8 +3,6 @@
|
||||
*/
|
||||
|
||||
#include "qwaylandxdgactivationv1_p.h"
|
||||
#include <QtWaylandClient/private/qwaylanddisplay_p.h>
|
||||
#include <QtWaylandClient/private/qwaylandinputdevice_p.h>
|
||||
|
||||
QWaylandXdgActivationV1::QWaylandXdgActivationV1()
|
||||
: QWaylandClientExtensionTemplate<QWaylandXdgActivationV1>(1)
|
||||
@ -19,10 +17,8 @@ QWaylandXdgActivationV1::~QWaylandXdgActivationV1()
|
||||
}
|
||||
}
|
||||
|
||||
QWaylandXdgActivationTokenV1 *QWaylandXdgActivationV1::requestXdgActivationToken(QtWaylandClient::QWaylandDisplay *display,
|
||||
struct ::wl_surface *surface,
|
||||
std::optional<uint32_t> serial,
|
||||
const QString &app_id)
|
||||
QWaylandXdgActivationTokenV1 *
|
||||
QWaylandXdgActivationV1::requestXdgActivationToken(::wl_seat *seat, struct ::wl_surface *surface, std::optional<uint32_t> serial, const QString &app_id)
|
||||
{
|
||||
auto wl = get_activation_token();
|
||||
auto provider = new QWaylandXdgActivationTokenV1;
|
||||
@ -34,8 +30,8 @@ QWaylandXdgActivationTokenV1 *QWaylandXdgActivationV1::requestXdgActivationToken
|
||||
if (!app_id.isEmpty()) {
|
||||
provider->set_app_id(app_id);
|
||||
}
|
||||
if (serial && display->lastInputDevice()) {
|
||||
provider->set_serial(*serial, display->lastInputDevice()->wl_seat());
|
||||
if (serial && seat) {
|
||||
provider->set_serial(*serial, seat);
|
||||
}
|
||||
provider->commit();
|
||||
return provider;
|
||||
|
||||
@ -42,7 +42,7 @@ public:
|
||||
~QWaylandXdgActivationV1() override;
|
||||
|
||||
QWaylandXdgActivationTokenV1 *
|
||||
requestXdgActivationToken(QtWaylandClient::QWaylandDisplay *display, struct ::wl_surface *surface, std::optional<uint32_t> serial, const QString &app_id);
|
||||
requestXdgActivationToken(::wl_seat *seat, struct ::wl_surface *surface, std::optional<uint32_t> serial, const QString &app_id);
|
||||
};
|
||||
|
||||
#endif // QWAYLANDXDGACTIVATIONV1_P_H
|
||||
|
||||
Reference in New Issue
Block a user