File indexing completed on 2024-04-28 05:30:27

0001 /*
0002     KWin - the KDE window manager
0003     This file is part of the KDE project.
0004 
0005     SPDX-FileCopyrightText: 1999, 2000 Matthias Ettrich <ettrich@kde.org>
0006     SPDX-FileCopyrightText: 1997-2002 Cristian Tibirna <tibirna@kde.org>
0007     SPDX-FileCopyrightText: 2003 Lubos Lunak <l.lunak@kde.org>
0008 
0009     SPDX-License-Identifier: GPL-2.0-or-later
0010 */
0011 
0012 #pragma once
0013 // KWin
0014 #include "options.h"
0015 // Qt
0016 #include <QList>
0017 #include <QPoint>
0018 #include <QRect>
0019 
0020 class QObject;
0021 
0022 namespace KWin
0023 {
0024 
0025 class VirtualDesktop;
0026 class Window;
0027 
0028 class KWIN_EXPORT Placement
0029 {
0030 public:
0031     explicit Placement();
0032 
0033     void place(Window *c, const QRectF &area);
0034     void placeSmart(Window *c, const QRectF &area, PlacementPolicy next = PlacementUnknown);
0035 
0036     void placeCentered(Window *c, const QRectF &area, PlacementPolicy next = PlacementUnknown);
0037 
0038     void reinitCascading();
0039     void reinitCascading(VirtualDesktop *desktop);
0040 
0041     void cascadeIfCovering(Window *c, const QRectF &area);
0042 
0043     /**
0044      * Cascades all clients on the current desktop
0045      */
0046     void cascadeDesktop();
0047     /**
0048      *   Unclutters the current desktop by smart-placing all clients again.
0049      */
0050     void unclutterDesktop();
0051 
0052     static const char *policyToString(PlacementPolicy policy);
0053 
0054 private:
0055     void place(Window *c, const QRectF &area, PlacementPolicy policy, PlacementPolicy nextPlacement = PlacementUnknown);
0056     void placeUnderMouse(Window *c, const QRect &area, PlacementPolicy next = PlacementUnknown);
0057     void placeOnMainWindow(Window *c, const QRect &area, PlacementPolicy next = PlacementUnknown);
0058     void placeTransient(Window *c);
0059 
0060     void placeAtRandom(Window *c, const QRect &area, PlacementPolicy next = PlacementUnknown);
0061     void placeCascaded(Window *c, const QRect &area, PlacementPolicy next = PlacementUnknown);
0062     void placeMaximizing(Window *c, const QRect &area, PlacementPolicy next = PlacementUnknown);
0063     void placeZeroCornered(Window *c, const QRect &area, PlacementPolicy next = PlacementUnknown);
0064     void placeDialog(Window *c, const QRect &area, PlacementPolicy next = PlacementUnknown);
0065     void placeUtility(Window *c, const QRect &area, PlacementPolicy next = PlacementUnknown);
0066     void placeOnScreenDisplay(Window *c, const QRect &area);
0067 
0068     // CT needed for cascading+
0069     struct DesktopCascadingInfo
0070     {
0071         QPoint pos;
0072         int col;
0073         int row;
0074     };
0075 
0076     QHash<VirtualDesktop *, DesktopCascadingInfo> cci;
0077 };
0078 
0079 } // namespace