Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
PhosphorZones::ContextScrollingParams Struct Reference

Per-context scrolling parameter overrides resolved from context rules. More...

#include <phosphor-zones/include/PhosphorZones/AssignmentEntry.h>

Public Member Functions

bool hasDropIndicatorOverrides () const
 True when at least one drop-indicator slot resolved.
 
bool hasTabIndicatorOverrides () const
 True when at least one of the eighteen tab-indicator slots resolved.
 
bool hasBehaviourOverrides () const
 True when at least one of the seven behaviour toggles resolved, or the scroll cap did.
 
bool isEmpty () const
 

Public Attributes

std::optional< double > defaultColumnWidth
 Width a newly-opened column takes, as a fraction of the work area (0.05-1.0).
 
std::optional< int > centerFocusedColumn
 When the viewport re-centres on the focused column (0 = never, 1 = always, 2 = on overflow); the resolver maps the wire token to this int so the daemon stores the same value the config store uses.
 
std::optional< int > defaultColumnDisplay
 How a newly-opened column lays its windows out (0 = normal, 1 = tabbed).
 
std::optional< int > insertPosition
 Where a fresh-opened window's column enters the strip (ScrollInsertPosition ints, right-of-active 0 … into-active-column 4).
 
std::optional< double > defaultWindowHeight
 Height a newly-opened window takes, as a fraction of the work-area height (0.05-1.0); the engine commits it as fixed pixels at relayout.
 
std::optional< bool > alwaysCenterSingleColumn
 The scrolling BEHAVIOUR toggles, filled by the SetScroll* actions of the same names.
 
std::optional< bool > respectMinimumSize
 
std::optional< bool > cropStraddlers
 
std::optional< bool > focusNewWindows
 
std::optional< bool > smartGaps
 
std::optional< bool > focusFollowsMouse
 EFFECT-consumed, unlike its neighbours: the daemon collects the resolved per-screen verdict into a set and pushes it to the KWin effect, which owns focus-follows-mouse entirely.
 
std::optional< double > focusFollowsMouseMaxScroll
 The cap on the toggle above, as a FRACTION of the viewport's extent along the strip (niri's max-scroll-amount); 1.0 is no cap.
 
std::optional< int > stickyWindowHandling
 StickyWindowHandling ints (treatAsNormal 0 / restoreOnly 1 / ignoreAll 2); the resolver maps the wire token to the int the config store uses, matching centerFocusedColumn's treatment.
 
std::optional< int > stripAxis
 Which way the strip runs, in the Scrolling.StripAxis config INTENT space (auto 0 / horizontal 1 / vertical 2 — auto resolves from the work-area shape at relayout).
 
std::optional< bool > tabIndicatorEnabled
 The tab indicator's overrides, niri's tab-indicator layout block.
 
std::optional< bool > tabIndicatorHideWhenSingleTab
 
std::optional< bool > tabIndicatorPlaceWithinColumn
 
std::optional< int > tabIndicatorGap
 px; NEGATIVE draws the indicator over the window
 
std::optional< int > tabIndicatorWidth
 px thickness
 
std::optional< double > tabIndicatorLength
 fraction of the column extent
 
std::optional< int > tabIndicatorPosition
 TabIndicatorPosition ints, left 0 … bottom 3.
 
std::optional< int > tabIndicatorStyle
 0 = title chips, 1 = segment bar
 
std::optional< int > tabIndicatorGapsBetweenTabs
 px
 
std::optional< int > tabIndicatorCornerRadius
 px; -1 is the "fully rounded" sentinel
 
std::optional< QString > tabIndicatorActiveColor
 
std::optional< QString > tabIndicatorInactiveColor
 
std::optional< QString > tabIndicatorUrgentColor
 
std::optional< QString > tabIndicatorFontFamily
 The label font, all PAINT.
 
std::optional< int > tabIndicatorFontWeight
 CSS scale, 100..900; 400 regular, 700 bold.
 
std::optional< bool > tabIndicatorFontItalic
 
std::optional< bool > tabIndicatorFontUnderline
 
std::optional< bool > tabIndicatorFontStrikeout
 
std::optional< bool > dropIndicatorEnabled
 The drop indicator's overrides.
 
std::optional< QString > dropIndicatorColor
 
std::optional< QString > dropIndicatorBorderColor
 
std::optional< double > dropIndicatorOpacity
 fill only; the border is always opaque
 
std::optional< int > dropIndicatorBorderWidth
 px; 0 is a fill with no edge
 
std::optional< int > dropIndicatorBorderRadius
 px; 0 is square, no sentinel
 

Detailed Description

Per-context scrolling parameter overrides resolved from context rules.

