Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
ServiceConstants.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 <QByteArray>
7#include <QLatin1String>
8#include <QtGlobal>
9#include <algorithm>
10#include <cmath>
11
13
20inline constexpr QLatin1String Name("org.plasmazones");
21inline constexpr QLatin1String ObjectPath("/PlasmaZones");
22
32inline constexpr int QuickLayoutSlotCount = 9;
33
34namespace Interface {
35inline constexpr QLatin1String Settings("org.plasmazones.Settings");
36inline constexpr QLatin1String WindowDrag("org.plasmazones.WindowDrag");
37inline constexpr QLatin1String WindowTracking("org.plasmazones.WindowTracking");
38inline constexpr QLatin1String Overlay("org.plasmazones.Overlay");
39// Shared tiling-family engine pipeline (autotile + scrolling). Renamed
40// from org.plasmazones.Autotile when the scrolling engine joined; the
41// project ships daemon and effect together, so no wire compatibility
42// alias is kept.
43inline constexpr QLatin1String Tiling("org.plasmazones.Tiling");
44// Engine-specific sibling interfaces (autotile verbs / scrolling screen
45// set). Listed so this namespace stays a complete index of published
46// interfaces even though the adaptors' Q_CLASSINFO must repeat the
47// literal (macro argument).
48inline constexpr QLatin1String Autotile("org.plasmazones.Autotile");
49inline constexpr QLatin1String Scrolling("org.plasmazones.Scrolling");
50inline constexpr QLatin1String LayoutRegistry("org.plasmazones.LayoutRegistry");
51inline constexpr QLatin1String Screen("org.plasmazones.Screen");
52inline constexpr QLatin1String ZoneDetection("org.plasmazones.ZoneDetection");
53inline constexpr QLatin1String CompositorBridge("org.plasmazones.CompositorBridge");
54inline constexpr QLatin1String Snap("org.plasmazones.Snap");
55inline constexpr QLatin1String Rules("org.plasmazones.Rules");
56inline constexpr QLatin1String Control("org.plasmazones.Control");
57inline constexpr QLatin1String Shader("org.plasmazones.Shader");
58}
59
63namespace Error {
64inline constexpr QLatin1String Busy("org.plasmazones.Error.Busy");
65inline constexpr QLatin1String Shutdown("org.plasmazones.Error.Shutdown");
66}
67
74namespace SettingProperty {
75inline constexpr QLatin1String ShaderProfileTree("shaderProfileTree");
76inline constexpr QLatin1String MotionProfileTree("motionProfileTree");
77inline constexpr QLatin1String AnimationShaderSearchPaths("animationShaderSearchPaths");
78inline constexpr QLatin1String DecorationProfileTree("decorationProfileTree");
79}
80
87namespace WindowMetadataKey {
88inline constexpr QLatin1String IsMinimized("isMinimized");
92inline constexpr QLatin1String IsDemandingAttention("isDemandingAttention");
93inline constexpr QLatin1String IsFullscreen("isFullscreen");
94inline constexpr QLatin1String IsSticky("isSticky");
95inline constexpr QLatin1String IsMaximized("isMaximized");
96inline constexpr QLatin1String IsFocused("isFocused");
97inline constexpr QLatin1String IsTransient("isTransient");
98inline constexpr QLatin1String IsNotification("isNotification");
99inline constexpr QLatin1String KeepAbove("keepAbove");
100inline constexpr QLatin1String KeepBelow("keepBelow");
101inline constexpr QLatin1String SkipTaskbar("skipTaskbar");
102inline constexpr QLatin1String SkipPager("skipPager");
103inline constexpr QLatin1String SkipSwitcher("skipSwitcher");
104inline constexpr QLatin1String IsModal("isModal");
105inline constexpr QLatin1String HasDecoration("hasDecoration");
106inline constexpr QLatin1String IsResizable("isResizable");
107inline constexpr QLatin1String IsMovable("isMovable");
108inline constexpr QLatin1String IsMaximizable("isMaximizable");
109inline constexpr QLatin1String Width("width");
110inline constexpr QLatin1String Height("height");
111inline constexpr QLatin1String PositionX("positionX");
112inline constexpr QLatin1String PositionY("positionY");
113inline constexpr QLatin1String CaptionNormal("captionNormal");
117inline constexpr QLatin1String VirtualDesktops("virtualDesktops");
118}
119
131namespace ScrollTabKey {
132inline constexpr QLatin1String TabStyle("tabStyle");
133inline constexpr QLatin1String GapsBetweenTabs("gapsBetweenTabs");
134inline constexpr QLatin1String CornerRadius("cornerRadius");
135inline constexpr QLatin1String ActiveColor("activeColor");
136inline constexpr QLatin1String InactiveColor("inactiveColor");
137inline constexpr QLatin1String UrgentColor("urgentColor");
138// The tab label's font. Paint keys like TabStyle, GapsBetweenTabs and
139// CornerRadius, carried on the per-screen override map only — a window rule
140// cannot restyle one tab's text, only recolour it, so unlike the three colours
141// above these have no counterpart on the colour map. There is no size key:
142// the effect's painter fits the label to the pill thickness.
143inline constexpr QLatin1String FontFamily("fontFamily");
144inline constexpr QLatin1String FontWeight("fontWeight");
145inline constexpr QLatin1String FontItalic("fontItalic");
146inline constexpr QLatin1String FontUnderline("fontUnderline");
147inline constexpr QLatin1String FontStrikeout("fontStrikeout");
148}
149
170namespace ScrollBehaviourKey {
171inline constexpr QLatin1String FocusFollowsMouse("focusFollowsMouse");
172inline constexpr QLatin1String CropStraddlers("cropStraddlers");
173inline constexpr QLatin1String VerticalAxis("verticalAxis");
174}
175
203namespace StripPreviewKey {
207inline constexpr QLatin1String TabCount("tabCount");
212inline constexpr QLatin1String ActiveTab("activeTab");
215inline constexpr QLatin1String TabPosition("tabPosition");
220inline constexpr QLatin1String TabLength("tabLength");
221}
222
226namespace Apps {
227namespace Settings {
228inline constexpr QLatin1String ServiceName("org.plasmazones.Settings.App");
229inline constexpr QLatin1String ObjectPath("/SettingsApp");
230inline constexpr QLatin1String Interface("org.plasmazones.SettingsController");
231}
232namespace Editor {
233inline constexpr QLatin1String ServiceName("org.plasmazones.Editor.App");
234inline constexpr QLatin1String ObjectPath("/EditorApp");
235inline constexpr QLatin1String Interface("org.plasmazones.EditorController");
236}
237}
238
239// Protocol version. Bumped when the D-Bus method/signal schema changes in a
240// backwards-incompatible way (e.g. dragStopped out-params changed, new
241// required signal). Both sides check the peer's version at bridge registration
242// and reject if below their minimum. The version is a simple integer string
243// ("1", "2", …) to keep comparison trivial.
244//
245// v1: original protocol (Phosphor v3.0–v3.x)
246// v2: split dragStopped + snapAssistReady signal (Phase C);
247// WindowGeometryEntry gained `screenId` (a(siiiis)) so the compositor
248// can seed its tracked-screen cache from the daemon's authoritative
249// answer instead of re-deriving from geometry (which races with VS
250// reconfig).
251// v3: setSnapAssistThumbnail signature changed from (s, s data:URL) to
252// (s, i, i, ay raw ARGB32) returning b. Thumbnail capture moved
253// out of the daemon and into the kwin-effect (OffscreenQuickScene
254// + WindowThumbnail through KWin's live compositor texture);
255// daemon ScreenShot2 D-Bus dependency and the matching
256// X-KDE-DBUS-Restricted-Interfaces gate are dropped. Mismatched
257// peers fail the bridge handshake instead of producing
258// method-not-found at first thumbnail post.
259// v4: setWindowMetadata widened from 4 args (instanceId, appId,
260// desktopFile, title) to 10: adds windowRole, pid, virtualDesktop,
261// activity, windowType, plus a trailing a{sv} (QVariantMap) carrying the
262// extended window-property snapshot (state flags, geometry, accessory
263// flags, captionNormal — see WindowMetadataKey) so the daemon's
264// window-rule resolvers match the same KWin-property fields the effect
265// path resolves live. A stale effect sending an older form would fail
266// marshalling, so the bridge handshake rejects mismatched peers up front.
267//
268// v5: the v3.4 wire. Everything below landed in one unreleased cycle, so it
269// is a single step away from the v4 that last shipped. Do NOT split it
270// back into one bump per change: no released peer ever spoke an
271// intermediate version, and MinPeerApiVersion has always tracked
272// ApiVersion exactly, so those steps were unobservable outside the
273// branch. A new change AFTER v5 ships needs v6.
274//
275// Interfaces. The org.plasmazones.Autotile lifecycle surface moved
276// wholesale to the engine-neutral org.plasmazones.Tiling interface
277// (property managedScreens, signal managedScreensChanged), with
278// engine-specific verbs split onto org.plasmazones.Autotile /
279// org.plasmazones.Scrolling. The scrolling tab indicators moved from a
280// daemon-rendered layer surface into the KWin effect's own paint pass,
281// so org.plasmazones.Scrolling LOST scrollTabSurfaces and
282// scrollTabSurfaceChanged and org.plasmazones.Tiling GAINED the
283// transport that replaces them (scrollTabStrips / scrollTabStripsChanged,
284// scrollTabPaintOverrides / scrollTabPaintOverridesChanged,
285// scrollTabColors / scrollTabColorsChanged).
286//
287// windowsTileRequested. TileRequestEntry widened from a(siiiissbbs) to
288// a(siiiissbbbssiiibsb). The added fields, in wire order: scrollEdge
289// (which side of the strip a column departed towards, a closed set of
290// left / right / top / bottom because a strip's axis is per-screen);
291// windowedFullscreen, inserted after floating, which has the effect flip
292// KWin fullscreen state on the client while committing the column rect;
293// viewDelta, how far the strip's VIEW slid along that screen's own strip
294// axis, so the effect springs it once per output and moves the strip
295// rigidly instead of starting an independent per-window spring for each
296// column; visualX / visualY / hasVisualPos, because a parked column
297// commits below the union of all outputs but has to be SEEN travelling
298// while the view slides, so the safe commit and the paint position are
299// separate answers; tabFrom, naming the tab an arriving tab replaces in a
300// tabbed column so the effect can cross-fade the two rather than hard-cut
301// between two windows in one rect; and viewImmediate, marking a batch
302// whose view travel is user-driven continuous motion (the drag edge
303// auto-scroll heartbeat) so the effect applies the delta outright instead
304// of animating it, because a leg retargeted every 16 ms never progresses
305// on a stateless curve.
306//
307// Snap.resolveWindowRestore gained three in-args: isOpenPath, minWidth,
308// minHeight. The cross-screen tile reclaim hangs off this slot and two of
309// its drivers are NOT opens (the unminimize of a daemon-restart orphan
310// and the pending-restores sweep); without the flag the daemon could not
311// tell them apart, and unminimizing a window teleported it across
312// monitors. The min sizes exist because a reclaim ADOPTS the window into
313// a strip or layout and the adopting engine evaluates its oversized /
314// float verdict exactly once from them, so passing 0,0 left an oversized
315// window tiled for the session.
316//
317// Why the handshake and not signature matching. Most of the above widens
318// a signature, and Qt matches signal-hook signatures before demarshalling,
319// so a v4 effect's slot would simply never fire on the widened payload —
320// ALL tiling silently dead until logout. But parts of it widen NOTHING:
321// the interface moves above, and scrollEdge's closed set growing from
322// {left,right} to {left,right,top,bottom} while viewDelta stayed an int.
323// A peer mismatched on those demarshals PERFECTLY and then misbehaves,
324// dropping every vertical park at its own validationError and reading a
325// vertical view delta as a horizontal slide. The version handshake is the
326// ONLY thing that refuses such a pairing, which is why both sides must be
327// built and shipped from the same source.
328inline constexpr int ApiVersion = 5;
329inline constexpr int MinPeerApiVersion = 5;
330
331// Hard cap on blocking synchronous D-Bus calls from the editor/settings
332// apps to the daemon. Qt's default is 25 seconds, long enough to freeze
333// the UI for tens of seconds if the daemon event loop is busy. Daemon-side
334// settings/shader handlers are all in-memory hash lookups (sub-millisecond
335// in the healthy case), so 500 ms is generous while still degrading
336// gracefully to caller-side defaults when the daemon is unresponsive.
337inline constexpr int SyncCallTimeoutMs = 500;
338
339// Timeout for the kwin-effect's daemon-readiness probe (an Introspect call
340// fired against the org.plasmazones service to detect "daemon up but the
341// daemonReady signal was emitted before the effect connected"). 3 s gives
342// the daemon ample time to answer once its event loop is responsive while
343// still keeping the effect from hanging on a wedged daemon.
344inline constexpr int DaemonReadyProbeTimeoutMs = 3000;
345
346// Timeout for the kwin-effect's snap-assist thumbnail post (carries an
347// ARGB32 pixel payload). 2 s is "definitely something is wrong, drop the
348// watcher" rather than expected latency. Without it, the effect would
349// otherwise leak a watcher per snap-assist candidate per show until Qt's
350// default 25 s timeout expires, which under daemon stress turns a
351// transient hang into accumulated compositor-process state.
352inline constexpr int SnapAssistThumbnailPostTimeoutMs = 2000;
353
354// Shared cap for the snap-assist thumbnail LRU. The daemon sizes its
355// QCache<QString, QImage> against this; the kwin-effect mirrors it for the
356// "skip recently-posted handle" dedup window. Keeping the literal here
357// (rather than two unrelated `static constexpr int`s in the daemon and the
358// effect) means a future tuning bump moves both sides atomically — there
359// is no longer a window where the effect believes the daemon holds entries
360// the daemon has already evicted. 24 × 256² ARGB32 ≈ 6 MB on the daemon.
361inline constexpr int SnapAssistThumbnailCacheCapacity = 24;
362
363// Shared per-axis ceiling for snap-assist thumbnails. The daemon rejects
364// anything larger at both the D-Bus boundary (OverlayAdaptor) and the service
365// boundary (OverlayService, for direct C++ callers); the kwin-effect clamps
366// its capture box against the same value so it can never produce a payload
367// the daemon is guaranteed to refuse — an oversize refusal never marks the
368// handle as recently-posted, which would otherwise re-capture on every show.
369inline constexpr int SnapAssistThumbnailMaxDimension = 1024;
370
371// How big the snap-assist card actually draws a thumbnail, in logical
372// pixels, as a function of the zone it sits in and how many candidates
373// share it. This is the C++ twin of the sizing bindings in
374// src/ui/SnapAssistContent.qml (candidateFlow.iconSize: cardScaleBase,
375// iconSizeRatio, minIconSize) and MUST be kept in step with them. The
376// effect captures at this size times the output scale rather than at a
377// fixed 256, so a burst of candidates ships small buffers and a lone
378// candidate in a big zone on a HiDPI output is not upscaled. Drift between
379// the two only costs sharpness or bytes, never correctness, and the
380// headroom factor absorbs the rounding.
381inline constexpr double SnapAssistCardScaleBase = 0.35;
382inline constexpr double SnapAssistIconSizeRatio = 0.6;
383inline constexpr int SnapAssistMinIconLogicalPx = 16; // Kirigami.Units.iconSizes.small
384inline constexpr double SnapAssistThumbnailHeadroom = 1.25;
385
386inline int snapAssistThumbnailBoxPx(int zoneMinAxisLogicalPx, int candidateCount, double outputScale)
387{
388 const double cardScale = SnapAssistCardScaleBase / std::max(1.0, std::sqrt(double(std::max(1, candidateCount))));
389 const double iconLogical =
390 std::max(double(SnapAssistMinIconLogicalPx),
391 double(std::max(0, zoneMinAxisLogicalPx)) * cardScale * SnapAssistIconSizeRatio);
392 const double devicePx = iconLogical * std::max(1.0, outputScale) * SnapAssistThumbnailHeadroom;
393 return std::clamp(int(std::ceil(devicePx)), SnapAssistMinIconLogicalPx, SnapAssistThumbnailMaxDimension);
394}
395
396// The default-OFF rule for a boolean environment switch: set to any value
397// other than "0" enables, "0" or unset disables. Value-checked rather than
398// presence-checked so an explicit opt-out is honoured, and not parsed as an
399// integer so the presence-style spellings the switches have always been
400// documented with ("=1", "=true", "=yes") keep working. "=0" is the only
401// opt-out; anything else set is an opt-in.
402//
403// Switches in this header pick one of two rules: this one, or the default-ON
404// envSwitchEnabledByDefault below. The "=0" spelling disables under both, so
405// a kill switch reads the same to a user whichever twin backs it.
406inline bool envSwitchEnabled(const char* name)
407{
408 if (!qEnvironmentVariableIsSet(name)) {
409 return false;
410 }
411 return qgetenv(name).trimmed() != "0";
412}
413
414// The opt-out twin of envSwitchEnabled, for a switch that defaults to on:
415// unset enables, and "0" is the only spelling that disables. Any other value
416// is read as an explicit opt-in and left enabled, so the documented "=1" /
417// "=true" spellings keep meaning what they say.
418inline bool envSwitchEnabledByDefault(const char* name)
419{
420 if (!qEnvironmentVariableIsSet(name)) {
421 return true;
422 }
423 return qgetenv(name).trimmed() != "0";
424}
425
426// Single accessor for the zero-copy thumbnail gate. Read in FOUR places with
427// different lifetimes (the effect's capture ctor, the daemon's D-Bus slot,
428// the daemon's Vulkan device-extension wiring, and the effect's daemon-ready
429// re-arm); routing every read through one helper keeps the spelling and the
430// read discipline from drifting apart. The env var is process-constant, so
431// callers may cache the result freely.
432//
433// Default-on: the dma-buf path is the normal transport, and
434// PLASMAZONES_DMABUF_THUMBNAILS=0 is the kill switch for a driver or session
435// where it misbehaves. The raw-pixel path stays in place as the automatic
436// fallback for every case the gate cannot predict — a software or otherwise
437// unsupported RHI backend in the daemon, a cross-GPU import the driver
438// refuses, a missing EGL/Vulkan extension, or a format/modifier combination
439// the importer rejects. Both processes read the same variable, and the two
440// sides do NOT have to agree: the daemon refusing the import simply routes
441// the effect back to pixels.
443{
444 return envSwitchEnabledByDefault("PLASMAZONES_DMABUF_THUMBNAILS");
445}
446
447// Diagnostic switch for the snap-assist thumbnail pipeline. When set, both
448// the kwin-effect capture side and the daemon receive side log one line per
449// thumbnail with the fitted size, per-stage timings (render, readback,
450// convert, D-Bus round-trip, cache insert, QML fetch) and byte counts, under
451// the *.snapassist.trace logging categories. Read-only instrumentation: it
452// changes nothing about what is captured or how. Shared here for the same
453// reason as the dma-buf gate above, so both processes agree on the spelling,
454// and it follows the same "=0 disables" rule.
456{
457 return envSwitchEnabled("PLASMAZONES_THUMBNAIL_TRACE");
458}
459
460} // namespace PhosphorProtocol::Service
constexpr QLatin1String ObjectPath("/EditorApp")
constexpr QLatin1String ServiceName("org.plasmazones.Editor.App")
constexpr QLatin1String ObjectPath("/SettingsApp")
constexpr QLatin1String Interface("org.plasmazones.SettingsController")
constexpr QLatin1String ServiceName("org.plasmazones.Settings.App")
constexpr QLatin1String Shutdown("org.plasmazones.Error.Shutdown")
constexpr QLatin1String Busy("org.plasmazones.Error.Busy")
constexpr QLatin1String LayoutRegistry("org.plasmazones.LayoutRegistry")
constexpr QLatin1String Screen("org.plasmazones.Screen")
constexpr QLatin1String Overlay("org.plasmazones.Overlay")
constexpr QLatin1String Rules("org.plasmazones.Rules")
constexpr QLatin1String Scrolling("org.plasmazones.Scrolling")
constexpr QLatin1String Snap("org.plasmazones.Snap")
constexpr QLatin1String Shader("org.plasmazones.Shader")
constexpr QLatin1String Tiling("org.plasmazones.Tiling")
constexpr QLatin1String ZoneDetection("org.plasmazones.ZoneDetection")
constexpr QLatin1String WindowTracking("org.plasmazones.WindowTracking")
constexpr QLatin1String CompositorBridge("org.plasmazones.CompositorBridge")
constexpr QLatin1String Autotile("org.plasmazones.Autotile")
constexpr QLatin1String Control("org.plasmazones.Control")
constexpr QLatin1String Settings("org.plasmazones.Settings")
constexpr QLatin1String WindowDrag("org.plasmazones.WindowDrag")
constexpr QLatin1String FocusFollowsMouse("focusFollowsMouse")
constexpr QLatin1String CropStraddlers("cropStraddlers")
constexpr QLatin1String VerticalAxis("verticalAxis")
constexpr QLatin1String CornerRadius("cornerRadius")
constexpr QLatin1String FontStrikeout("fontStrikeout")
constexpr QLatin1String GapsBetweenTabs("gapsBetweenTabs")
constexpr QLatin1String FontUnderline("fontUnderline")
constexpr QLatin1String UrgentColor("urgentColor")
constexpr QLatin1String FontWeight("fontWeight")
constexpr QLatin1String InactiveColor("inactiveColor")
constexpr QLatin1String FontFamily("fontFamily")
constexpr QLatin1String FontItalic("fontItalic")
constexpr QLatin1String TabStyle("tabStyle")
constexpr QLatin1String ActiveColor("activeColor")
constexpr QLatin1String AnimationShaderSearchPaths("animationShaderSearchPaths")
constexpr QLatin1String DecorationProfileTree("decorationProfileTree")
constexpr QLatin1String ShaderProfileTree("shaderProfileTree")
constexpr QLatin1String MotionProfileTree("motionProfileTree")
constexpr QLatin1String ActiveTab("activeTab")
The tile's own 0-based tab within that count.
constexpr QLatin1String TabCount("tabCount")
How many tabs the tile's column shows, and absent or 0 when it draws no indicator — the single "no in...
constexpr QLatin1String TabPosition("tabPosition")
Which edge the indicator runs along, as a PhosphorScrollEngine:: TabIndicatorPosition underlying valu...
constexpr QLatin1String TabLength("tabLength")
How much of that edge the indicator covers, 0.0 to 1.0, centered on it.
constexpr QLatin1String IsResizable("isResizable")
constexpr QLatin1String IsMaximized("isMaximized")
constexpr QLatin1String CaptionNormal("captionNormal")
constexpr QLatin1String PositionY("positionY")
constexpr QLatin1String HasDecoration("hasDecoration")
constexpr QLatin1String KeepAbove("keepAbove")
constexpr QLatin1String IsMaximizable("isMaximizable")
constexpr QLatin1String IsTransient("isTransient")
constexpr QLatin1String IsModal("isModal")
constexpr QLatin1String IsFullscreen("isFullscreen")
constexpr QLatin1String IsSticky("isSticky")
constexpr QLatin1String IsNotification("isNotification")
constexpr QLatin1String VirtualDesktops("virtualDesktops")
Full 1-based desktop-number list for a window on SEVERAL (but not all) virtual desktops.
constexpr QLatin1String KeepBelow("keepBelow")
constexpr QLatin1String IsMinimized("isMinimized")
constexpr QLatin1String IsDemandingAttention("isDemandingAttention")
Urgency (KWin's demandsAttention).
constexpr QLatin1String PositionX("positionX")
constexpr QLatin1String SkipPager("skipPager")
constexpr QLatin1String SkipTaskbar("skipTaskbar")
constexpr QLatin1String SkipSwitcher("skipSwitcher")
constexpr QLatin1String IsMovable("isMovable")
constexpr QLatin1String IsFocused("isFocused")
Definition ServiceConstants.h:12
constexpr int MinPeerApiVersion
Definition ServiceConstants.h:329
constexpr int SyncCallTimeoutMs
Definition ServiceConstants.h:337
constexpr int SnapAssistThumbnailCacheCapacity
Definition ServiceConstants.h:361
constexpr double SnapAssistIconSizeRatio
Definition ServiceConstants.h:382
constexpr int QuickLayoutSlotCount
Quick-layout slots are numbered 1..QuickLayoutSlotCount.
Definition ServiceConstants.h:32
constexpr int ApiVersion
Definition ServiceConstants.h:328
constexpr int SnapAssistThumbnailMaxDimension
Definition ServiceConstants.h:369
constexpr double SnapAssistCardScaleBase
Definition ServiceConstants.h:381
constexpr int SnapAssistMinIconLogicalPx
Definition ServiceConstants.h:383
constexpr double SnapAssistThumbnailHeadroom
Definition ServiceConstants.h:384
constexpr QLatin1String Name("org.plasmazones")
D-Bus service constants shared by all compositor plugins.
int snapAssistThumbnailBoxPx(int zoneMinAxisLogicalPx, int candidateCount, double outputScale)
Definition ServiceConstants.h:386
constexpr QLatin1String ObjectPath("/PlasmaZones")
bool envSwitchEnabledByDefault(const char *name)
Definition ServiceConstants.h:418
bool snapAssistThumbnailTraceEnabled()
Definition ServiceConstants.h:455
bool snapAssistDmabufThumbnailsEnabled()
Definition ServiceConstants.h:442
bool envSwitchEnabled(const char *name)
Definition ServiceConstants.h:406
constexpr int SnapAssistThumbnailPostTimeoutMs
Definition ServiceConstants.h:352
constexpr int DaemonReadyProbeTimeoutMs
Definition ServiceConstants.h:344