File indexing completed on 2025-03-16 05:04:47
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