Each field is set only when a matching context rule fills the corresponding slot (SetScrollDefaultColumnWidth / SetCenterFocusedColumn / SetScrollDefaultColumnDisplay / SetScrollInsertPosition / SetScrollDefaultWindowHeight / SetScrollStripAxis, the seven scrolling behaviour toggles and the focus-follows-mouse scroll cap beside them, the eighteen SetTabIndicator* slots and the six SetDropIndicator* slots, each documented in its own block below); an unset field means "use the config value". Consumed daemon-side: the values are layered onto the scrolling engine's per-screen parameters (config stays the base, the rule wins where present), the same way ContextTilingParams is layered onto the autotile override map. Resolved by LayoutRegistry::resolveContextScrollingParams.

Member Function Documentation

◆ hasBehaviourOverrides()

bool PhosphorZones::ContextScrollingParams::hasBehaviourOverrides ( ) const
inline

True when at least one of the seven behaviour toggles resolved, or the scroll cap did.

The cap is a percent rather than a toggle, but it is a behaviour override like the rest and isEmpty() has to see it.

◆ hasDropIndicatorOverrides()

bool PhosphorZones::ContextScrollingParams::hasDropIndicatorOverrides ( ) const
inline

True when at least one drop-indicator slot resolved.

◆ hasTabIndicatorOverrides()

bool PhosphorZones::ContextScrollingParams::hasTabIndicatorOverrides ( ) const
inline

True when at least one of the eighteen tab-indicator slots resolved.

◆ isEmpty()

bool PhosphorZones::ContextScrollingParams::isEmpty ( ) const
inline

Member Data Documentation

◆ alwaysCenterSingleColumn

std::optional<bool> PhosphorZones::ContextScrollingParams::alwaysCenterSingleColumn

The scrolling BEHAVIOUR toggles, filled by the SetScroll* actions of the same names.

Most are layered onto the engine's per-screen override map exactly like the sizing fields above, where each effective* reader falls back to the global config value. Two are not purely engine-side: cropStraddlers is layered on the engine map AND pushed to the KWin effect, whose paint clip and direct-scanout gate need it, and focusFollowsMouse is effect-only (see its own note below).

◆ centerFocusedColumn

std::optional<int> PhosphorZones::ContextScrollingParams::centerFocusedColumn

When the viewport re-centres on the focused column (0 = never, 1 = always, 2 = on overflow); the resolver maps the wire token to this int so the daemon stores the same value the config store uses.

◆ cropStraddlers

std::optional<bool> PhosphorZones::ContextScrollingParams::cropStraddlers

◆ defaultColumnDisplay

std::optional<int> PhosphorZones::ContextScrollingParams::defaultColumnDisplay

How a newly-opened column lays its windows out (0 = normal, 1 = tabbed).

◆ defaultColumnWidth

std::optional<double> PhosphorZones::ContextScrollingParams::defaultColumnWidth

Width a newly-opened column takes, as a fraction of the work area (0.05-1.0).

The wire value is the fraction; the editor shows a percent.

◆ defaultWindowHeight

std::optional<double> PhosphorZones::ContextScrollingParams::defaultWindowHeight

Height a newly-opened window takes, as a fraction of the work-area height (0.05-1.0); the engine commits it as fixed pixels at relayout.

◆ dropIndicatorBorderColor

std::optional<QString> PhosphorZones::ContextScrollingParams::dropIndicatorBorderColor

◆ dropIndicatorBorderRadius

std::optional<int> PhosphorZones::ContextScrollingParams::dropIndicatorBorderRadius

px; 0 is square, no sentinel

◆ dropIndicatorBorderWidth

std::optional<int> PhosphorZones::ContextScrollingParams::dropIndicatorBorderWidth

px; 0 is a fill with no edge

◆ dropIndicatorColor

std::optional<QString> PhosphorZones::ContextScrollingParams::dropIndicatorColor

◆ dropIndicatorEnabled

std::optional<bool> PhosphorZones::ContextScrollingParams::dropIndicatorEnabled

The drop indicator's overrides.

ALL PAINT — unlike the tab indicator there is no geometry half, because the indicator's rect comes from the engine's own layout math and cannot be positioned independently of where the drop lands. So none of these reaches the scrolling engine's per-screen override map; they go straight to the overlay.

◆ dropIndicatorOpacity

std::optional<double> PhosphorZones::ContextScrollingParams::dropIndicatorOpacity

fill only; the border is always opaque

◆ focusFollowsMouse

std::optional<bool> PhosphorZones::ContextScrollingParams::focusFollowsMouse

EFFECT-consumed, unlike its neighbours: the daemon collects the resolved per-screen verdict into a set and pushes it to the KWin effect, which owns focus-follows-mouse entirely.

◆ focusFollowsMouseMaxScroll

std::optional<double> PhosphorZones::ContextScrollingParams::focusFollowsMouseMaxScroll

The cap on the toggle above, as a FRACTION of the viewport's extent along the strip (niri's max-scroll-amount); 1.0 is no cap.

Reaches the compositor by a channel of its own: the daemon hands the percent to the engine, which names the windows too far from the current view, and that window set is what the effect receives.

