File indexing completed on 2024-12-01 13:38:07

0001 /*
0002  *   SPDX-FileCopyrightText: 2021 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
0003  *   SPDX-FileCopyrightText: 2018 Drew DeVault <sir@cmpwn.com>
0004  *
0005  *   SPDX-License-Identifier: LGPL-3.0-or-later
0006  */
0007 
0008 #ifndef LAYERSHELLQTWINDOW_H
0009 #define LAYERSHELLQTWINDOW_H
0010 
0011 #include <QObject>
0012 #include <QScreen>
0013 #include <QWindow>
0014 
0015 #include "layershellqt_export.h"
0016 
0017 namespace LayerShellQt
0018 {
0019 class WindowPrivate;
0020 
0021 class LAYERSHELLQT_EXPORT Window : public QObject
0022 {
0023     Q_OBJECT
0024 public:
0025     ~Window() override;
0026 
0027     enum Anchor {
0028         AnchorTop = 1, ///< The top edge of the anchor rectangle
0029         AnchorBottom = 2, ///< The bottom edge of the anchor rectangle
0030         AnchorLeft = 4, ///< The left edge of the anchor rectangle
0031         AnchorRight = 8, ///< The right edge of the anchor rectangle
0032     };
0033     Q_ENUM(Anchor);
0034     Q_DECLARE_FLAGS(Anchors, Anchor)
0035 
0036     /**
0037      * This enum type is used to specify the layer where a surface can be put in.
0038      */
0039     enum Layer {
0040         LayerBackground = 0,
0041         LayerBottom = 1,
0042         LayerTop = 2,
0043         LayerOverlay = 3,
0044     };
0045     Q_ENUM(Layer)
0046 
0047     /**
0048      * This enum type is used to specify how the layer surface handles keyboard focus.
0049      */
0050     enum KeyboardInteractivity {
0051         KeyboardInteractivityNone = 0,
0052         KeyboardInteractivityExclusive = 1,
0053         KeyboardInteractivityOnDemand = 2,
0054     };
0055     Q_ENUM(KeyboardInteractivity)
0056 
0057     void setAnchors(Anchors anchor);
0058     Anchors anchors() const;
0059 
0060     void setExclusiveZone(int32_t zone);
0061     int32_t exclusionZone() const;
0062 
0063     void setMargins(const QMargins &margins);
0064     QMargins margins() const;
0065 
0066     void setKeyboardInteractivity(KeyboardInteractivity interactivity);
0067     KeyboardInteractivity keyboardInteractivity() const;
0068 
0069     void setLayer(Layer layer);
0070     Layer layer() const;
0071 
0072     /**
0073      * If set, the compositor will try to put the window on the given screen.
0074      * If its not set, then the compositor will decide where to put the window.
0075      * Under normal circumstances, this should be the active output.
0076      */
0077     void setDesiredOutput(QScreen *output);
0078     QScreen *desiredOutput() const;
0079 
0080     /**
0081      * Sets a string based identifier for this window.
0082      * This may be used by a compositor to determine stacking
0083      * order within a given layer.
0084      *
0085      * May also be referred to as a role
0086      */
0087     void setScope(const QString &scope);
0088     QString scope() const;
0089 
0090     /**
0091      * Gets the LayerShell Window for a given Qt Window
0092      * Ownership is not transferred
0093      */
0094     static Window *get(QWindow *window);
0095 
0096 Q_SIGNALS:
0097     void anchorsChanged();
0098     void exclusionZoneChanged();
0099     void marginsChanged();
0100     void keyboardInteractivityChanged();
0101     void layerChanged();
0102 
0103 private:
0104     Window(QWindow *window);
0105     QScopedPointer<WindowPrivate> d;
0106 };
0107 
0108 }
0109 
0110 #endif