13#include <phosphorsnapengine_export.h>
26#include <PhosphorRules/RuleEvaluator.h>
55class INavigationStateProvider;
56class IZoneAdjacencyResolver;
57class SnapNavigationTargetResolver;
81 QObject* parent =
nullptr);
114 int targetDesktop)
const;
140 using IPlacementEngine::windowOpened;
141 void windowOpened(const QString& windowId, const QString& screenId,
int minWidth,
int minHeight) override;
179 m_shouldRestorePredicate = std::move(predicate);
222 m_restorePositionPredicate = std::move(predicate);
252 m_managedRestorePredicate = std::move(predicate);
266 m_liveModeResolver = std::move(resolver);
283 m_tilingEngineLiveResolver = std::move(resolver);
298 using FloatPredicate = std::function<bool(
const QString& windowId,
const QString& screenId)>;
302 m_floatPredicate = std::move(predicate);
324 m_unfloatFallbackPredicate = std::move(predicate);
347 m_placementZonesResolver = std::move(resolver);
351 void windowFocused(
const QString& windowId,
const QString& screenId)
override;
353 void setWindowFloat(
const QString& windowId,
bool shouldFloat,
const QString& screenId = QString())
override;
361 return LayoutSupport::Placement;
367 return QStringLiteral(
"snap");
416 QVector<PhosphorEngine::ZoneAssignmentEntry>
418 const QStringList& preClaimedZoneIds = {});
703 std::optional<PhosphorEngine::WindowPlacement>
capturePlacement(
const QString& windowId)
const override;
716 int gateDesktop)
const;
761 void commitSnap(
const QString& windowId,
const QString& zoneId,
const QString& screenId,
763 int virtualDesktop = 0);
767 int virtualDesktop = 0);
785 bool confineToFallbackScreen)
const;
799 const QString& fallbackScreen)
const;
804 std::function<QString()> fallbackScreenResolver = {});
811 bool isSticky)
const;
813 bool isSticky)
const;
815 bool isSticky)
const;
822 QVector<PhosphorEngine::ZoneAssignmentEntry>
824 QVector<PhosphorEngine::ZoneAssignmentEntry>
826 const QStringList& preClaimedZoneIds = {})
const;
828 const QString& screenId)
const;
830 const QString& screenFilter = QString())
const;
839 return m_effectReportedWindows;
883 m_saveFn = std::move(saveFn);
884 m_loadFn = std::move(loadFn);
893 return m_lastActiveScreenId;
940 std::function<std::optional<PhosphorRules::WindowQuery>(
const QString& windowId,
const QString& screenHint)>;
947 m_exclusionQueryProvider = std::move(provider);
973 bool isWindowExcluded(
const QString& windowId,
const QString& screenHint = QString())
const;
988 const QString& screenId,
bool sizeOnly);
1011 QString canonicalWindowId(
const QString& rawWindowId)
const;
1017 return m_context.currentKeyForScreen(screenId);
1032 void forEachSnapAssignment(
const std::function<
void(
const QString& windowId,
const QStringList& zoneIds,
1033 const QString& screenId,
int desktop)>& fn)
const;
1039 void syncGlobalLastUsedForRemovedZones(
const QStringList& removedZones);
1046 const SnapState* lastUsedStateForScreen(
const QString& screenId)
const;
1048 void commitSnapImpl(
const QString& windowId,
const QStringList& zoneIds,
const QString& screenId,
1064 QString resolveUnfloatScreen(
const QString& primaryScreen,
const QString& fallbackScreen)
const;
1082 QPointer<QObject> m_autotileEngineObj;
1088 QPointer<QObject> m_zoneAdjacencyResolverObj;
1097 QPointer<QObject> m_navStateObj;
1103 std::unique_ptr<SnapNavigationTargetResolver> m_targetResolver;
1104 QSet<QString> m_effectReportedWindows;
1115 enum class UnfloatCause {
1127 bool unfloatToZone(
const QString& windowId,
const QString& screenId, UnfloatCause cause);
1128 bool applyGeometryForFloat(
const QString& windowId,
const QString& screenId);
1133 void applyFloatGeometryUnlessMinimized(
const QString& windowId,
const QString& screenId);
1144 SnapNavigationTargetResolver* ensureTargetResolver(
const QString& action = QString());
1156 bool tryCrossDesktopMove(
const QString& windowId,
const QString& direction,
const QString& screenId);
1166 bool tryCrossModeOutput(
const QString& windowId,
const QString& direction,
const QString& screenId,
bool swap);
1175 bool tryCrossDesktopFocus(
const QString& focusedWindowId,
const QString& direction,
const QString& screenId);
1182 bool isWindowExcludedForAction(
const QString& windowId,
const QString& action,
const QString& screenId);
1191 bool evaluateExcludeRules(
const PhosphorRules::WindowQuery& query)
const;
1206 const PhosphorRules::RuleSet* m_excludeRuleSet =
nullptr;
1215 mutable std::optional<PhosphorRules::RuleEvaluator> m_excludeEvaluator;
1220 ExclusionQueryProvider m_exclusionQueryProvider{};
1223 std::function<void()> m_saveFn;
1224 std::function<void()> m_loadFn;
1227 QString m_lastActiveScreenId;
1236 ShouldRestorePredicate m_shouldRestorePredicate{};
1242 RestorePositionPredicate m_restorePositionPredicate{};
1247 ManagedRestorePredicate m_managedRestorePredicate{};
1252 LiveModeResolver m_liveModeResolver{};
1254 TilingEngineLiveResolver m_tilingEngineLiveResolver{};
1258 FloatPredicate m_floatPredicate{};
1263 UnfloatFallbackPredicate m_unfloatFallbackPredicate{};
1268 PlacementZonesResolver m_placementZonesResolver{};
Resolves the neighbouring surface — output or virtual desktop — in a direction, for cross-surface win...
Definition ICrossSurfaceResolver.h:21
Unified placement engine interface.
Definition IPlacementEngine.h:72
LayoutSupport
How this engine relates to user-selectable layouts — the entries the layout picker,...
Definition IPlacementEngine.h:964
Per-screen placement state contract.
Definition IPlacementState.h:28
Definition ISnapSettings.h:12
Definition IVirtualDesktopManager.h:13
Definition IWindowRegistry.h:14
Definition IWindowTrackingService.h:34
The two cooperating maps a per-monitor placement engine keeps: a forward map from PlacementStateKey t...
Definition PerScreenStates.h:35
Abstract base class for placement engines.
Definition PlacementEngineBase.h:32
Tracks the "current context" of each screen for a placement engine: the global current virtual deskto...
Definition ScreenContextTracker.h:46
Narrow read-only interface for compositor-layer state queries.
Definition INavigationStateProvider.h:32
Narrow interface for zone-adjacency queries used by snap navigation.
Definition IZoneAdjacencyResolver.h:28
Engine for manual zone-based window snapping.
Definition SnapEngine.h:74
void setWindowFloat(const QString &windowId, bool shouldFloat, const QString &screenId=QString()) override
Set floating state explicitly (directional, not toggle).
void windowSnapStateChanged(const QString &windowId, const PhosphorProtocol::WindowStateEntry &entry)
Snap state changed (commit / uncommit). WTA relays to D-Bus windowStateChanged.
void snapAllWindowsRequested(const QString &screenId)
Request KWin effect to collect unsnapped windows and snap them all.
void focusInDirection(const QString &direction, const PhosphorEngine::NavigationContext &ctx) override
Walk to the adjacent window in direction and transfer keyboard focus.
QString entryZoneForCrossing(const QString &direction, const QString &neighbourScreen) const
The zone a window ENTERS when it crosses onto neighbourScreen moving in direction: the first zone on ...
PhosphorEngine::SnapResult calculateSnapToPlacementRule(const QString &windowId, const QString &windowScreenName, bool isSticky) const
void markWindowReported(const QString &windowId)
void setPersistenceDelegate(std::function< void()> saveFn, std::function< void()> loadFn)
Set persistence callbacks for save/load.
Definition SnapEngine.h:881
std::function< bool(const QString &windowId)> ManagedRestorePredicate
Predicate consulted in resolveWindowRestore to decide whether a window that was SNAPPED at logout sho...
Definition SnapEngine.h:242
QVector< PhosphorEngine::ZoneAssignmentEntry > calculateRotation(bool clockwise, const QString &screenFilter=QString()) const
void setRestorePositionPredicate(RestorePositionPredicate predicate)
Inject the unsnapped-position-restore gate.
Definition SnapEngine.h:220
void setExclusionQueryProvider(ExclusionQueryProvider provider)
Inject the exclusion query provider.
Definition SnapEngine.h:945
bool isFloating(const QString &windowId) const
void setManagedRestorePredicate(ManagedRestorePredicate predicate)
Inject the managed (snapped-to-zone) restore gate.
Definition SnapEngine.h:250
void emitBatchedResnap(const QVector< PhosphorEngine::ZoneAssignmentEntry > &entries)
Emit a single batched resnapToNewLayoutRequested signal.
void setUnfloatFallbackPredicate(UnfloatFallbackPredicate predicate)
Definition SnapEngine.h:322
void setCurrentDesktop(int desktop) override
QSet< int > desktopsWithActiveState() const override
const QSet< QString > & effectReportedWindows() const
Definition SnapEngine.h:837
PhosphorEngine::SnapResult calculateSnapToLastZone(const QString &windowId, const QString &windowScreenId, bool isSticky) const
int pruneStaleWindows(const QSet< QString > &aliveWindowIds) override
Drop any per-engine bookkeeping for windows not in aliveWindowIds.
bool isAppIdExcluded(const QString &appId) const
True if appId matches an enabled rule in the borrowed placement-exclusion set (Exclude or ExcludePlac...
void reapplyManagedWindowAppearance() override
Re-emit the snap geometry for every currently-snapped (non-floating) window so the compositor re-appl...
void rotateWindowsInLayout(bool clockwise, const QString &screenId)
Rotate snapped windows through the layout's zone order on screenId.
void toggleFocusedFloat(const PhosphorEngine::NavigationContext &ctx) override
Toggle the focused window between snapped and floating.
void setExcludeRuleSet(const PhosphorRules::RuleSet *ruleSet)
Wire the daemon's filtered placement-exclusion rule set (rules carrying an Exclude or ExcludePlacemen...
SnapState * snapState() const
The global-scalar holder (alias of globalState).
Definition SnapEngine.h:533
std::optional< PhosphorEngine::WindowPlacement > capturePlacementAtDesktop(const QString &windowId, int gateDesktop) const
capturePlacement with the mode gate resolved at an EXPLICIT desktop.
PhosphorEngine::SnapResult calculateSnapToEmptyZone(const QString &windowId, const QString &windowScreenId, bool isSticky) const
QString screenForTrackedWindow(const QString &windowId) const override
Return the screen this engine considers the window to be on, or empty if the window isn't tracked by ...
void setLiveModeResolver(LiveModeResolver resolver)
Definition SnapEngine.h:264
void setPlacementZonesResolver(PlacementZonesResolver resolver)
Definition SnapEngine.h:345
bool isWindowExcluded(const QString &windowId, const QString &screenHint=QString()) const
Resolve exclusion for a live windowId using the FULL window attributes when the exclusion query provi...
void reapplyLayout(const PhosphorEngine::NavigationContext &ctx) override
Re-apply the current layout to all managed windows.
bool isActiveOnScreen(const QString &screenId) const override
Whether this engine is active on the given screen.
void pushToEmptyZone(const PhosphorEngine::NavigationContext &ctx) override
Move the focused window to the first empty zone on ctx.screenId.
void restoreFocusedWindow(const PhosphorEngine::NavigationContext &ctx) override
Restore the focused window to its captured pre-snap size and unsnap.
std::function< bool(const QString &screenId)> ShouldRestorePredicate
Predicate consulted on the auto-snap entry path to suppress zone restores onto a context the user dis...
Definition SnapEngine.h:168
std::function< bool(const QString &windowId, const QString &screenId)> UnfloatFallbackPredicate
Predicate deciding whether an unfloat with NO remembered pre-float zone falls back to a zone anyway (...
Definition SnapEngine.h:320
void windowFloatingClearedForSnap(const QString &windowId, const QString &screenId)
Floating state cleared as part of a commit. WTA relays as windowFloatingChanged(id,...
LayoutSupport layoutSupport() const override
Snap placement is driven by user-selectable zone layouts.
Definition SnapEngine.h:359
void resnapFromAutotileOrder(const QStringList &autotileWindowOrder, const QString &screenId)
Resnap windows using autotile window order as assignment source.
PhosphorEngine::IPlacementState * stateForScreen(const QString &screenId) override
Per-screen state object for the given screen.
std::pair< QString, QRect > resolveCrossDesktopZone(const QString ¤tZoneId, const QString &screenId, int targetDesktop) const
Resolve the zone on screenId's targetDesktop layout that is positionally equivalent to currentZoneId ...
void handoffReceive(const HandoffContext &ctx) override
Receive ownership of a window from another engine.
void setFloating(const QString &windowId, bool floating)
void setCurrentActivity(const QString &activity) override
void snapAllWindows(const QString &screenId)
Request the KWin effect to collect and snap all unsnapped windows.
void switchFocusBetweenFloatingAndTiling(const QString &screenId) override
Jump focus between the float layer and the snapped layout (niri's switch-focus-between-floating-and-t...
PhosphorEngine::UnfloatResult resolveFallbackUnfloatGeometry(const QString &windowId, const QString &fallbackScreen) const
Fallback unfloat target for a window with NO pre-float zone (a never-snapped window that defaulted to...
void saveState() override
void setFloatPredicate(FloatPredicate predicate)
Definition SnapEngine.h:300
void moveFocusedToPosition(int zoneNumber, const PhosphorEngine::NavigationContext &ctx) override
Move the focused window to the layout zone with zoneNumber (1-based) on ctx.screenId.
QVector< PhosphorEngine::ZoneAssignmentEntry > calculateResnapFromPreviousLayout()
int currentVirtualDesktopForScreen(const QString &screenId) const
This screen's current virtual desktop (Plasma 6.7 per-output virtual desktops, #648).
void handoffRelease(const QString &windowId) override
Release ownership of a window WITHOUT modifying its geometry.
void moveFocusedInDirection(const QString &direction, const PhosphorEngine::NavigationContext &ctx) override
Move the focused window into the adjacent zone in direction (displacing or filling the target).
int currentVirtualDesktop() const
Current virtual desktop (1-based; 0 when no virtual-desktop manager is wired) and activity,...
std::function< PlacementDirective(const QString &windowId, const QString &screenId)> PlacementZonesResolver
Resolver yielding the open-placement directive — SnapToZone ordinals and/or zone names,...
Definition SnapEngine.h:343
bool isEnabled() const noexcept override
True when snapping is globally enabled.
std::function< bool(const QString &windowId)> RestorePositionPredicate
Predicate consulted in resolveWindowRestore to decide whether a FLOATED window should have its previo...
Definition SnapEngine.h:212
QString windowInZoneOnScreen(const QString &zoneId, const QString &screenId) const
The window snapped to zoneId on screenId (the daemon's stored assignment pins it to that output),...
QString engineId() const override
Stable engine identity for HandoffContext.fromEngineId.
Definition SnapEngine.h:365
SnapState * stateForWindow(const QString &windowId)
The SnapState that owns windowId (via the reverse map), or the global holder when the window is untra...
void spanFocusedInDirection(const QString &direction, const PhosphorEngine::NavigationContext &ctx) override
Grow the focused window's zone span into the adjacent zone(s) in direction, or retract the opposite e...
PhosphorEngine::UnfloatResult resolveUnfloatGeometry(const QString &windowId, const QString &fallbackScreen) const
Unconfined (user-toggle) form.
void applyGeometriesBatch(const PhosphorProtocol::WindowGeometryList &geometries, const QString &action)
Batch of window-geometry updates, applied by the KWin effect in a single operation.
void setCurrentDesktopForScreen(const QString &screenId, int desktop) override
Set a single screen's current virtual desktop (Plasma 6.7 "switch desktops independently for each scr...
void pruneStatesForActivities(const QStringList &validActivities) override
void setWindowRegistry(QObject *registry) override
Attach the daemon's shared window registry.
void resnapToNewLayoutRequested(const QString &resnapData)
Batched resnap data (routed through WTA::handleBatchedResnap for bookkeeping)
std::function< bool(PhosphorZones::AssignmentEntry::Mode mode, const QString &screenId)> TilingEngineLiveResolver
Whether the tiling engine owning mode is actually LIVE on screenId — the liveness half of resolveWind...
Definition SnapEngine.h:280
std::optional< PhosphorEngine::WindowPlacement > capturePlacement(const QString &windowId) const override
Unified placement model — report this window's current snap state (snapped or floated) for persistenc...
void pushFocusedToEmptyZone(const PhosphorEngine::NavigationContext &ctx)
Move the focused window to the first empty zone on ctx.screenId.
void commitMultiZoneSnap(const QString &windowId, const QStringList &zoneIds, const QString &screenId, PhosphorEngine::SnapIntent intent=PhosphorEngine::SnapIntent::UserInitiated, int virtualDesktop=0)
void setTilingEngineLiveResolver(TilingEngineLiveResolver resolver)
Definition SnapEngine.h:281
std::function< PhosphorZones::AssignmentEntry::Mode(const QString &screenId)> LiveModeResolver
Live placement-mode resolver injected by the daemon (its ScreenModeRouter): engine-live-set-first wit...
Definition SnapEngine.h:263
PhosphorEngine::UnfloatResult resolveUnfloatGeometry(const QString &windowId, const QString &fallbackScreen, bool confineToFallbackScreen) const
confineToFallbackScreen refuses (returns not-found) when the RECORDED (raw, unresolved) home screen n...
QVector< PhosphorEngine::ZoneAssignmentEntry > calculateSnapAllWindowEntries(const QStringList &windowIds, const QString &screenId) const
void windowClosed(const QString &windowId) override
A window was closed.
void snapAllWindows(const PhosphorEngine::NavigationContext &ctx) override
Snap every unmanaged window on the screen.
bool migrateWindowToScreen(const QString &windowId, const QString &newScreenId)
Re-home a tracked window's snap state onto newScreenId's per-key store when it crosses monitors.
void rotateWindows(bool clockwise, const PhosphorEngine::NavigationContext &ctx) override
Rotate snapped windows through the layout's zone order, dispatched via IPlacementEngine.
QVector< PhosphorEngine::ZoneAssignmentEntry > calculateResnapFromCurrentAssignments(const QString &screenFilter=QString()) const
void applyNoMatchFloatDefault(const QString &windowId, const QString &screenId)
The no-match float-default terminal of resolveWindowRestore, callable by the SnapAdaptor when a SnapR...
const PhosphorEngine::IPlacementState * stateForScreen(const QString &screenId) const override
void applyGeometryRequested(const QString &windowId, int x, int y, int width, int height, const QString &zoneId, const QString &screenId, bool sizeOnly)
Daemon-driven geometry application (used by autotile float restore)
QString lastActiveScreenId() const
Last screen the engine saw via windowFocused.
Definition SnapEngine.h:891
QStringList floatingWindows() const
void resnapToNewLayout()
Resnap windows from previous layout to current layout after layout switch.
bool isWindowTracked(const QString &windowId) const override
Whether this engine considers the window owned (snapped, snap-floated, or otherwise carried in SnapSt...
void windowFocused(const QString &windowId, const QString &screenId) override
A window gained focus (called when the compositor reports activation).
void loadState() override
SnapState * stateForWindowOnScreen(const QString &windowId, const QString &screenId)
Resolve-or-register the owning state for windowId placed/acting on screenId, and return it.
PhosphorProtocol::SnapAllResultList calculateSnapAllWindows(const QStringList &windowIds, const QString &screenId)
Calculate snap-all-windows assignments without applying them.
void cycleFocus(bool forward, const PhosphorEngine::NavigationContext &ctx) override
Cycle keyboard focus forward/backward through managed windows in the active zone (or the layout cycle...
void uncommitSnap(const QString &windowId)
PhosphorEngine::SnapResult resolveWindowRestore(const QString &windowId, const QString &screenId, bool sticky, PhosphorEngine::WindowKind kind=PhosphorEngine::WindowKind::Unknown)
Resolve auto-snap for a newly opened window.
QVector< PhosphorEngine::ZoneAssignmentEntry > calculateResnapEntriesFromAutotileOrder(const QStringList &autotileWindowOrder, const QString &screenId, const QStringList &preClaimedZoneIds={})
Calculate resnap entries from autotile order WITHOUT emitting signal.
void commitSnap(const QString &windowId, const QString &zoneId, const QString &screenId, PhosphorEngine::SnapIntent intent=PhosphorEngine::SnapIntent::UserInitiated, int virtualDesktop=0)
virtualDesktop pins the assignment to a specific 1-based desktop; 0 (default) records it on the windo...
QString zoneForWindow(const QString &windowId) const
Primary zone of windowId across the per-screen stores (empty if none).
std::function< bool(const QString &windowId, const QString &screenId)> FloatPredicate
Predicate deciding whether an opening window should start FLOATING because a "Float this app" rule ma...
Definition SnapEngine.h:298
SnapState * globalState() const
The global-scalar holder (last-used-zone + user-snapped classes).
Definition SnapEngine.h:525
QVector< PhosphorEngine::ZoneAssignmentEntry > calculateResnapFromAutotileOrder(const QStringList &autotileWindowOrder, const QString &screenId, const QStringList &preClaimedZoneIds={}) const
void toggleWindowFloat(const QString &windowId, const QString &screenId) override
Toggle between managed and floating.
void pruneStatesForDesktop(int removedDesktop) override
void setAutotileEngine(PhosphorEngine::IPlacementEngine *engine)
Set the autotile engine for screen ownership checks.
PhosphorProtocol::WindowGeometryList applyBatchAssignments(const QVector< PhosphorEngine::ZoneAssignmentEntry > &entries, PhosphorEngine::SnapIntent intent=PhosphorEngine::SnapIntent::UserInitiated, std::function< QString()> fallbackScreenResolver={})
void setNavigationStateProvider(INavigationStateProvider *provider)
Wire the typed navigation-state provider.
QList< SnapState * > allSnapStates() const
Every SnapState the engine owns, including the global holder, for whole-store enumerations (occupied ...
QString currentActivity() const
std::function< std::optional< PhosphorRules::WindowQuery >(const QString &windowId, const QString &screenHint)> ExclusionQueryProvider
Provider that builds the full WindowQuery (window class / title / role / frame size / flags) for a li...
Definition SnapEngine.h:940
void forgetWindow(const QString &windowId)
Drop the reverse-map entry for windowId (window closed / fully removed).
void pruneStatesForRemovedScreen(const QString &physicalScreenId) override
Prune per-(screen, desktop, activity) state for a PHYSICALLY REMOVED output (monitor hot-unplug),...
void setZoneAdjacencyResolver(IZoneAdjacencyResolver *resolver)
Set typed zone-adjacency resolver for directional navigation.
const SnapState * stateForWindow(const QString &windowId) const
void setCrossSurfaceResolver(PhosphorEngine::ICrossSurfaceResolver *resolver) override
Inject the cross-surface resolver (neighbour output / desktop lookup), threaded into the navigation t...
void swapFocusedInDirection(const QString &direction, const PhosphorEngine::NavigationContext &ctx) override
Swap the focused window with whatever's in the adjacent zone in direction.
void resnapCurrentAssignments(const QString &screenFilter=QString())
Resnap windows to their current zone assignments (re-apply geometries)
SnapEngine(PhosphorZones::LayoutRegistry *layoutManager, PhosphorEngine::IWindowTrackingService *windowTracker, PhosphorZones::IZoneDetector *zoneDetector, PhosphorEngine::IVirtualDesktopManager *vdm, QObject *parent=nullptr)
Per-screen snap placement state.
Definition SnapState.h:32
Abstract interface for zone detection + highlight lifecycle.
Definition IZoneDetector.h:84
Manual zone-layout registry + per-context assignment store.
Definition LayoutRegistry.h:89
Definition EngineTypes.h:14
SnapIntent
Definition EngineTypes.h:59
WindowKind
Coarse structural classification for the snap-restore consume gate.
Definition EngineTypes.h:66
constexpr QLatin1String LayoutRegistry("org.plasmazones.LayoutRegistry")
QList< SnapAllResultEntry > SnapAllResultList
Definition NavigationTypes.h:38
QList< WindowGeometryEntry > WindowGeometryList
Definition WindowTypes.h:51
Definition SnapStateResolver.h:11
Definition IWindowTrackingService.h:23
Context for a cross-engine window handoff.
Definition IPlacementEngine.h:872
Target window + screen for a navigation or lifecycle operation.
Definition NavigationContext.h:18
Identity of a per-screen placement state: a window's placement is scoped to the (screen,...
Definition EngineTypes.h:22
Definition EngineTypes.h:114
Definition EngineTypes.h:150
D-Bus struct for window state: (sssbsasb)
Definition WindowTypes.h:77
What a matched open-placement rule directs for an opening window.
Definition PlacementDirective.h:39
Mode
Per-context engine selection.
Definition AssignmentEntry.h:212