◆ focusNewWindows

std::optional<bool> PhosphorZones::ContextScrollingParams::focusNewWindows

◆ insertPosition

std::optional<int> PhosphorZones::ContextScrollingParams::insertPosition

Where a fresh-opened window's column enters the strip (ScrollInsertPosition ints, right-of-active 0 … into-active-column 4).

◆ respectMinimumSize

std::optional<bool> PhosphorZones::ContextScrollingParams::respectMinimumSize

◆ smartGaps

std::optional<bool> PhosphorZones::ContextScrollingParams::smartGaps

◆ stickyWindowHandling

std::optional<int> PhosphorZones::ContextScrollingParams::stickyWindowHandling

StickyWindowHandling ints (treatAsNormal 0 / restoreOnly 1 / ignoreAll 2); the resolver maps the wire token to the int the config store uses, matching centerFocusedColumn's treatment.

◆ stripAxis

std::optional<int> PhosphorZones::ContextScrollingParams::stripAxis

Which way the strip runs, in the Scrolling.StripAxis config INTENT space (auto 0 / horizontal 1 / vertical 2 — auto resolves from the work-area shape at relayout).

Layered onto the engine's per-screen override map over the settings-channel seed, so the collapse is rule > per-screen setting > global. Not a behaviour toggle: it is a geometry intent, so it sits beside the sizing fields rather than in hasBehaviourOverrides.

◆ tabIndicatorActiveColor

std::optional<QString> PhosphorZones::ContextScrollingParams::tabIndicatorActiveColor

◆ tabIndicatorCornerRadius

std::optional<int> PhosphorZones::ContextScrollingParams::tabIndicatorCornerRadius

px; -1 is the "fully rounded" sentinel

◆ tabIndicatorEnabled

std::optional<bool> PhosphorZones::ContextScrollingParams::tabIndicatorEnabled

The tab indicator's overrides, niri's tab-indicator layout block.

Split the way IScrollSettings splits the family: the GEOMETRY fields are layered onto the scrolling engine's per-screen override map, while the PAINT fields never reach that library. The daemon pushes those to the KWin effect through TilingAdaptor::setScrollTabPaintOverrides and the effect draws the indicator from them. Each is independently optional so a context rule that sets one property leaves the other seventeen alone.

◆ tabIndicatorFontFamily

std::optional<QString> PhosphorZones::ContextScrollingParams::tabIndicatorFontFamily

The label font, all PAINT.

Empty FAMILY is a set value meaning "the system font", not an unset one, which is why the resolver stores the empty string here instead of leaving the optional disengaged. There is no size field to go with these: the painter fits the label to the pill thickness, so a stored size would never survive a paint.

◆ tabIndicatorFontItalic

std::optional<bool> PhosphorZones::ContextScrollingParams::tabIndicatorFontItalic

◆ tabIndicatorFontStrikeout

std::optional<bool> PhosphorZones::ContextScrollingParams::tabIndicatorFontStrikeout

◆ tabIndicatorFontUnderline

std::optional<bool> PhosphorZones::ContextScrollingParams::tabIndicatorFontUnderline

◆ tabIndicatorFontWeight

std::optional<int> PhosphorZones::ContextScrollingParams::tabIndicatorFontWeight

CSS scale, 100..900; 400 regular, 700 bold.

◆ tabIndicatorGap

std::optional<int> PhosphorZones::ContextScrollingParams::tabIndicatorGap

px; NEGATIVE draws the indicator over the window

◆ tabIndicatorGapsBetweenTabs

std::optional<int> PhosphorZones::ContextScrollingParams::tabIndicatorGapsBetweenTabs

px

◆ tabIndicatorHideWhenSingleTab

std::optional<bool> PhosphorZones::ContextScrollingParams::tabIndicatorHideWhenSingleTab

◆ tabIndicatorInactiveColor

std::optional<QString> PhosphorZones::ContextScrollingParams::tabIndicatorInactiveColor

◆ tabIndicatorLength

std::optional<double> PhosphorZones::ContextScrollingParams::tabIndicatorLength

fraction of the column extent

◆ tabIndicatorPlaceWithinColumn

std::optional<bool> PhosphorZones::ContextScrollingParams::tabIndicatorPlaceWithinColumn

◆ tabIndicatorPosition

std::optional<int> PhosphorZones::ContextScrollingParams::tabIndicatorPosition

TabIndicatorPosition ints, left 0 … bottom 3.

◆ tabIndicatorStyle

std::optional<int> PhosphorZones::ContextScrollingParams::tabIndicatorStyle

0 = title chips, 1 = segment bar

◆ tabIndicatorUrgentColor

std::optional<QString> PhosphorZones::ContextScrollingParams::tabIndicatorUrgentColor

◆ tabIndicatorWidth

std::optional<int> PhosphorZones::ContextScrollingParams::tabIndicatorWidth

px thickness


The documentation for this struct was generated from the following file: