14#include "config-kwin.h"
16#include "compositor.h"
24#include "effectsadaptor.h"
41#include "virtualdesktops.h"
47#if KWIN_BUILD_ACTIVITIES
53#if KWIN_BUILD_SCREENLOCKER
57#include <KDecoration2/Decoration>
58#include <KDecoration2/DecorationSettings>
60#include <QFontMetrics>
72static QByteArray readWindowProperty(xcb_window_t win, xcb_atom_t atom, xcb_atom_t
type,
int format)
74 if (win == XCB_WINDOW_NONE) {
79 Xcb::Property prop(
false, win, atom, XCB_ATOM_ANY, 0, len);
84 if (prop->bytes_after > 0) {
92static xcb_atom_t registerSupportProperty(
const QByteArray &propertyName)
94 auto c = kwinApp()->x11Connection();
99 UniqueCPtr<xcb_intern_atom_reply_t> atomReply(xcb_intern_atom_reply(c,
100 xcb_intern_atom_unchecked(c,
false, propertyName.size(), propertyName.constData()),
103 return XCB_ATOM_NONE;
106 unsigned char dummy = 0;
107 xcb_change_property(c, XCB_PROP_MODE_REPLACE, kwinApp()->x11RootWindow(), atomReply->atom, atomReply->atom, 8, 1, &dummy);
109 return atomReply->atom;
117 : keyboard_grab_effect(nullptr)
118 , fullscreen_effect(nullptr)
119 , compositing_type(compositor->backend()->compositingType())
120 , m_compositor(compositor)
123 , m_trackingCursorChanges(0)
130 qRegisterMetaType<QList<KWin::EffectWindow *>>();
131 qRegisterMetaType<KWin::SessionState>();
138 new EffectsAdaptor(
this);
139 QDBusConnection dbus = QDBusConnection::sessionBus();
140 dbus.registerObject(QStringLiteral(
"/Effects"),
this);
152 VirtualDesktop *newDesktop = VirtualDesktopManager::self()->currentDesktop();
182#if KWIN_BUILD_ACTIVITIES
198#if KWIN_BUILD_SCREENLOCKER
206 const auto atom = registerSupportProperty(*it);
207 if (atom == XCB_ATOM_NONE) {
214 if (kwinApp()->x11Connection()) {
222 if (kwinApp()->x11Connection()) {
234 if (
auto inputMethod = kwinApp()->inputMethod()) {
254 return kwinApp()->x11Connection();
283 Q_EMIT windowClosed(window->effectWindow());
391 if (it->second->isActive()) {
513 if (it->second->touchDown(
id, pos, time)) {
524 if (it->second->touchMotion(
id, pos, time)) {
535 if (it->second->touchUp(
id, time)) {
546 if (it->second->tabletToolEvent(event)) {
557 if (it->second->tabletToolButtonEvent(button, pressed, tabletToolId.
m_uniqueId)) {
568 if (it->second->tabletPadButtonEvent(button, pressed, tabletPadId.
data)) {
579 if (it->second->tabletPadStripEvent(number, position, isFinger, tabletPadId.
data)) {
590 if (it->second->tabletPadRingEvent(number, position, isFinger, tabletPadId.
data)) {
658 if (!it.value().contains(effect)) {
659 it.value().append(effect);
664 const auto atom = registerSupportProperty(propertyName);
665 if (atom == XCB_ATOM_NONE) {
681 if (!it.value().contains(effect)) {
685 it.value().removeAll(effect);
686 if (!it.value().isEmpty()) {
698 if (!kwinApp()->x11Connection()) {
706 auto window = effectWindow->
window();
707 if (window->isClient()) {
719 auto window = w->
window();
720 if (!window->isClient() || !window->isMovable()) {
733 auto window = w->
window();
734 if (!window->isClient() || window->isDesktop() || window->isDock()) {
742 auto window = w->
window();
743 if (window->isClient() && !window->isDesktop() && !window->isDock()) {
755#if KWIN_BUILD_ACTIVITIES
767 return VirtualDesktopManager::self()->currentDesktop();
772 return VirtualDesktopManager::self()->desktops();
777 VirtualDesktopManager::self()->setCurrent(desktop);
782 return VirtualDesktopManager::self()->grid().size();
807 return VirtualDesktopManager::self()->grid().at(coords);
812 return VirtualDesktopManager::self()->grid().gridCoords(desktop);
817 QPoint coords = VirtualDesktopManager::self()->grid().gridCoords(desktop);
818 if (coords.x() == -1) {
819 return QPoint(-1, -1);
822 return QPoint(coords.x() * displaySize.width(), coords.y() * displaySize.height());
847 return desktop->
name();
863 return w->effectWindow();
866 return w->effectWindow();
875 return w->effectWindow();
884 return window->effectWindow();
892 return window->effectWindow();
900 QList<EffectWindow *> ret;
923 auto window = w->
window();
924 if (window->isClient()) {
925 workspace()->tabbox()->setCurrentClient(window);
933 const auto clients =
workspace()->tabbox()->currentClientList();
934 QList<EffectWindow *> ret;
935 ret.reserve(clients.size());
936 std::transform(std::cbegin(clients), std::cend(clients),
937 std::back_inserter(ret),
939 return client->effectWindow();
943 return QList<EffectWindow *>();
971 if (
auto c =
workspace()->tabbox()->currentClient()) {
972 return c->effectWindow();
1046 effect->windowInputMouseEvent(e);
1057 effect->windowInputMouseEvent(e);
1071 QObject::connectNotify(signal);
1083 QObject::disconnectNotify(signal);
1144 QStringList listModules;
1147 std::back_inserter(listModules),
1171 return pair.first == name;
1174 qCDebug(KWIN_CORE) <<
"EffectsHandler::unloadEffect : Effect not loaded :" << name;
1178 qCDebug(KWIN_CORE) <<
"EffectsHandler::unloadEffect : Unloading Effect :" << name;
1201 for (
const QByteArray &property : properties) {
1219 if ((*it).first == name) {
1220 kwinApp()->config()->reparseConfiguration();
1232 return pair.first == name;
1252 QList<bool> retList;
1253 retList.reserve(names.count());
1254 std::transform(names.constBegin(), names.constEnd(),
1255 std::back_inserter(retList),
1256 [
this](
const QString &name) {
1257 return isEffectSupported(name);
1266 if ((*it).second == effect) {
1267 effectName = (*it).first;
1271 if (!effectName.isNull()) {
1296 for (QList<KWin::EffectPair>::const_iterator it =
loaded_effects.constBegin(),
1299 if (it->second->isActive()) {
1309 return p.first == pluginId;
1314 return it->second->isActive();
1320 return effect->blocksDirectScanout();
1338 return settings && settings->decorationButtonsLeft().contains(KDecoration2::DecorationButtonType::Close) ? Qt::TopLeftCorner : Qt::TopRightCorner;
1353 return pair.first == name;
1359 QString support((*it).first + QLatin1String(
":\n"));
1360 const QMetaObject *metaOptions = (*it).second->metaObject();
1361 for (
int i = 0; i < metaOptions->propertyCount(); ++i) {
1362 const QMetaProperty
property = metaOptions->property(i);
1363 if (qstrcmp(property.name(),
"objectName") == 0) {
1366 support += QString::fromUtf8(property.name()) + QLatin1String(
": ") + (*it).second->property(property.name()).toString() + QLatin1Char(
'\n');
1374#if KWIN_BUILD_SCREENLOCKER
1375 return kwinApp()->screenLockerWatcher()->isLocked();
1383 QString internalName = name.toLower();
1385 if ((*it).first == internalName) {
1386 return it->second->debug(parameter);
1404 static const QByteArray forceEnvVar = qgetenv(
"KWIN_EFFECTS_FORCE_ANIMATIONS");
1405 if (!forceEnvVar.isEmpty()) {
1406 static const int forceValue = forceEnvVar.toInt();
1407 return forceValue == 1;
1423 return kwinApp()->cursorImage();
1438 kwinApp()->startInteractiveWindowSelection([callback](
KWin::Window *window) {
1440 callback(window->effectWindow());
1449 kwinApp()->startInteractivePositionSelection(callback);
1459 OSD::HideFlags osdFlags;
1468 return kwinApp()->config();
1473 return kwinApp()->inputConfig();
1479 return pair.first == name;
1484 return (*it).second;
1508 mvp.translate(rect.x(), rect.y());
1517 if (alphaBlending) {
1519 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
1524 if (alphaBlending) {
1525 glDisable(GL_BLEND);
1532 if (buffer.isNull()) {
1536 painter->setOpacity(w->
opacity());
1537 painter->drawImage(w->
geometry(), buffer);
1560 for (
Output *screen : outputs) {
1561 if (screen->name() == name) {
1580 if (!kwinApp()->inputMethod() || !kwinApp()->inputMethod()->isEnabled()) {
1584 auto panel = kwinApp()->inputMethod()->panel();
1586 return panel->effectWindow();
1593 if (!kwinApp()->inputMethod() || !kwinApp()->inputMethod()->isEnabled()) {
1597 auto panel = kwinApp()->inputMethod()->panel();
1613#include "moc_effecthandler.cpp"
1614#include "moc_globals.cpp"
void effectLoaded(KWin::Effect *effect, const QString &name)
The loader emits this signal when it successfully loaded an effect.
void added(const QString &id)
void currentChanged(const QString &id)
void removed(const QString &id)
void x11ConnectionChanged()
WorkspaceScene * scene() const
void keepSupportProperty(xcb_atom_t atom)
void removeSupportProperty(xcb_atom_t atom)
void mouseChanged(const QPointF &pos, const QPointF &oldpos, Qt::MouseButtons buttons, Qt::MouseButtons oldbuttons, Qt::KeyboardModifiers modifiers, Qt::KeyboardModifiers oldmodifiers)
void startCursorTracking()
Enables tracking changes of cursor images.
void cursorChanged()
Signal emitted when the cursor image changes.
void stopCursorTracking()
Disables tracking changes of cursor images.
bool isCursorHidden() const
std::unique_ptr< KDecoration2::DecorationSettingsPrivate > settings(KDecoration2::DecorationSettings *parent) override
Class holding the Wayland server display loop.
Base class for all KWin effects.
void clear() override
Clears the load queue, that is all scheduled Effects are discarded from loading.
QStringList listOfKnownEffects() const override
All the Effects this loader knows of.
void setConfig(KSharedConfig::Ptr config) override
The KSharedConfig this EffectLoader should operate on.
bool isEffectSupported(const QString &name) const override
Whether the Effect with the given name is supported by the compositing backend.
void queryAndLoadAll() override
The Effect Loader should query its store for all available effects and try to load them.
bool loadEffect(const QString &name) override
Synchronous loading of the Effect with the given name.
Representation of a window used by/for Effect classes.
WindowItem * windowItem() const
Manager class that handles all the effects.
void showingDesktopChanged(bool)
std::unique_ptr< WindowPropertyNotifyX11Filter > m_x11WindowPropertyNotify
void screenAdded(KWin::Output *screen)
void setupWindowConnections(KWin::Window *window)
bool hasKeyboardGrab() const
Display * waylandDisplay() const
Q_SCRIPTABLE bool isEffectSupported(const QString &name)
void desktopGridSizeChanged(const QSize &size)
void drawWindow(const RenderTarget &renderTarget, const RenderViewport &viewport, EffectWindow *w, int mask, const QRegion ®ion, WindowPaintData &data)
EffectsIterator m_currentPaintWindowIterator
Q_SCRIPTABLE void unloadEffect(const QString &name)
void screenLockingChanged(bool locked)
void windowDeleted(KWin::EffectWindow *w)
void stopMouseInterception(Effect *effect)
CompositingType compositing_type
bool animationsSupported() const
Q_SCRIPTABLE KWin::VirtualDesktop * desktopAbove(KWin::VirtualDesktop *desktop=nullptr, bool wrap=true) const
Q_SCRIPTABLE KWin::EffectWindow * findWindow(WId id) const
QPoint desktopGridCoords(VirtualDesktop *desktop) const
void removeSupportProperty(const QByteArray &propertyName, Effect *effect)
Removes support for the feature with the given name. If there is no other Effect left which has annou...
void paintScreen(const RenderTarget &renderTarget, const RenderViewport &viewport, int mask, const QRegion ®ion, Output *screen)
Q_SCRIPTABLE void windowToDesktops(KWin::EffectWindow *w, const QList< KWin::VirtualDesktop * > &desktops)
void currentActivityChanged(const QString &id)
void screenRemoved(KWin::Output *screen)
void reloadEffect(Effect *effect)
Q_SCRIPTABLE KWin::VirtualDesktop * desktopBelow(KWin::VirtualDesktop *desktop=nullptr, bool wrap=true) const
void desktopChanging(KWin::VirtualDesktop *currentDesktop, QPointF offset, KWin::EffectWindow *with)
QList< Effect * > m_grabbedMouseEffects
EffectsIterator m_currentPaintScreenIterator
void destroyEffect(Effect *effect)
bool blocksDirectScanout() const
bool hasActiveFullScreenEffect
bool isMouseInterception() const
QQmlEngine * qmlEngine() const
void activateWindow(KWin::EffectWindow *c)
Effect * provides(Effect::Feature ef)
Q_SCRIPTABLE QString desktopName(KWin::VirtualDesktop *desktop) const
void windowActivated(KWin::EffectWindow *w)
Effect * fullscreen_effect
QList< EffectWindow * > stackingOrder
QStringList loadedEffects
void startInteractivePositionSelection(std::function< void(const QPointF &)> callback)
void highlightWindows(const QList< EffectWindow * > &windows)
EffectLoader * m_effectLoader
Q_SCRIPTABLE void addRepaint(const QRectF &r)
Compositor * m_compositor
void sessionStateChanged()
void grabbedKeyboardEvent(QKeyEvent *e)
bool isCursorHidden() const
PropertyEffectMap m_propertiesForEffects
Q_SCRIPTABLE bool loadEffect(const QString &name)
void showOnScreenMessage(const QString &message, const QString &iconName=QString())
QHash< long, int > registered_atoms
void tabBoxKeyEvent(QKeyEvent *event)
void unregisterTouchBorder(ElectricBorder border, QAction *action)
bool makeOpenGLContextCurrent()
Makes the OpenGL compositing context current.
CompositingType compositingType
void reconfigureEffects()
Q_SCRIPTABLE QString debug(const QString &name, const QString ¶meter=QString()) const
void registerPointerShortcut(Qt::KeyboardModifiers modifiers, Qt::MouseButton pointerButtons, QAction *action)
Registers a global pointer shortcut with the provided action.
Q_SCRIPTABLE void setElevatedWindow(KWin::EffectWindow *w, bool set)
bool tabletPadButtonEvent(uint button, bool pressed, const KWin::TabletPadId &tabletPadId, std::chrono::microseconds time)
QByteArray readRootProperty(long atom, long type, int format) const
virtual void defineCursor(Qt::CursorShape shape)
bool tabletToolEvent(KWin::TabletEvent *event)
void setActiveFullScreenEffect(Effect *e)
QPoint desktopCoords(VirtualDesktop *desktop) const
Q_SCRIPTABLE void moveWindow(KWin::EffectWindow *w, const QPoint &pos, bool snap=false, double snapAdjust=1.0)
void startMouseInterception(Effect *effect, Qt::CursorShape shape)
void desktopRemoved(KWin::VirtualDesktop *desktop)
virtual void doCheckInputWindowStacking()
void stackingOrderChanged()
virtual bool doGrabKeyboard()
Output * screenAt(const QPoint &point) const
bool isScreenLocked() const
void setTabBoxWindow(EffectWindow *)
KSharedConfigPtr inputConfig() const
Output * findScreen(const QString &name) const
void paintWindow(const RenderTarget &renderTarget, const RenderViewport &viewport, EffectWindow *w, int mask, const QRegion ®ion, WindowPaintData &data)
bool grabKeyboard(Effect *effect)
void connectNotify(const QMetaMethod &signal) override
Q_SCRIPTABLE void reconfigureEffect(const QString &name)
KWin::VirtualDesktop * currentDesktop
void doneOpenGLContextCurrent()
Makes a null OpenGL context current resulting in no context being current.
void setShowingDesktop(bool showing)
KWin::EffectWindow * activeWindow
xcb_atom_t announceSupportProperty(const QByteArray &propertyName, Effect *effect)
Announces support for the feature with the given name. If no other Effect has announced support for t...
void reserveElectricBorder(ElectricBorder border, Effect *effect)
void desktopAdded(KWin::VirtualDesktop *desktop)
void registerAxisShortcut(Qt::KeyboardModifiers modifiers, PointerAxisDirection axis, QAction *action)
Registers a global axis shortcut with the provided action.
QVariant kwinOption(KWinOption kwopt)
KWin::EffectWindow * inputPanel
bool checkInputWindowEvent(QMouseEvent *e)
virtual void doUngrabKeyboard()
int m_trackingCursorChanges
void virtualScreenGeometryChanged()
Q_SCRIPTABLE void toggleEffect(const QString &name)
QRect virtualScreenGeometry
QList< EffectWindow * > currentTabBoxWindowList() const
Q_SCRIPTABLE QString supportInformation(const QString &name) const
bool optionRollOverDesktops
bool touchMotion(qint32 id, const QPointF &pos, std::chrono::microseconds time)
QHash< QByteArray, qulonglong > m_managedProperties
Effect * findEffect(const QString &name) const
Q_SCRIPTABLE QList< bool > areEffectsSupported(const QStringList &names)
QList< EffectPair > loaded_effects
void prePaintScreen(ScreenPrePaintData &data, std::chrono::milliseconds presentTime)
bool hasDecorationShadows() const
virtual void doStartMouseInterception(Qt::CursorShape shape)
void registerTouchpadPinchShortcut(PinchDirection dir, uint fingerCount, QAction *onUp, std::function< void(qreal)> progressCallback={})
EffectsIterator m_currentDrawWindowIterator
void registerTouchpadSwipeShortcut(SwipeDirection dir, uint fingerCount, QAction *onUp, std::function< void(qreal)> progressCallback={})
Registers a global touchpad swipe gesture shortcut with the provided action.
void checkInputWindowStacking()
bool touchUp(qint32 id, std::chrono::microseconds time)
EffectsList m_activeEffects
void desktopGridWidthChanged(int width)
Q_SCRIPTABLE bool isEffectLoaded(const QString &name) const
Q_SCRIPTABLE void windowToScreen(KWin::EffectWindow *w, Output *screen)
void setCurrentDesktop(KWin::VirtualDesktop *desktop)
virtual void doStopMouseInterception()
QList< Output * > screens() const
EffectWindow * currentTabBoxWindow() const
void disconnectNotify(const QMetaMethod &signal) override
QStringList listOfEffects
bool isOpenGLCompositing() const
Whether the Compositor is OpenGL based (either GL 1 or 2).
void cursorShapeChanged()
Q_SCRIPTABLE KWin::VirtualDesktop * desktopToRight(KWin::VirtualDesktop *desktop=nullptr, bool wrap=true) const
void xcbConnectionChanged()
void registerTouchscreenSwipeShortcut(SwipeDirection direction, uint fingerCount, QAction *action, std::function< void(qreal)> progressCallback)
Registers a global touchscreen swipe gesture shortcut with the provided action.
void renderOffscreenQuickView(const RenderTarget &renderTarget, const RenderViewport &viewport, OffscreenQuickView *effectQuickView) const
KWin::SessionState sessionState
bool tabletPadRingEvent(int number, int position, bool isFinger, const KWin::TabletPadId &tabletPadId, std::chrono::microseconds time)
void prePaintWindow(EffectWindow *w, WindowPrePaintData &data, std::chrono::milliseconds presentTime)
EffectsHandler(Compositor *compositor, WorkspaceScene *scene)
void activityRemoved(const QString &id)
bool tabletToolButtonEvent(uint button, bool pressed, const KWin::TabletToolId &tabletToolId, std::chrono::microseconds time)
void startInteractiveWindowSelection(std::function< void(KWin::EffectWindow *)> callback)
QMultiMap< int, EffectPair > effect_order
void desktopChanged(KWin::VirtualDesktop *oldDesktop, KWin::VirtualDesktop *newDesktop, KWin::EffectWindow *with)
xcb_connection_t * xcbConnection() const
void screenEdgeApproaching(ElectricBorder border, qreal factor, const QRect &geometry)
void desktopGridHeightChanged(int height)
void mouseChanged(const QPointF &pos, const QPointF &oldpos, Qt::MouseButtons buttons, Qt::MouseButtons oldbuttons, Qt::KeyboardModifiers modifiers, Qt::KeyboardModifiers oldmodifiers)
void hideOnScreenMessage(OnScreenMessageHideFlags flags=OnScreenMessageHideFlags())
bool decorationsHaveAlpha
void unreserveElectricBorder(ElectricBorder border, Effect *effect)
PlatformCursorImage cursorImage() const
std::function< void(ElectricBorder border, const QPointF &, Output *screen)> TouchBorderCallback
void registerRealtimeTouchBorder(ElectricBorder border, QAction *action, TouchBorderCallback progressCallback)
Q_SCRIPTABLE KWin::VirtualDesktop * desktopToLeft(KWin::VirtualDesktop *desktop=nullptr, bool wrap=true) const
QRectF clientArea(clientAreaOption, const Output *screen, const VirtualDesktop *desktop) const
void registerPropertyType(long atom, bool reg)
bool isInputPanelOverlay() const
void desktopChangingCancelled()
xcb_window_t x11RootWindow() const
bool touchDown(qint32 id, const QPointF &pos, std::chrono::microseconds time)
Effect * keyboard_grab_effect
QList< KWin::VirtualDesktop * > desktops
void hasActiveFullScreenEffectChanged()
KSharedConfigPtr config() const
QStringList activeEffects
~EffectsHandler() override
KWin::Output * activeScreen
qreal animationTimeFactor
void windowAdded(KWin::EffectWindow *w)
void renderWindow(const RenderTarget &renderTarget, const RenderViewport &viewport, EffectWindow *w, int mask, const QRegion ®ion, WindowPaintData &data)
Q_SCRIPTABLE void addRepaintFull()
VirtualDesktop * desktopAtCoords(QPoint coords) const
Effect * activeFullScreenEffect() const
void registerTouchBorder(ElectricBorder border, QAction *action)
QPainter * scenePainter()
Provides access to the QPainter which is rendering to the back buffer.
bool isEffectActive(const QString &pluginId) const
void activeFullScreenEffectChanged()
void activityAdded(const QString &id)
bool tabletPadStripEvent(int number, int position, bool isFinger, const KWin::TabletPadId &tabletPadId, std::chrono::microseconds time)
void postPaintWindow(EffectWindow *w)
void tabBoxAdded(int mode)
void virtualScreenSizeChanged()
bool setColorspaceUniformsFromSRGB(const ColorDescription &dst)
@ ModelViewProjectionMatrix
bool setUniform(const char *name, float value)
void render(const QSizeF &size)
virtual QPainter * painter() const
The KwinQuickView class provides a convenient API for exporting QtQuick scenes as buffers that can be...
QImage bufferAsImage() const
GLTexture * bufferAsTexture()
bool hasAlphaChannel() const
double animationTimeFactor() const
void animationSpeedChanged()
bool isRollOverDesktops() const
const ColorDescription & colorDescription() const
QMatrix4x4 projectionMatrix() const
void addRepaint(const QRegion ®ion)
ItemRenderer * renderer() const
void unreserveTouch(ElectricBorder border, QAction *action)
void approaching(ElectricBorder border, qreal factor, const QRect &geometry)
void reserve(ElectricBorder border, QObject *object, const char *callback)
bool isDesktopSwitchingMovingClients() const
void unreserve(ElectricBorder border, QObject *object)
void reserveTouch(ElectricBorder border, QAction *action, TouchCallback::CallbackFunction callback=nullptr)
bool isDesktopSwitching() const
static Scripting * self()
QQmlEngine * qmlEngine() const
SessionState state() const
static ShaderManager * instance()
GLShader * pushShader(ShaderTraits traits)
Resource representing a wl_surface.
void tabBoxKeyEvent(QKeyEvent *)
Manages the number of available virtual desktops, the layout of those and which virtual desktop is th...
void layoutChanged(int columns, int rows)
void desktopAdded(KWin::VirtualDesktop *desktop)
void desktopRemoved(KWin::VirtualDesktop *desktop)
Display * display() const
void endInteractiveMoveResize()
EffectWindow * effectWindow()
void setDesktops(QList< VirtualDesktop * > desktops)
Window * activeWindow() const
QRectF clientArea(clientAreaOption, const Output *output, const VirtualDesktop *desktop) const
ScreenEdges * screenEdges() const
void outputAdded(KWin::Output *)
void activateWindow(Window *window, bool force=false)
void currentDesktopChangingCancelled()
const QList< Window * > & stackingOrder() const
void sendWindowToOutput(Window *window, Output *output)
void stackingOrderChanged()
Output * activeOutput() const
void showingDesktopChanged(bool showing, bool animated)
Window * moveResizeWindow()
void currentDesktopChanged(KWin::VirtualDesktop *previousDesktop, KWin::Window *)
void currentDesktopChanging(KWin::VirtualDesktop *currentDesktop, QPointF delta, KWin::Window *)
void windowActivated(KWin::Window *)
Decoration::DecorationBridge * decorationBridge() const
static Workspace * self()
void windowAdded(KWin::Window *)
QList< Output * > outputs() const
const QList< Window * > windows() const
void setShowingDesktop(bool showing, bool animated=true)
Output * outputAt(const QPointF &pos) const
void outputRemoved(KWin::Output *)
SessionManager * sessionManager() const
void deletedRemoved(KWin::Window *)
virtual bool makeOpenGLContextCurrent()
void finalPaintScreen(const RenderTarget &renderTarget, const RenderViewport &viewport, int mask, const QRegion ®ion, Output *screen)
void finalDrawWindow(const RenderTarget &renderTarget, const RenderViewport &viewport, EffectWindow *w, int mask, const QRegion ®ion, WindowPaintData &data)
virtual void doneOpenGLContextCurrent()
void finalPaintWindow(const RenderTarget &renderTarget, const RenderViewport &viewport, EffectWindow *w, int mask, const QRegion ®ion, WindowPaintData &data)
virtual bool animationsSupported() const =0
virtual int requestedEffectChainPosition() const
virtual bool perform(Feature feature, const QVariantList &arguments)
virtual void grabbedKeyboardEvent(QKeyEvent *e)
void show(const QString &message, const QString &iconName, int timeout)
void hide(HideFlags flags)
PointerAxisDirection
The direction in which a pointer axis is moved.
@ SwitchDesktopOnScreenEdgeMovingWindows
@ SwitchDesktopOnScreenEdge
WaylandServer * waylandServer()
SwipeDirection
Directions for swipe gestures.
InputRedirection * input()
QPair< QString, Effect * > EffectPair
KWIN_EXPORT QRectF scaledRect(const QRectF &rect, qreal scale)