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()