File indexing completed on 2024-12-08 10:56:19

0001 /*
0002     KWin - the KDE window manager
0003     This file is part of the KDE project.
0004 
0005     SPDX-FileCopyrightText: 2006 Lubos Lunak <l.lunak@kde.org>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #pragma once
0011 
0012 #include <netwm.h>
0013 
0014 #include "window.h"
0015 
0016 namespace KWin
0017 {
0018 
0019 class KWIN_EXPORT Unmanaged : public Window
0020 {
0021     Q_OBJECT
0022 public:
0023     explicit Unmanaged();
0024     bool windowEvent(xcb_generic_event_t *e);
0025     bool track(xcb_window_t w);
0026     bool hasScheduledRelease() const;
0027     static void deleteUnmanaged(Unmanaged *c);
0028     int desktop() const override;
0029     QStringList activities() const override;
0030     QVector<VirtualDesktop *> desktops() const override;
0031     QPointF clientPos() const override;
0032     NET::WindowType windowType(bool direct = false, int supported_types = 0) const override;
0033     bool isOutline() const override;
0034     bool isUnmanaged() const override;
0035 
0036     QString captionNormal() const override { return {}; }
0037     QString captionSuffix() const override { return {}; }
0038     bool isCloseable() const override { return false; }
0039     bool isShown() const override { return false; }
0040     bool isHiddenInternal() const override { return false; }
0041     void hideClient() override { /* nothing to do */ }
0042     void showClient() override { /* nothing to do */ }
0043     Window *findModal(bool /*allow_itself*/) override { return nullptr; }
0044     bool isResizable() const override { return false; }
0045     bool isMovable() const override { return false; }
0046     bool isMovableAcrossScreens() const override { return false; }
0047     bool takeFocus() override { return false; }
0048     bool wantsInput() const override { return false; }
0049     void killWindow() override { /* nothing to do */ }
0050     void destroyWindow() override { /* nothing to do */ }
0051     void closeWindow() override { /* nothing to do */ }
0052     bool acceptsFocus() const override { return false; }
0053     bool belongsToSameApplication(const Window *other, SameApplicationChecks /*checks*/) const override { return other == this; }
0054     void moveResizeInternal(const QRectF & /*rect*/, KWin::Window::MoveResizeMode /*mode*/) override
0055     { /* nothing to do */
0056     }
0057     void updateCaption() override { /* nothing to do */ }
0058     QRectF resizeWithChecks(const QRectF &geometry, const QSizeF &) override
0059     { /* nothing to do */
0060         return geometry;
0061     }
0062     std::unique_ptr<WindowItem> createItem(Scene *scene) override;
0063 
0064 public Q_SLOTS:
0065     void release(ReleaseReason releaseReason = ReleaseReason::Release);
0066 
0067 private:
0068     ~Unmanaged() override; // use release()
0069     // handlers for X11 events
0070     void configureNotifyEvent(xcb_configure_notify_event_t *e);
0071     void damageNotifyEvent();
0072     QWindow *findInternalWindow() const;
0073     void checkOutput();
0074     void associate();
0075     void initialize();
0076     bool m_outline = false;
0077     bool m_scheduledRelease = false;
0078 };
0079 
0080 } // namespace