Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
NavigationController.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 fuddlesworth
2// SPDX-License-Identifier: LGPL-2.1-or-later
3
4#pragma once
5
6#include <phosphortileengine_export.h>
7#include <QRect>
8#include <QString>
9#include <QStringList>
10#include <functional>
11
12namespace PhosphorTiles {
13class TilingState;
14}
15
16namespace PhosphorTileEngine {
17
18class AutotileEngine;
19
33class PHOSPHORTILEENGINE_EXPORT NavigationController
34{
35public:
37
38 // ═══════════════════════════════════════════════════════════════════════════
39 // Focus/window cycling
40 // ═══════════════════════════════════════════════════════════════════════════
41
42 void focusNext();
45
46 // ═══════════════════════════════════════════════════════════════════════════
47 // Window swapping & rotation
48 // ═══════════════════════════════════════════════════════════════════════════
49
51 void rotateWindowOrder(bool clockwise);
57 void swapFocusedInDirection(const QString& direction, const QString& action,
58 const QString& explicitWindowId = QString());
59 void focusInDirection(const QString& direction, const QString& action, const QString& explicitWindowId = QString());
60 void moveFocusedToPosition(int position, const QString& explicitWindowId = QString());
61
62 // ═══════════════════════════════════════════════════════════════════════════
63 // Split ratio adjustment
64 // ═══════════════════════════════════════════════════════════════════════════
65
66 void increaseMasterRatio(qreal delta);
67 void decreaseMasterRatio(qreal delta);
68 void setGlobalSplitRatio(qreal ratio);
69 void setGlobalMasterCount(int count);
70
71 // ═══════════════════════════════════════════════════════════════════════════
72 // Master count adjustment
73 // ═══════════════════════════════════════════════════════════════════════════
74
75 void adjustMasterCount(int delta);
76
88 QString entryWindowOnScreen(const QString& screenId, const QString& direction) const;
89
97 int windowOrderIndexOnScreen(const QString& screenId, const QString& windowId) const;
98
99private:
106 QString resolveActiveScreen() const;
107
114 PhosphorTiles::TilingState* resolveActiveState(QString& outScreenId) const;
115
119 void emitFocusRequestAtIndex(int indexOffset, bool useFirst = false);
120
129 QStringList tiledWindowsForFocusedScreen(QString& outScreenId, PhosphorTiles::TilingState*& outState,
130 const QString& explicitWindowId = QString());
131
150 QString directionalNeighborWindow(PhosphorTiles::TilingState* state, const QStringList& windows,
151 const QString& focused, const QString& direction, bool& outHasGeometry) const;
152
163 QString crossOutputFocusTarget(const QString& sourceScreenId, const QString& focused,
164 const QString& direction) const;
165
175 bool crossOutputMove(const QString& sourceScreenId, const QString& focused, const QString& direction,
176 const QString& action);
177
187 QString crossDesktopFocusTarget(const QString& sourceScreenId, const QString& direction) const;
188
197 bool crossDesktopMove(const QString& sourceScreenId, const QString& focused, const QString& direction);
198
203 QRect rectForWindowInState(PhosphorTiles::TilingState* state, const QString& windowId) const;
204
208 void applyToAllStates(const std::function<void(PhosphorTiles::TilingState*)>& operation);
209
210 AutotileEngine* m_engine = nullptr;
211};
212
213} // namespace PhosphorTileEngine
Core engine for automatic window tiling.
Definition AutotileEngine.h:65
Handles navigation, focus cycling, and ratio/count adjustments.
Definition NavigationController.h:34
void focusInDirection(const QString &direction, const QString &action, const QString &explicitWindowId=QString())
void swapFocusedInDirection(const QString &direction, const QString &action, const QString &explicitWindowId=QString())
explicitWindowId (when non-empty) overrides the state's internal focusedWindow() for the operation.
void moveFocusedToPosition(int position, const QString &explicitWindowId=QString())
int windowOrderIndexOnScreen(const QString &screenId, const QString &windowId) const
The RAW window-order index of windowId on screenId's current state (counting floating windows,...
QString entryWindowOnScreen(const QString &screenId, const QString &direction) const
The tiled window at screenId's entry edge facing the source when a crossing arrives in direction (cro...
NavigationController(AutotileEngine *engine)
Tracks tiling state for a single screen.
Definition TilingState.h:40
Definition AutotileConfig.h:13
Definition AutotileEngine.h:46