16#include "virtualdesktops.h"
39 , m_window(windowItem->window())
40 , m_windowItem(windowItem)
45 : d(new Private(this, windowItem))
54 d->managed = d->m_window->isClient();
56 d->m_waylandWindow = qobject_cast<KWin::WaylandWindow *>(d->m_window) !=
nullptr;
57 d->m_x11Window = qobject_cast<KWin::X11Window *>(d->m_window) !=
nullptr;
60 Q_EMIT windowShown(this);
63 Q_EMIT windowHidden(this);
66 const MaximizeMode mode = d->m_window->maximizeMode();
67 Q_EMIT windowMaximizedStateChanged(this, mode & MaximizeHorizontal, mode & MaximizeVertical);
70 Q_EMIT windowMaximizedStateAboutToChange(this, m & MaximizeHorizontal, m & MaximizeVertical);
73 Q_EMIT windowFrameGeometryAboutToChange(this);
76 Q_EMIT windowStartUserMovedResized(this);
79 Q_EMIT windowStepUserMovedResized(this, geometry);
82 Q_EMIT windowFinishUserMovedResized(this);
85 Q_EMIT windowOpacityChanged(this, oldOpacity, window->opacity());
88 Q_EMIT minimizedChanged(this);
91 Q_EMIT windowModalityChanged(this);
94 Q_EMIT windowFrameGeometryChanged(this, oldGeometry);
97 Q_EMIT windowDamaged(this);
100 Q_EMIT windowUnresponsiveChanged(this, unresponsive);
103 Q_EMIT windowKeepAboveChanged(this);
106 Q_EMIT windowKeepBelowChanged(this);
109 Q_EMIT windowFullScreenChanged(this);
112 Q_EMIT windowExpandedGeometryChanged(this);
115 Q_EMIT windowDecorationChanged(this);
118 Q_EMIT windowDesktopsChanged(this);
133 return d->m_windowItem;
139 return _activities.isEmpty() || _activities.contains(activity);
168 const QList<VirtualDesktop *> ds =
desktops();
169 return ds.isEmpty() || ds.contains(desktop);
191 d->m_windowItem->refVisible(holder->
reason());
196 d->m_windowItem->unrefVisible(holder->
reason());
201 d->m_windowItem->scheduleRepaint(QRegion(r));
206 d->m_windowItem->scheduleRepaint(d->m_windowItem->boundingRect());
211 d->m_windowItem->scheduleRepaint(d->m_windowItem->mapFromGlobal(r));
217 return group->effectGroup();
229 d->m_window->unref();
234 return d->m_window->output();
237#define WINDOW_HELPER(rettype, prototype, toplevelPrototype) \
238 rettype EffectWindow::prototype() const \
240 return d->m_window->toplevelPrototype(); \
267WINDOW_HELPER(
bool, isCriticalNotification, isCriticalNotification)
284WINDOW_HELPER(
bool, isHiddenByShowDesktop, isHiddenByShowDesktop)
291WINDOW_HELPER(
bool, isMovableAcrossScreens, isMovableAcrossScreens)
308 if (
X11Window *x11Window = qobject_cast<X11Window *>(d->m_window)) {
309 return x11Window->window();
316 return d->m_window->resourceName() + QLatin1Char(
' ') + d->m_window->resourceClass();
321 return d->m_window->clientGeometry().translated(-d->m_window->bufferGeometry().topLeft());
326 return d->m_window->windowType();
331 if (
auto window = qobject_cast<X11Window *>(d->m_window)) {
332 return window->basicUnit();
339 return d->m_window->rect() - d->m_window->frameMargins();
344 return d->m_window->decoration();
349 auto x11Window = qobject_cast<X11Window *>(d->m_window);
353 if (!kwinApp()->x11Connection()) {
356 uint32_t len = 32768;
358 Xcb::Property prop(
false, x11Window->window(), atom, XCB_ATOM_ANY, 0, len);
363 if (prop->bytes_after > 0) {
373 auto x11Window = qobject_cast<X11Window *>(d->m_window);
377 if (!kwinApp()->x11Connection()) {
380 xcb_delete_property(kwinApp()->x11Connection(), x11Window->window(), atom);
387 return modal->effectWindow();
405 if (
auto window = qobject_cast<InternalWindow *>(d->m_window)) {
415 QList<EffectWindow *> ret;
416 ret.reserve(mainwindows.size());
417 std::transform(std::cbegin(mainwindows), std::cend(mainwindows),
418 std::back_inserter(ret),
420 return window->effectWindow();
432 if (!
data.isNull()) {
433 d->dataMap[role] =
data;
435 d->dataMap.remove(role);
442 return d->dataMap.value(role);
452 if (d->m_window->isClient()) {
453 d->m_window->setMinimized(
true);
459 if (d->m_window->isClient()) {
460 d->m_window->setMinimized(
false);
466 if (d->m_window->isClient()) {
467 d->m_window->closeWindow();
478 return d->m_waylandWindow;
483 return d->m_x11Window;
501 const auto memberList = m_group->
members();
502 QList<EffectWindow *> ret;
503 ret.reserve(memberList.size());
504 std::transform(std::cbegin(memberList), std::cend(memberList), std::back_inserter(ret), [](
auto window) {
505 return window->effectWindow();
512#include "moc_effectwindow.cpp"
EffectWindowGroup(Group *group)
QList< EffectWindow * > members() const
virtual ~EffectWindowGroup()
Representation of a window used by/for Effect classes.
void elevate(bool elevate)
Q_SCRIPTABLE void addRepaint(const QRect &r)
const EffectWindowGroup * group() const
Q_SCRIPTABLE void addLayerRepaint(const QRect &r)
Q_SCRIPTABLE KWin::EffectWindow * transientFor()
bool isWaylandClient() const
WindowItem * m_windowItem
bool isOnCurrentActivity() const
WindowItem * windowItem() const
bool isOnAllActivities() const
bool isOnAllDesktops() const
void unrefVisible(const EffectWindowVisibleRef *holder)
Q_SCRIPTABLE void addRepaintFull()
Q_SCRIPTABLE bool isOnDesktop(KWin::VirtualDesktop *desktop) const
bool isOnCurrentDesktop() const
Q_SCRIPTABLE void setData(int role, const QVariant &data)
Q_SCRIPTABLE QVariant data(int role) const
Q_SCRIPTABLE void closeWindow()
Q_SCRIPTABLE QList< KWin::EffectWindow * > mainWindows() const
QByteArray readProperty(long atom, long type, int format) const
void refVisible(const EffectWindowVisibleRef *holder)
void setMinimized(bool minimize)
QRectF decorationInnerRect
QList< KWin::VirtualDesktop * > desktops
qlonglong windowId() const
Private(EffectWindow *q, WindowItem *windowItem)
QHash< int, QVariant > dataMap
void deleteProperty(long atom) const
Q_SCRIPTABLE KWin::EffectWindow * findModal()
KDecoration2::Decoration * decoration() const
EffectWindow(WindowItem *windowItem)
Q_SCRIPTABLE bool isOnActivity(const QString &id) const
Q_SCRIPTABLE void setElevatedWindow(KWin::EffectWindow *w, bool set)
KWin::VirtualDesktop * currentDesktop
void windowDataChanged(KWin::EffectWindow *w, int role)
const QList< X11Window * > & members() const
void interactiveMoveResizeStarted()
void frameGeometryAboutToChange()
virtual QList< Window * > mainWindows() const
void interactiveMoveResizeStepped(const QRectF &geometry)
void windowShown(KWin::Window *window)
void opacityChanged(KWin::Window *window, qreal oldOpacity)
void interactiveMoveResizeFinished()
void keepAboveChanged(bool)
void maximizedAboutToChange(MaximizeMode mode)
void frameGeometryChanged(const QRectF &oldGeometry)
void keepBelowChanged(bool)
void windowHidden(KWin::Window *window)
void unresponsiveChanged(bool)
void damaged(KWin::Window *window)
void visibleGeometryChanged()
QByteArray toByteArray(uint8_t format=8, xcb_atom_t type=XCB_ATOM_STRING, bool *ok=nullptr)
Reads the property as string and returns a QByteArray.
#define WINDOW_HELPER(rettype, prototype, toplevelPrototype)
QList< EffectWindow * > getMainWindows(T *c)