File indexing completed on 2024-04-28 16:48:53

0001 /*
0002     SPDX-FileCopyrightText: 2020 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "waylandwindow.h"
0010 
0011 namespace KWaylandServer
0012 {
0013 class LayerSurfaceV1Interface;
0014 }
0015 
0016 namespace KWin
0017 {
0018 
0019 class Output;
0020 class LayerShellV1Integration;
0021 
0022 class LayerShellV1Window : public WaylandWindow
0023 {
0024     Q_OBJECT
0025 
0026 public:
0027     explicit LayerShellV1Window(KWaylandServer::LayerSurfaceV1Interface *shellSurface,
0028                                 Output *output,
0029                                 LayerShellV1Integration *integration);
0030 
0031     KWaylandServer::LayerSurfaceV1Interface *shellSurface() const;
0032     Output *desiredOutput() const;
0033 
0034     NET::WindowType windowType(bool direct = false, int supported_types = 0) const override;
0035     bool isPlaceable() const override;
0036     bool isCloseable() const override;
0037     bool isMovable() const override;
0038     bool isMovableAcrossScreens() const override;
0039     bool isResizable() const override;
0040     bool takeFocus() override;
0041     bool wantsInput() const override;
0042     StrutRect strutRect(StrutArea area) const override;
0043     bool hasStrut() const override;
0044     void destroyWindow() override;
0045     void closeWindow() override;
0046     void setVirtualKeyboardGeometry(const QRectF &geo) override;
0047 
0048 protected:
0049     Layer belongsToLayer() const override;
0050     bool acceptsFocus() const override;
0051     void moveResizeInternal(const QRectF &rect, MoveResizeMode mode) override;
0052 
0053 private:
0054     void handleSizeChanged();
0055     void handleUnmapped();
0056     void handleCommitted();
0057     void handleAcceptsFocusChanged();
0058     void handleOutputEnabledChanged();
0059     void handleOutputDestroyed();
0060     void scheduleRearrange();
0061 
0062     Output *m_desiredOutput;
0063     LayerShellV1Integration *m_integration;
0064     KWaylandServer::LayerSurfaceV1Interface *m_shellSurface;
0065     NET::WindowType m_windowType;
0066 };
0067 
0068 } // namespace KWin