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);
61 void swapFocusedInDirection(const QString& direction, const QString& action,
62 const QString& explicitWindowId = QString());
63 void focusInDirection(const QString& direction, const QString& action, const QString& explicitWindowId = QString());
64 void moveFocusedToPosition(int position, const QString& explicitWindowId = QString());
65
66 // ═══════════════════════════════════════════════════════════════════════════
67 // Split ratio adjustment
68 // ═══════════════════════════════════════════════════════════════════════════
69
70 void increaseMasterRatio(qreal delta);
71 void decreaseMasterRatio(qreal delta);
72 void setGlobalSplitRatio(qreal ratio);
73 void setGlobalMasterCount(int count);
74
75 // ═══════════════════════════════════════════════════════════════════════════
76 // Master count adjustment
77 // ═══════════════════════════════════════════════════════════════════════════
78
79 void adjustMasterCount(int delta);
80
92 QString entryWindowOnScreen(const QString& screenId, const QString& direction) const;
93
101 int windowOrderIndexOnScreen(const QString& screenId, const QString& windowId) const;
102
143 QStringList tiledWindowsForFocusedScreen(QString& outScreenId, PhosphorTiles::TilingState*& outState,
144 const QString& explicitWindowId = QString(),
145 bool requireTiledWindows = true);
146
147private:
151 static bool isForwardDirection(const QString& direction);
152
159 QString resolveActiveScreen() const;
160
167 PhosphorTiles::TilingState* resolveActiveState(QString& outScreenId) const;
168
172 void emitFocusRequestAtIndex(int indexOffset, bool useFirst = false);
173
177 void activateResolvedWindowAtIndex(const QStringList& windows, PhosphorTiles::TilingState* state, int indexOffset,
178 bool useFirst);
179
198 QString directionalNeighborWindow(PhosphorTiles::TilingState* state, const QStringList& windows,
199 const QString& focused, const QString& direction, bool& outHasGeometry) const;
200
211 QString crossOutputFocusTarget(const QString& sourceScreenId, const QString& focused,
212 const QString& direction) const;
213
240 bool crossOutputMove(const QString& sourceScreenId, const QString& focused, const QString& direction,
241 const QString& action);
242
252 QString crossDesktopFocusTarget(const QString& sourceScreenId, const QString& direction) const;
253
262 bool crossDesktopMove(const QString& sourceScreenId, const QString& focused, const QString& direction);
263
268 QRect rectForWindowInState(PhosphorTiles::TilingState* state, const QString& windowId) const;
269
291 void applyToAllStates(const std::function<bool(const QString& screenId, PhosphorTiles::TilingState*)>& operation);
292
293 AutotileEngine* m_engine = nullptr;
294};
295
296} // namespace PhosphorTileEngine
Core engine for automatic window tiling.
Definition AutotileEngine.h:78
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)
QStringList tiledWindowsForFocusedScreen(QString &outScreenId, PhosphorTiles::TilingState *&outState, const QString &explicitWindowId=QString(), bool requireTiledWindows=true)
Resolve the screen a navigation operation should act on, with its state and tiled-window list.
Tracks tiling state for a single screen.
Definition TilingState.h:40
Definition AutotileConfig.h:13
Definition AutotileEngine.h:59