File indexing completed on 2024-04-21 03:59:28
0001 /* 0002 This file is part of the KDE libraries 0003 SPDX-FileCopyrightText: 1999 Matthias Ettrich <ettrich@kde.org> 0004 SPDX-FileCopyrightText: 2007 Lubos Lunak <l.lunak@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.1-or-later 0007 */ 0008 /* 0009 * kwindowsystem.h. Part of the KDE project. 0010 */ 0011 0012 #ifndef KWINDOWSYSTEM_H 0013 #define KWINDOWSYSTEM_H 0014 0015 #include <QObject> 0016 #include <QWidgetList> //For WId 0017 #include <kwindowsystem_export.h> 0018 0019 class KWindowSystemPrivate; 0020 0021 /** 0022 * 0023 * Convenience access to certain properties and features of window systems. 0024 * 0025 */ 0026 class KWINDOWSYSTEM_EXPORT KWindowSystem : public QObject 0027 { 0028 Q_OBJECT 0029 Q_PROPERTY(bool isPlatformWayland READ isPlatformWayland CONSTANT) 0030 Q_PROPERTY(bool isPlatformX11 READ isPlatformX11 CONSTANT) 0031 0032 /** 0033 * @brief Whether "show desktop" is currently active 0034 */ 0035 Q_PROPERTY(bool showingDesktop READ showingDesktop WRITE setShowingDesktop NOTIFY showingDesktopChanged) 0036 0037 public: 0038 /** 0039 * Access to the singleton instance. Useful mainly for connecting to signals. 0040 */ 0041 static KWindowSystem *self(); 0042 0043 /** 0044 * Requests that window @p window is activated. 0045 * 0046 * Applications shouldn't make attempts to explicitly activate 0047 * their windows, and instead let the user activate them. 0048 * In the special cases where this may be needed, applications 0049 * can use activateWindow(). The window manager may consider whether 0050 * this request wouldn't result in focus stealing, which 0051 * would be obtrusive, and may refuse the request. 0052 * 0053 * In case of problems, consult KWin's README.md file, or ask on the kwin@kde.org 0054 * mailing list. 0055 * 0056 * @param window the window to make active 0057 * @param time X server timestamp of the user activity that 0058 * caused this request 0059 * 0060 * @since 5.89 0061 */ 0062 Q_INVOKABLE static void activateWindow(QWindow *window, long time = 0); 0063 0064 /** 0065 * Returns the state of showing the desktop. 0066 */ 0067 static bool showingDesktop(); 0068 0069 /** 0070 * Sets the state of the "showing desktop" mode of the window manager. If on, 0071 * windows are hidden and desktop background is shown and focused. 0072 * 0073 * @param showing if true, the window manager is put in "showing desktop" mode. 0074 * If false, the window manager is put out of that mode. 0075 * 0076 * @since 5.7.0 0077 */ 0078 static void setShowingDesktop(bool showing); 0079 0080 /** 0081 * Sets the parent window of @p subwindow to be @p mainwindow. 0082 * This overrides the parent set the usual way as the QWidget or QWindow parent, 0083 * but only for the window manager - e.g. stacking order and window grouping 0084 * will be affected, but features like automatic deletion of children 0085 * when the parent is deleted are unaffected and normally use 0086 * the QObject parent. 0087 * 0088 * This function should be used before a dialog is shown for a window 0089 * that belongs to another application. 0090 * 0091 * On Wayland, use the QString overload to provide an XDG Foreign token. 0092 */ 0093 static void setMainWindow(QWindow *subwindow, WId mainwindow); 0094 0095 /** 0096 * Sets the parent window of @p subwindow to be @p mainwindow. 0097 * 0098 * This function should be used before a dialog is shown for a window 0099 * that belongs to another application. 0100 * 0101 * @param window the sub window 0102 * @param mainwindow The main window ID or XDG Foreign token 0103 * 0104 * @since 6.0 0105 */ 0106 static void setMainWindow(QWindow *subwindow, const QString &mainwindow); 0107 0108 /** 0109 * Updates the platform-specific startup id, if any. 0110 * 0111 * This method is to be called when a running application instance 0112 * is reused for handling the request to start this application. 0113 * A typical use would be in the handler of the KDBusService activation signal. 0114 * 0115 * For X11, this updates the id for the Startup Notification protocol, 0116 * taking the id from QX11Info::nextStartupId(), if not empty. 0117 * For Wayland, this updates the token for the XDG Activation protocol, 0118 * taking the token from the "XDG_ACTIVATION_TOKEN" environment variable 0119 * and then unsetting it, if not empty. 0120 * 0121 * @param window the main window (needed by X11 platform) 0122 * 0123 * @since 5.91 0124 */ 0125 static void updateStartupId(QWindow *window); 0126 0127 /** 0128 * Enum describing the windowing system platform used by the QGuiApplication. 0129 * @see platform 0130 * @since 5.25 0131 **/ 0132 enum class Platform { 0133 /** 0134 * A platform unknown to the application is used 0135 **/ 0136 Unknown, 0137 /** 0138 * The X11 window system. 0139 **/ 0140 X11, 0141 /** 0142 * The Wayland window system. 0143 **/ 0144 Wayland, 0145 }; 0146 Q_ENUM(Platform) 0147 /** 0148 * Returns the Platform used by the QGuiApplication. 0149 * The Platform gets resolved the first time the method is invoked and cached for further 0150 * usages. 0151 * @returns The Platform used by the QGuiApplication. 0152 * @since 5.25 0153 **/ 0154 static Platform platform(); 0155 0156 /** 0157 * Convenience method to check whether the Platform is X11. 0158 * @see platform 0159 * @see isPlatformWayland 0160 * @since 5.25 0161 **/ 0162 static bool isPlatformX11(); 0163 0164 /** 0165 * Convenience method to check whether the Platform is Wayland. 0166 * @see platform 0167 * @see isPlatformX11 0168 * @since 5.25 0169 **/ 0170 static bool isPlatformWayland(); 0171 0172 /** 0173 * Sets the @p token that will be used when activateWindow is called next 0174 * 0175 * @since 5.83 0176 */ 0177 Q_INVOKABLE static void setCurrentXdgActivationToken(const QString &token); 0178 0179 Q_SIGNALS: 0180 /** 0181 * The state of showing the desktop has changed. 0182 */ 0183 void showingDesktopChanged(bool showing); 0184 0185 private: 0186 friend class KWindowSystemStaticContainer; 0187 friend class KX11Extras; 0188 friend class KWaylandExtras; 0189 0190 KWindowSystem() 0191 { 0192 } 0193 static KWindowSystemPrivate *d_func(); 0194 }; 0195 0196 #endif