15#include "virtualdesktops.h" 
   21#include <KDecoration2/Decoration> 
   31    updateDecorationItem();
 
   59    updateStackingOrder();
 
   63    m_effectWindow = std::make_unique<EffectWindow>(
this);
 
 
   72    return m_surfaceItem.get();
 
 
   77    return m_decorationItem.get();
 
 
   82    return m_shadowItem.get();
 
 
   92    return m_effectWindow.get();
 
 
   98        m_forceVisibleByHiddenCount++;
 
  101        m_forceVisibleByDesktopCount++;
 
  104        m_forceVisibleByMinimizeCount++;
 
  107        m_forceVisibleByActivityCount++;
 
 
  115        Q_ASSERT(m_forceVisibleByHiddenCount > 0);
 
  116        m_forceVisibleByHiddenCount--;
 
  119        Q_ASSERT(m_forceVisibleByDesktopCount > 0);
 
  120        m_forceVisibleByDesktopCount--;
 
  123        Q_ASSERT(m_forceVisibleByMinimizeCount > 0);
 
  124        m_forceVisibleByMinimizeCount--;
 
  127        Q_ASSERT(m_forceVisibleByActivityCount > 0);
 
  128        m_forceVisibleByActivityCount--;
 
 
  139    static int elevation = 1000;
 
  141    m_elevation = elevation++;
 
  142    updateStackingOrder();
 
 
  148    updateStackingOrder();
 
 
  151bool WindowItem::computeVisibility()
 const 
  160        if (m_forceVisibleByDesktopCount == 0) {
 
  165        if (m_forceVisibleByActivityCount == 0) {
 
  170        if (m_forceVisibleByMinimizeCount == 0) {
 
  175        if (m_forceVisibleByHiddenCount == 0) {
 
  182void WindowItem::updateVisibility()
 
  184    const bool visible = computeVisibility();
 
  192void WindowItem::updatePosition()
 
  197void WindowItem::addSurfaceItemDamageConnects(Item *item)
 
  199    auto surfaceItem = 
static_cast<SurfaceItem *
>(item);
 
  204        addSurfaceItemDamageConnects(child);
 
  216        addSurfaceItemDamageConnects(m_surfaceItem.get());
 
  218        updateSurfacePosition();
 
  219        updateSurfaceVisibility();
 
 
  227void WindowItem::updateSurfacePosition()
 
  232    m_surfaceItem->setPosition(bufferGeometry.topLeft() - frameGeometry.topLeft());
 
  235void WindowItem::updateSurfaceVisibility()
 
  237    m_surfaceItem->setVisible(!m_window->
isShade());
 
  240void WindowItem::updateShadowItem()
 
  242    Shadow *shadow = m_window->
shadow();
 
  244        if (!m_shadowItem || m_shadowItem->shadow() != shadow) {
 
  245            m_shadowItem = std::make_unique<ShadowItem>(shadow, m_window, 
scene(), 
this);
 
  247        if (m_decorationItem) {
 
  248            m_shadowItem->stackBefore(m_decorationItem.get());
 
  249        } 
else if (m_surfaceItem) {
 
  250            m_shadowItem->stackBefore(m_surfaceItem.get());
 
  254        m_shadowItem.reset();
 
  258void WindowItem::updateDecorationItem()
 
  264        m_decorationItem = std::make_unique<DecorationItem>(m_window->
decoration(), m_window, 
scene(), 
this);
 
  266            m_decorationItem->stackAfter(m_shadowItem.get());
 
  267        } 
else if (m_surfaceItem) {
 
  268            m_decorationItem->stackBefore(m_surfaceItem.get());
 
  270        connect(m_window->
decoration(), &KDecoration2::Decoration::damaged, 
this, &WindowItem::markDamaged);
 
  273        m_decorationItem.reset();
 
  277void WindowItem::updateOpacity()
 
  282void WindowItem::updateStackingOrder()
 
  284    if (m_elevation.has_value()) {
 
  285        setZ(m_elevation.value());
 
  291void WindowItem::markDamaged()
 
  293    Q_EMIT m_window->
damaged(m_window);
 
  296void WindowItem::freeze()
 
  299        m_surfaceItem->freeze();
 
  312void WindowItemX11::initialize()
 
  314    switch (kwinApp()->operationMode()) {
 
  319        if (!
window()->surface()) {
 
  344#include "moc_windowitem.cpp" 
@ OperationModeXwayland
KWin uses Wayland and controls a nested Xwayland server.
@ OperationModeX11
KWin uses only X11 for managing windows and compositing.
@ OperationModeWaylandOnly
KWin uses only Wayland.
Representation of a window used by/for Effect classes.
void childAdded(Item *item)
void setVisible(bool visible)
QList< Item * > childItems() const
void setOpacity(qreal opacity)
void setPosition(const QPointF &point)
void stackingOrderChanged()
SurfaceInterface * surface() const
void lockScreenOverlayChanged()
void readyForPaintingChanged()
bool readyForPainting() const
bool isOnCurrentActivity() const
std::shared_ptr< KDecoration2::Decoration > decoration
bool isHiddenByShowDesktop() const
void opacityChanged(KWin::Window *window, qreal oldOpacity)
bool isOnCurrentDesktop() const
bool isLockScreenOverlay() const
void setSuspended(bool suspended)
virtual bool isLockScreen() const
void hiddenByShowDesktopChanged()
void bufferGeometryChanged(const QRectF &oldGeometry)
void frameGeometryChanged(const QRectF &oldGeometry)
virtual bool isInputMethod() const
void damaged(KWin::Window *window)
WindowItem(Window *window, Scene *scene, Item *parent=nullptr)
SurfaceItem * surfaceItem() const
void refVisible(int reason)
void unrefVisible(int reason)
void updateSurfaceItem(std::unique_ptr< SurfaceItem > &&surfaceItem)
EffectWindow * effectWindow() const
DecorationItem * decorationItem() const
@ PAINT_DISABLED_BY_DESKTOP
@ PAINT_DISABLED_BY_ACTIVITY
@ PAINT_DISABLED_BY_HIDDEN
@ PAINT_DISABLED_BY_MINIMIZE
ShadowItem * shadowItem() const
WindowItemInternal(InternalWindow *window, Scene *scene, Item *parent=nullptr)
WindowItemWayland(Window *window, Scene *scene, Item *parent=nullptr)
WindowItemX11(X11Window *window, Scene *scene, Item *parent=nullptr)
void currentDesktopChanged(KWin::VirtualDesktop *previousDesktop, KWin::Window *)
void currentActivityChanged()
WaylandServer * waylandServer()