Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
PhosphorCompositor::ICompositorBridge Class Referenceabstract

Abstract interface bridging compositor-agnostic logic to compositor-specific APIs. More...

#include <phosphor-compositor/include/PhosphorCompositor/ICompositorBridge.h>

Public Member Functions

 ICompositorBridge ()=default
 
virtual ~ICompositorBridge ()=default
 
 ICompositorBridge (const ICompositorBridge &)=delete
 
ICompositorBridgeoperator= (const ICompositorBridge &)=delete
 
 ICompositorBridge (ICompositorBridge &&)=delete
 
ICompositorBridgeoperator= (ICompositorBridge &&)=delete
 
virtual WindowHandle findWindowById (const QString &windowId) const =0
 Find a window by its full window ID ("appId|instanceId")
 
virtual QVector< WindowHandlefindAllWindowsById (const QString &windowId) const =0
 Find all windows matching a window ID (exact + appId fallback for disambiguation)
 
virtual QVector< WindowHandlestackingOrder () const =0
 Get all managed windows in stacking order (bottom to top)
 
virtual QString windowId (WindowHandle w) const =0
 Get the full window ID for a window ("appId|instanceId")
 
virtual QString windowScreenId (WindowHandle w) const =0
 Get the screen ID where a window is located.
 
virtual QRectF frameGeometry (WindowHandle w) const =0
 
virtual QSizeF minSize (WindowHandle w) const =0
 
virtual bool isMinimized (WindowHandle w) const =0
 
virtual bool isOnCurrentDesktop (WindowHandle w) const =0
 
virtual bool isOnCurrentActivity (WindowHandle w) const =0
 
virtual bool hasDecoration (WindowHandle w) const =0
 
virtual bool userCanSetNoBorder (WindowHandle w) const =0
 May this window's server-side decoration be toggled off? True for SSD windows even while they are CURRENTLY borderless (the toggle remains available); false for windows with no server-side title bar to hide — client-side-decorated apps (GTK/Electron), override- redirect surfaces, or decorations forced by a compositor rule.
 
virtual bool isNoBorder (WindowHandle w) const =0
 Is the server-side decoration currently suppressed? (KWin: Window::noBorder)
 
virtual QRectF moveResizeGeometry (WindowHandle w) const =0
 Geometry the compositor is currently moving the window toward.
 
virtual WindowInfo windowInfo (WindowHandle w) const =0
 Fill a WindowInfo snapshot (for bulk operations)
 
virtual bool shouldHandleWindow (WindowHandle w) const =0
 Should this window be managed by Phosphor at all?
 
virtual bool isTileableWindow (WindowHandle w) const =0
 Is this window eligible for autotile (stricter than shouldHandle)?
 
virtual void moveResize (WindowHandle w, const QRectF &geometry)=0
 Move/resize a window to the given geometry.
 
virtual void setNoBorder (WindowHandle w, bool noBorder)=0
 Set/remove server-side decoration (title bar)
 
virtual void setMaximized (WindowHandle w, bool maximized)=0
 Maximize or restore a window.
 
virtual void activateWindow (WindowHandle w)=0
 Give input focus to a window.
 
virtual void raiseWindow (WindowHandle w)=0
 Raise a window in the stacking order.
 
virtual void applyWindowGeometry (WindowHandle w, const QRectF &geometry, bool skipAnimation=false)=0
 Move a window to a target geometry, running the configured placement transition (snap / tile / move) unless skipAnimation is set.
 
virtual QObject * asQObject ()=0
 Get the QObject parent for D-Bus watcher ownership.
 
virtual bool isDaemonReady () const =0
 Check if the daemon D-Bus service is registered and ready.
 
virtual void invalidateScreenIdCache ()=0
 Invalidate cached screen IDs (call on screen add/remove/reconfigure)
 

Detailed Description

Abstract interface bridging compositor-agnostic logic to compositor-specific APIs.

This interface allows shared code (autotile state management, D-Bus signal dispatch, snap assist candidate building, etc.) to operate on windows without knowing whether the compositor is KWin, Wayfire, or something else.

Each compositor plugin implements this interface. The shared code calls these methods instead of directly accessing compositor-specific APIs.

Design principles:

  • Methods take WindowHandle (void*) — plugins static_cast to their native type
  • Bulk operations use WindowInfo snapshots to avoid virtual call overhead
  • The surface is the compositor-plugin SDK contract: some methods are consumed by shared code today (DecorationManager, SnapAssistFilter), the rest define what a non-KWin plugin must provide to host the shared handlers — they are forward-looking SDK API, not dead code
  • D-Bus helpers (fireAndForget, asyncCall) are free functions, not on this interface

Re-entrancy contract: const query methods (lookups, identity, properties, filtering) MUST NOT synchronously dispatch compositor events or call back into shared-code consumers. DecorationManager holds references into its window table across these queries; only the mutating actions (moveResize, setNoBorder, ...) are allowed to re-enter, and consumers order their state writes around those calls accordingly.

Constructor & Destructor Documentation

◆ ICompositorBridge() [1/3]

PhosphorCompositor::ICompositorBridge::ICompositorBridge ( )
default

◆ ~ICompositorBridge()

virtual PhosphorCompositor::ICompositorBridge::~ICompositorBridge ( )
virtualdefault

◆ ICompositorBridge() [2/3]

PhosphorCompositor::ICompositorBridge::ICompositorBridge ( const ICompositorBridge )
delete

◆ ICompositorBridge() [3/3]

PhosphorCompositor::ICompositorBridge::ICompositorBridge ( ICompositorBridge &&  )
delete

Member Function Documentation

◆ activateWindow()

virtual void PhosphorCompositor::ICompositorBridge::activateWindow ( WindowHandle  w)
pure virtual

