Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
snapnavigationtargets.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 <phosphorsnapengine_export.h>
9
10#include <QString>
11
12#include <functional>
13
14namespace PhosphorZones {
15class LayoutRegistry;
16}
17
18namespace PhosphorEngine {
19class ICrossSurfaceResolver;
20}
21
22namespace PhosphorSnapEngine {
23
24class ISettings;
25class IZoneAdjacencyResolver;
26
31inline QString oppositeCrossingDirection(const QString& direction)
32{
33 if (direction == QLatin1String("left")) {
34 return QStringLiteral("right");
35 }
36 if (direction == QLatin1String("right")) {
37 return QStringLiteral("left");
38 }
39 if (direction == QLatin1String("up")) {
40 return QStringLiteral("down");
41 }
42 if (direction == QLatin1String("down")) {
43 return QStringLiteral("up");
44 }
45 return {};
46}
47
78class PHOSPHORSNAPENGINE_EXPORT SnapNavigationTargetResolver
79{
80public:
85 using FeedbackFn =
86 std::function<void(bool success, const QString& action, const QString& reason, const QString& sourceZoneId,
87 const QString& targetZoneId, const QString& screenId)>;
88
98 PhosphorZones::LayoutRegistry* layoutManager, IZoneAdjacencyResolver* zoneAdjacency,
99 FeedbackFn feedback);
100
105
111
120 using NeighbourAutotileFn = std::function<bool(const QString& screenId)>;
122
123 PhosphorProtocol::MoveTargetResult getMoveTargetForWindow(const QString& windowId, const QString& direction,
124 const QString& screenId);
125
126 PhosphorProtocol::FocusTargetResult getFocusTargetForWindow(const QString& windowId, const QString& direction,
127 const QString& screenId);
128
129 PhosphorProtocol::RestoreTargetResult getRestoreForWindow(const QString& windowId, const QString& screenId);
130
132 const QString& screenId);
133
134 PhosphorProtocol::SwapTargetResult getSwapTargetForWindow(const QString& windowId, const QString& direction,
135 const QString& screenId);
136
137 PhosphorProtocol::MoveTargetResult getPushTargetForWindow(const QString& windowId, const QString& screenId);
138
140 const QString& screenId);
141
142private:
147 void emitFeedback(bool success, const QString& action, const QString& reason, const QString& sourceZoneId,
148 const QString& targetZoneId, const QString& screenId) const
149 {
150 if (m_feedback) {
151 m_feedback(success, action, reason, sourceZoneId, targetZoneId, screenId);
152 }
153 }
154
162 PhosphorProtocol::MoveTargetResult crossOutputEntryTarget(const QString& currentZoneId, const QString& direction,
163 const QString& sourceScreenId,
164 bool requireSnapNeighbour) const;
165
174 PhosphorProtocol::SwapTargetResult crossOutputSwapTarget(const QString& windowId, const QString& currentZoneId,
175 const QString& direction,
176 const QString& sourceScreenId) const;
177
185 QStringList windowsInZoneOnScreen(const QString& zoneId, const QString& screenName) const;
186
190 QString firstWindowInZoneOnScreen(const QString& zoneId, const QString& screenName) const;
191
192 PhosphorEngine::IWindowTrackingService* m_service = nullptr;
193 PhosphorZones::LayoutRegistry* m_layoutManager = nullptr;
194 IZoneAdjacencyResolver* m_zoneAdjacency = nullptr;
195 PhosphorEngine::ICrossSurfaceResolver* m_crossSurface = nullptr;
196 FeedbackFn m_feedback;
197 NeighbourAutotileFn m_neighbourIsAutotile;
198};
199
200} // namespace PhosphorSnapEngine
Resolves the neighbouring surface — output or virtual desktop — in a direction, for cross-surface win...
Definition ICrossSurfaceResolver.h:21
Definition IWindowTrackingService.h:34
Narrow interface for zone-adjacency queries used by snap navigation.
Definition IZoneAdjacencyResolver.h:28
Pure snap-mode navigation target resolver.
Definition snapnavigationtargets.h:79
PhosphorProtocol::RestoreTargetResult getRestoreForWindow(const QString &windowId, const QString &screenId)
PhosphorProtocol::SwapTargetResult getSwapTargetForWindow(const QString &windowId, const QString &direction, const QString &screenId)
void setZoneAdjacencyResolver(IZoneAdjacencyResolver *resolver)
Late setter for the zone adjacency resolver — it may not be available at construction time,...
PhosphorProtocol::MoveTargetResult getMoveTargetForWindow(const QString &windowId, const QString &direction, const QString &screenId)
void setCrossSurfaceResolver(PhosphorEngine::ICrossSurfaceResolver *resolver)
Late setter for the cross-surface resolver (neighbour output / desktop lookup).
std::function< bool(const QString &screenId)> NeighbourAutotileFn
Reports whether a neighbour OUTPUT is in autotile mode, evaluated in the engine's current (desktop,...
Definition snapnavigationtargets.h:120
SnapNavigationTargetResolver(PhosphorEngine::IWindowTrackingService *service, PhosphorZones::LayoutRegistry *layoutManager, IZoneAdjacencyResolver *zoneAdjacency, FeedbackFn feedback)
Construct the resolver with its pure dependencies.
std::function< void(bool success, const QString &action, const QString &reason, const QString &sourceZoneId, const QString &targetZoneId, const QString &screenId)> FeedbackFn
Callback shape matching WindowTrackingAdaptor::navigationFeedback.
Definition snapnavigationtargets.h:87
PhosphorProtocol::FocusTargetResult getFocusTargetForWindow(const QString &windowId, const QString &direction, const QString &screenId)
PhosphorProtocol::MoveTargetResult getSnapToZoneByNumberTarget(const QString &windowId, int zoneNumber, const QString &screenId)
PhosphorProtocol::CycleTargetResult getCycleTargetForWindow(const QString &windowId, bool forward, const QString &screenId)
PhosphorProtocol::MoveTargetResult getPushTargetForWindow(const QString &windowId, const QString &screenId)
void setNeighbourAutotileProvider(NeighbourAutotileFn fn)
Manual zone-layout registry + per-context assignment store.
Definition LayoutRegistry.h:78
Definition EngineTypes.h:13
constexpr QLatin1String LayoutRegistry("org.plasmazones.LayoutRegistry")
Definition WindowTrackingService.h:38
QString oppositeCrossingDirection(const QString &direction)
The edge a neighbour surface is entered from when crossing in direction: crossing "right" lands on th...
Definition snapnavigationtargets.h:31
Definition IWindowTrackingService.h:23
D-Bus struct for cycle navigation result: (bssss)
Definition NavigationTypes.h:72
D-Bus struct for focus navigation result: (bsssss)
Definition NavigationTypes.h:61
D-Bus struct for move/push/zone-number navigation result: (bssiiiiss)
Definition NavigationTypes.h:42
D-Bus struct for restore navigation result: (bbiiii)
Definition NavigationTypes.h:110
D-Bus struct for swap navigation result: (bssiiiissiiiisssss)
Definition NavigationTypes.h:82