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)