Give input focus to a window.

◆ applyWindowGeometry()

virtual void PhosphorCompositor::ICompositorBridge::applyWindowGeometry ( WindowHandle  w,
const QRectF &  geometry,
bool  skipAnimation = false 
)
pure virtual

Move a window to a target geometry, running the configured placement transition (snap / tile / move) unless skipAnimation is set.

◆ asQObject()

virtual QObject * PhosphorCompositor::ICompositorBridge::asQObject ( )
pure virtual

Get the QObject parent for D-Bus watcher ownership.

◆ findAllWindowsById()

virtual QVector< WindowHandle > PhosphorCompositor::ICompositorBridge::findAllWindowsById ( const QString &  windowId) const
pure virtual

Find all windows matching a window ID (exact + appId fallback for disambiguation)

◆ findWindowById()

virtual WindowHandle PhosphorCompositor::ICompositorBridge::findWindowById ( const QString &  windowId) const
pure virtual

Find a window by its full window ID ("appId|instanceId")

◆ frameGeometry()

virtual QRectF PhosphorCompositor::ICompositorBridge::frameGeometry ( WindowHandle  w) const
pure virtual

◆ hasDecoration()

virtual bool PhosphorCompositor::ICompositorBridge::hasDecoration ( WindowHandle  w) const
pure virtual

◆ invalidateScreenIdCache()

virtual void PhosphorCompositor::ICompositorBridge::invalidateScreenIdCache ( )
pure virtual

Invalidate cached screen IDs (call on screen add/remove/reconfigure)

◆ isDaemonReady()

virtual bool PhosphorCompositor::ICompositorBridge::isDaemonReady ( ) const
pure virtual

Check if the daemon D-Bus service is registered and ready.

◆ isMinimized()

virtual bool PhosphorCompositor::ICompositorBridge::isMinimized ( WindowHandle  w) const
pure virtual

◆ isNoBorder()

virtual bool PhosphorCompositor::ICompositorBridge::isNoBorder ( WindowHandle  w) const
pure virtual

Is the server-side decoration currently suppressed? (KWin: Window::noBorder)

◆ isOnCurrentActivity()

virtual bool PhosphorCompositor::ICompositorBridge::isOnCurrentActivity ( WindowHandle  w) const
pure virtual

◆ isOnCurrentDesktop()

virtual bool PhosphorCompositor::ICompositorBridge::isOnCurrentDesktop ( WindowHandle  w) const
pure virtual

◆ isTileableWindow()

virtual bool PhosphorCompositor::ICompositorBridge::isTileableWindow ( WindowHandle  w) const
pure virtual

Is this window eligible for autotile (stricter than shouldHandle)?

◆ minSize()

virtual QSizeF PhosphorCompositor::ICompositorBridge::minSize ( WindowHandle  w) const
pure virtual

◆ moveResize()

virtual void PhosphorCompositor::ICompositorBridge::moveResize ( WindowHandle  w,
const QRectF &  geometry 
)
pure virtual

Move/resize a window to the given geometry.

◆ moveResizeGeometry()

virtual QRectF PhosphorCompositor::ICompositorBridge::moveResizeGeometry ( WindowHandle  w) const
pure virtual

Geometry the compositor is currently moving the window toward.

On Wayland this is set synchronously by moveResize(), unlike frameGeometry() which lags until the client acks the configure. (KWin: Window::moveResizeGeometry)

◆ operator=() [1/2]

ICompositorBridge & PhosphorCompositor::ICompositorBridge::operator= ( const ICompositorBridge )
delete

◆ operator=() [2/2]

ICompositorBridge & PhosphorCompositor::ICompositorBridge::operator= ( ICompositorBridge &&  )
delete

◆ raiseWindow()

virtual void PhosphorCompositor::ICompositorBridge::raiseWindow ( WindowHandle  w)
pure virtual

Raise a window in the stacking order.

◆ setMaximized()

virtual void PhosphorCompositor::ICompositorBridge::setMaximized ( WindowHandle  w,
bool  maximized 
)
pure virtual

Maximize or restore a window.

◆ setNoBorder()

virtual void PhosphorCompositor::ICompositorBridge::setNoBorder ( WindowHandle  w,
bool  noBorder 
)
pure virtual

Set/remove server-side decoration (title bar)

◆ shouldHandleWindow()

virtual bool PhosphorCompositor::ICompositorBridge::shouldHandleWindow ( WindowHandle  w) const
pure virtual

Should this window be managed by Phosphor at all?

◆ stackingOrder()

virtual QVector< WindowHandle > PhosphorCompositor::ICompositorBridge::stackingOrder ( ) const
pure virtual

Get all managed windows in stacking order (bottom to top)

◆ userCanSetNoBorder()

virtual bool PhosphorCompositor::ICompositorBridge::userCanSetNoBorder ( WindowHandle  w) const
pure virtual

May this window's server-side decoration be toggled off? True for SSD windows even while they are CURRENTLY borderless (the toggle remains available); false for windows with no server-side title bar to hide — client-side-decorated apps (GTK/Electron), override- redirect surfaces, or decorations forced by a compositor rule.

(KWin: Window::userCanSetNoBorder)

◆ windowId()

virtual QString PhosphorCompositor::ICompositorBridge::windowId ( WindowHandle  w) const
pure virtual

Get the full window ID for a window ("appId|instanceId")

◆ windowInfo()

virtual WindowInfo PhosphorCompositor::ICompositorBridge::windowInfo ( WindowHandle  w) const
pure virtual

Fill a WindowInfo snapshot (for bulk operations)

◆ windowScreenId()

virtual QString PhosphorCompositor::ICompositorBridge::windowScreenId ( WindowHandle  w) const
pure virtual

Get the screen ID where a window is located.


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