Window placement state tracking — zone assignments, floating state, auto-snap, resnap, rotation, and empty-zone queries.
Window-zone management state. Tracks which windows are in which zones, handles floating / unfloating, auto-snaps new windows to their last-used zone, resnaps when layouts or screens change, rotates windows between zones, and provides empty-zone queries for snap-assist.
The daemon owns a WindowTrackingService instance and exposes it over D-Bus. Compositor plugins consume the resulting geometry through that surface rather than linking this library directly.
| Type | Purpose |
|---|---|
WindowTrackingService | Main service — zone assignments, floating, auto-snap, resnap, rotation |
IGeometryResolver | Interface for gap/padding resolution (consumer provides) |
PlacementConfig | Value struct for runtime config (replaces ISettings dependency) |
#include <PhosphorPlacement/WindowTrackingService.h>
#include <PhosphorPlacement/IGeometryResolver.h>
#include <PhosphorPlacement/PlacementConfig.h>
class MyResolver : public PhosphorPlacement::IGeometryResolver {
int resolveZonePadding(PhosphorZones::Layout* layout, const QString& screenId) const override {
return 8;
}
PhosphorLayout::EdgeGaps resolveOuterGaps(PhosphorZones::Layout* layout, const QString& screenId) const override {
return PhosphorLayout::EdgeGaps::uniform(8);
}
int defaultBorderWidth() const override { return 2; }
int defaultBorderRadius() const override { return 0; }
};
MyResolver resolver;
PhosphorPlacement::WindowTrackingService wts(
layoutManager, zoneDetector, screenManager, vdm, &resolver);
wts.setSnapState(snapState);
wts.setWindowRegistry(registry);