[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kwin] /: Remove the unredirect fullscreen windows functionality
From:       Martin_Gräßlin <mgraesslin () kde ! org>
Date:       2016-08-04 12:51:25
Message-ID: E1bVI7R-00019p-85 () code ! kde ! org
[Download RAW message or body]

Git commit 996ee34e14ece93421fee7bf7447ecfa785871d1 by Martin Gräßlin.
Committed on 04/08/2016 at 12:48.
Pushed by graesslin into branch 'master'.

Remove the unredirect fullscreen windows functionality

Summary:
Rational: unredirect fullscreen windows is a weird beast. It's intended
to make fullscreen windows "faster" by not compositing that screen. But
that doesn't really work as KWin jumps out of that condition pretty
quickly. E.g. whenever a tooltip window is shown. KWin itself has a
better functionality by supporting to block compositing completely.
The complete code was full of hacks around it to try to ensure that
things don't break.

Overall unredirect fullscreen has always been the odd one. We had it
because a compositor needs to have it, but it never got truly integrated.
E.g. effects don't interact with it properly so that some things randomly
work, others don't. Will it trigger the screenedge, probably yes, but
will it show the highlight: properly no.

By removing the functionality we finally acknowledge that this mode is
not maintained and has not been maintained for years and that we do not
intend to support it better in future. Over the years we tried to make
it more and more hidden: it's disabled for Intel GPUs, because it used
to crash KWin. It's marked as an "expert" option, etc.

It's clearly something we tried to hide from the user that it exists.

For Wayland the whole unredirect infrastructure doesn't make sense
either. There is no such thing as "unredirecting". We might make use
of passing buffers directly to the underlying stack, but that will be
done automatically when we know it can be done, not by some magic is
this a window of specific size.

Test Plan:
Compiles, cannot really test as I am an Intel user who never
had that working.

Reviewers: #kwin, #plasma, #vdg

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D2180

M  +0    -2    abstract_egl_backend.cpp
M  +0    -9    client.cpp
M  +0    -1    client.h
M  +0    -151  composite.cpp
M  +0    -5    composite.h
M  +0    -1    deleted.h
M  +0    -1    effects.cpp
M  +0    -7    geometry.cpp
M  +0    -19   kcmkwin/kwincompositing/compositing.cpp
M  +0    -5    kcmkwin/kwincompositing/compositing.h
M  +2    -32   kcmkwin/kwincompositing/compositing.ui
M  +0    -15   kcmkwin/kwincompositing/main.cpp
M  +0    -3    kwin.kcfg
M  +0    -3    layers.cpp
M  +0    -22   options.cpp
M  +0    -8    options.h
M  +0    -2    plugins/platforms/x11/standalone/glxbackend.cpp
M  +0    -6    scene.cpp
M  +0    -7    scene.h
M  +0    -6    shell_client.cpp
M  +0    -1    shell_client.h
M  +0    -2    toplevel.cpp
M  +0    -11   toplevel.h
M  +0    -1    unmanaged.h
M  +0    -4    workspace.cpp

http://commits.kde.org/kwin/996ee34e14ece93421fee7bf7447ecfa785871d1

diff --git a/abstract_egl_backend.cpp b/abstract_egl_backend.cpp
index 7b4f756..e019d5c 100644
--- a/abstract_egl_backend.cpp
+++ b/abstract_egl_backend.cpp
@@ -112,8 +112,6 @@ void AbstractEglBackend::initKWinGL()
     initEGL();
     GLPlatform *glPlatform = GLPlatform::instance();
     glPlatform->detect(EglPlatformInterface);
-    if (GLPlatform::instance()->driver() == Driver_Intel)
-        options->setUnredirectFullscreen(false); // bug #252817
     options->setGlPreferBufferSwap(options->glPreferBufferSwap()); // resolve \
autosetting  if (options->glPreferBufferSwap() == Options::AutoSwapStrategy)
         options->setGlPreferBufferSwap('e'); // for unknown drivers - should not \
                happen
diff --git a/client.cpp b/client.cpp
index aaa99be..c0f91e7 100644
--- a/client.cpp
+++ b/client.cpp
@@ -944,9 +944,6 @@ void Client::internalShow()
         m_decoInputExtent.map();
         updateHiddenPreview();
     }
-    if (Compositor::isCreated()) {
-        Compositor::self()->checkUnredirect();
-    }
     emit windowShown(this);
 }
 
@@ -963,9 +960,6 @@ void Client::internalHide()
     addWorkspaceRepaint(visibleRect());
     workspace()->clientHidden(this);
     emit windowHidden(this);
-    if (Compositor::isCreated()) {
-        Compositor::self()->checkUnredirect();
-    }
 }
 
 void Client::internalKeep()
@@ -983,9 +977,6 @@ void Client::internalKeep()
     updateHiddenPreview();
     addWorkspaceRepaint(visibleRect());
     workspace()->clientHidden(this);
-    if (Compositor::isCreated()) {
-        Compositor::self()->checkUnredirect();
-    }
 }
 
 /**
diff --git a/client.h b/client.h
index 994cc47..331899d 100644
--- a/client.h
+++ b/client.h
@@ -391,7 +391,6 @@ private:
 
 protected:
     virtual void debug(QDebug& stream) const;
-    virtual bool shouldUnredirect() const;
     void addDamage(const QRegion &damage) override;
     bool belongsToSameApplication(const AbstractClient *other, bool active_hack) \
const override;  void doSetActive() override;
diff --git a/composite.cpp b/composite.cpp
index 62775f6..3a40b00 100644
--- a/composite.cpp
+++ b/composite.cpp
@@ -89,7 +89,6 @@ Compositor::Compositor(QObject* workspace)
     , vBlankInterval(0)
     , fpsInterval(0)
     , m_xrrRefreshRate(0)
-    , forceUnredirectCheck(false)
     , m_finishing(false)
     , m_timeSinceLastVBlank(0)
     , m_scene(NULL)
@@ -97,11 +96,8 @@ Compositor::Compositor(QObject* workspace)
     , m_composeAtSwapCompletion(false)
 {
     qRegisterMetaType<Compositor::SuspendReason>("Compositor::SuspendReason");
-    connect(&unredirectTimer, SIGNAL(timeout()), SLOT(delayedCheckUnredirect()));
     connect(&compositeResetTimer, SIGNAL(timeout()), SLOT(restart()));
     connect(options, &Options::configChanged, this, &Compositor::slotConfigChanged);
-    connect(options, SIGNAL(unredirectFullscreenChanged()), \
                SLOT(delayedCheckUnredirect()));
-    unredirectTimer.setSingleShot(true);
     compositeResetTimer.setSingleShot(true);
     nextPaintReference.invalidate(); // Initialize the timer
 
@@ -852,54 +848,6 @@ bool Compositor::isActive()
     return !m_finishing && hasScene();
 }
 
-void Compositor::checkUnredirect()
-{
-    checkUnredirect(false);
-}
-
-// force is needed when the list of windows changes (e.g. a window goes away)
-void Compositor::checkUnredirect(bool force)
-{
-    if (!hasScene() || !m_scene->overlayWindow() || \
                m_scene->overlayWindow()->window() == None || \
                !options->isUnredirectFullscreen())
-        return;
-    if (force)
-        forceUnredirectCheck = true;
-    if (!unredirectTimer.isActive())
-        unredirectTimer.start(0);
-}
-
-void Compositor::delayedCheckUnredirect()
-{
-    if (!hasScene() || !m_scene->overlayWindow() || \
m_scene->overlayWindow()->window() == None || !(options->isUnredirectFullscreen() || \
                sender() == options))
-        return;
-    ToplevelList list;
-    bool changed = forceUnredirectCheck;
-    foreach (Client * c, Workspace::self()->clientList())
-        list.append(c);
-    foreach (Unmanaged * c, Workspace::self()->unmanagedList())
-        list.append(c);
-    foreach (Toplevel * c, list) {
-        if (c->updateUnredirectedState()) {
-            changed = true;
-            break;
-        }
-    }
-    // no desktops, no Deleted ones
-    if (!changed)
-        return;
-    forceUnredirectCheck = false;
-    // Cut out parts from the overlay window where unredirected windows are,
-    // so that they are actually visible.
-    const QSize &s = screens()->size();
-    QRegion reg(0, 0, s.width(), s.height());
-    foreach (Toplevel * c, list) {
-        if (c->unredirected())
-            reg -= c->geometry();
-    }
-    m_scene->overlayWindow()->setShape(reg);
-    addRepaint(reg);
-}
-
 bool Compositor::checkForOverlayWindow(WId w) const
 {
     if (!hasScene()) {
@@ -971,9 +919,7 @@ bool Toplevel::setupCompositing()
 
     damage_region = QRegion(0, 0, width(), height());
     effect_window = new EffectWindowImpl(this);
-    unredirect = false;
 
-    Compositor::self()->checkUnredirect(true);
     Compositor::self()->scene()->windowAdded(this);
 
     // With unmanaged windows there is a race condition between the client painting \
the window @@ -990,7 +936,6 @@ void Toplevel::finishCompositing(ReleaseReason \
releaseReason)  {
     if (kwinApp()->operationMode() == Application::OperationModeX11 && damage_handle \
== XCB_NONE)  return;
-    Compositor::self()->checkUnredirect(true);
     if (effect_window->window() == this) { // otherwise it's already passed to \
Deleted, don't free data  discardWindowPixmap();
         delete effect_window;
@@ -1200,41 +1145,6 @@ void Toplevel::addWorkspaceRepaint(const QRect& r2)
     Compositor::self()->addRepaint(r2);
 }
 
-bool Toplevel::updateUnredirectedState()
-{
-    assert(compositing());
-    bool should = options->isUnredirectFullscreen() && shouldUnredirect() && \
                !unredirectSuspend &&
-                  !shape() && !hasAlpha() && opacity() == 1.0 &&
-                  !static_cast<EffectsHandlerImpl*>(effects)->activeFullScreenEffect();
                
-    if (should == unredirect)
-        return false;
-    static QElapsedTimer lastUnredirect;
-    static const qint64 msecRedirectInterval = 100;
-    if (!lastUnredirect.hasExpired(msecRedirectInterval)) {
-        QTimer::singleShot(msecRedirectInterval, Compositor::self(), \
                SLOT(checkUnredirect()));
-        return false;
-    }
-    lastUnredirect.start();
-    unredirect = should;
-    if (unredirect) {
-        qCDebug(KWIN_CORE) << "Unredirecting:" << this;
-        xcb_composite_unredirect_window(connection(), frameId(), \
                XCB_COMPOSITE_REDIRECT_MANUAL);
-    } else {
-        qCDebug(KWIN_CORE) << "Redirecting:" << this;
-        xcb_composite_redirect_window(connection(), frameId(), \
                XCB_COMPOSITE_REDIRECT_MANUAL);
-        discardWindowPixmap();
-    }
-    return true;
-}
-
-void Toplevel::suspendUnredirect(bool suspend)
-{
-    if (unredirectSuspend == suspend)
-        return;
-    unredirectSuspend = suspend;
-    Compositor::self()->checkUnredirect();
-}
-
 //****************************************
 // Client
 //****************************************
@@ -1264,65 +1174,4 @@ void Client::finishCompositing(ReleaseReason releaseReason)
     resetHaveResizeEffect();
 }
 
-bool Client::shouldUnredirect() const
-{
-    if (isActiveFullScreen()) {
-        ToplevelList stacking = workspace()->xStackingOrder();
-        for (int pos = stacking.count() - 1;
-                pos >= 0;
-                --pos) {
-            Toplevel* c = stacking.at(pos);
-            if (c == this)   // is not covered by any other window, ok to unredirect
-                return true;
-            if (c->geometry().intersects(geometry()))
-                return false;
-        }
-        abort();
-    }
-    return false;
-}
-
-
-//****************************************
-// Unmanaged
-//****************************************
-
-bool Unmanaged::shouldUnredirect() const
-{
-    // the pixmap is needed for the login effect, a nicer solution would be the \
                login effect increasing
-    // refcount for the window pixmap (which would prevent unredirect), avoiding \
                this hack
-    if (resourceClass() == "ksplashx"
-            || resourceClass() == "ksplashsimple"
-            || resourceClass() == "ksplashqml"
-            )
-        return false;
-// it must cover whole display or one xinerama screen, and be the topmost there
-    const int desktop = VirtualDesktopManager::self()->current();
-    if (geometry() == workspace()->clientArea(FullArea, geometry().center(), \
                desktop)
-            || geometry() == workspace()->clientArea(ScreenArea, \
                geometry().center(), desktop)) {
-        ToplevelList stacking = workspace()->xStackingOrder();
-        for (int pos = stacking.count() - 1;
-                pos >= 0;
-                --pos) {
-            Toplevel* c = stacking.at(pos);
-            if (c == this)   // is not covered by any other window, ok to unredirect
-                return true;
-            if (c->geometry().intersects(geometry()))
-                return false;
-        }
-        abort();
-    }
-    return false;
-}
-
-//****************************************
-// Deleted
-//****************************************
-
-bool Deleted::shouldUnredirect() const
-{
-    return false;
-}
-
-
 } // namespace
diff --git a/composite.h b/composite.h
index 50134cb..a1690e2 100644
--- a/composite.h
+++ b/composite.h
@@ -166,8 +166,6 @@ public Q_SLOTS:
      * Schedules a new repaint if no repaint is currently scheduled.
      **/
     void scheduleRepaint();
-    void checkUnredirect();
-    void checkUnredirect(bool force);
     void updateCompositeBlocking();
     void updateCompositeBlocking(KWin::Client* c);
 
@@ -205,7 +203,6 @@ private Q_SLOTS:
     void restart();
     void fallbackToXRenderCompositing();
     void performCompositing();
-    void delayedCheckUnredirect();
     void slotConfigChanged();
     void releaseCompositorSelection();
     void deleteUnusedSupportProperties();
@@ -234,8 +231,6 @@ private:
     QElapsedTimer nextPaintReference;
     QRegion repaints_region;
 
-    QTimer unredirectTimer;
-    bool forceUnredirectCheck;
     QTimer compositeResetTimer; // for compressing composite resets
     bool m_finishing; // finish() sets this variable while shutting down
     bool m_starting; // start() sets this variable while starting
diff --git a/deleted.h b/deleted.h
index 70af56f..0aa88e7 100644
--- a/deleted.h
+++ b/deleted.h
@@ -94,7 +94,6 @@ public:
     }
 protected:
     virtual void debug(QDebug& stream) const;
-    virtual bool shouldUnredirect() const;
 private Q_SLOTS:
     void mainClientClosed(KWin::Toplevel *client);
 private:
diff --git a/effects.cpp b/effects.cpp
index 951b945..2fe0efd 100644
--- a/effects.cpp
+++ b/effects.cpp
@@ -681,7 +681,6 @@ void EffectsHandlerImpl::slotPaddingChanged(Toplevel* t, const \
QRect& old)  void EffectsHandlerImpl::setActiveFullScreenEffect(Effect* e)
 {
     fullscreen_effect = e;
-    m_compositor->checkUnredirect();
 }
 
 Effect* EffectsHandlerImpl::activeFullScreenEffect() const
diff --git a/geometry.cpp b/geometry.cpp
index 30d6bcc..73507b2 100644
--- a/geometry.cpp
+++ b/geometry.cpp
@@ -84,9 +84,6 @@ void Workspace::desktopResized()
     if (effects) {
         static_cast<EffectsHandlerImpl*>(effects)->desktopResized(geom.size());
     }
-
-    //Update the shape of the overlay window to fix redrawing of unredirected \
                windows. bug#305781
-    m_compositor->checkUnredirect(true);
 }
 
 void Workspace::saveOldScreenSizes()
@@ -2108,10 +2105,6 @@ void AbstractClient::move(int x, int y, ForceGeometry_t force)
     updateWindowRules(Rules::Position);
     screens()->setCurrent(this);
     workspace()->updateStackingOrder();
-    if (Compositor::isCreated()) {
-        // TODO: move out of geometry.cpp, is this really needed here?
-        Compositor::self()->checkUnredirect();
-    }
     // client itself is not damaged
     addRepaintDuringGeometryUpdates();
     updateGeometryBeforeUpdateBlocking();
diff --git a/kcmkwin/kwincompositing/compositing.cpp \
b/kcmkwin/kwincompositing/compositing.cpp index 1e02f77..76ce659 100644
--- a/kcmkwin/kwincompositing/compositing.cpp
+++ b/kcmkwin/kwincompositing/compositing.cpp
@@ -41,7 +41,6 @@ Compositing::Compositing(QObject *parent)
     , m_windowThumbnail(0)
     , m_glScaleFilter(0)
     , m_xrScaleFilter(false)
-    , m_unredirectFullscreen(false)
     , m_glSwapStrategy(0)
     , m_glColorCorrection(false)
     , m_compositingType(0)
@@ -55,7 +54,6 @@ Compositing::Compositing(QObject *parent)
     connect(this, &Compositing::windowThumbnailChanged,      this, \
                &Compositing::changed);
     connect(this, &Compositing::glScaleFilterChanged,        this, \
                &Compositing::changed);
     connect(this, &Compositing::xrScaleFilterChanged,        this, \
                &Compositing::changed);
-    connect(this, &Compositing::unredirectFullscreenChanged, this, \
                &Compositing::changed);
     connect(this, &Compositing::glSwapStrategyChanged,       this, \
                &Compositing::changed);
     connect(this, &Compositing::glColorCorrectionChanged,    this, \
                &Compositing::changed);
     connect(this, &Compositing::compositingTypeChanged,      this, \
&Compositing::changed); @@ -74,7 +72,6 @@ void Compositing::reset()
     setWindowThumbnail(kwinConfig.readEntry("HiddenPreviews", 5) - 4);
     setGlScaleFilter(kwinConfig.readEntry("GLTextureFilter", 2));
     setXrScaleFilter(kwinConfig.readEntry("XRenderSmoothScale", false));
-    setUnredirectFullscreen(kwinConfig.readEntry("UnredirectFullscreen", false));
     setCompositingEnabled(kwinConfig.readEntry("Enabled", true));
 
     auto swapStrategy = [&kwinConfig]() {
@@ -124,7 +121,6 @@ void Compositing::defaults()
     setWindowThumbnail(1);
     setGlScaleFilter(2);
     setXrScaleFilter(false);
-    setUnredirectFullscreen(false);
     setGlSwapStrategy(1);
     setGlColorCorrection(false);
     setCompositingType(CompositingType::OPENGL20_INDEX);
@@ -188,11 +184,6 @@ bool Compositing::xrScaleFilter() const
     return m_xrScaleFilter;
 }
 
-bool Compositing::unredirectFullscreen() const
-{
-    return m_unredirectFullscreen;
-}
-
 int Compositing::glSwapStrategy() const
 {
     return m_glSwapStrategy;
@@ -249,15 +240,6 @@ void Compositing::setGlSwapStrategy(int strategy)
     emit glSwapStrategyChanged(strategy);
 }
 
-void Compositing::setUnredirectFullscreen(bool unredirect)
-{
-    if (unredirect == m_unredirectFullscreen) {
-        return;
-    }
-    m_unredirectFullscreen = unredirect;
-    emit unredirectFullscreenChanged(unredirect);
-}
-
 void Compositing::setWindowThumbnail(int index)
 {
     if (index == m_windowThumbnail) {
@@ -302,7 +284,6 @@ void Compositing::save()
     kwinConfig.writeEntry("HiddenPreviews", windowThumbnail() + 4);
     kwinConfig.writeEntry("GLTextureFilter", glScaleFilter());
     kwinConfig.writeEntry("XRenderSmoothScale", xrScaleFilter());
-    kwinConfig.writeEntry("UnredirectFullscreen", unredirectFullscreen());
     kwinConfig.writeEntry("Enabled", compositingEnabled());
     auto swapStrategy = [this] {
         switch (glSwapStrategy()) {
diff --git a/kcmkwin/kwincompositing/compositing.h \
b/kcmkwin/kwincompositing/compositing.h index e9561ab..00dcb15 100644
--- a/kcmkwin/kwincompositing/compositing.h
+++ b/kcmkwin/kwincompositing/compositing.h
@@ -38,7 +38,6 @@ class Compositing : public QObject
     Q_PROPERTY(int windowThumbnail READ windowThumbnail WRITE setWindowThumbnail \
                NOTIFY windowThumbnailChanged)
     Q_PROPERTY(int glScaleFilter READ glScaleFilter WRITE setGlScaleFilter NOTIFY \
                glScaleFilterChanged)
     Q_PROPERTY(bool xrScaleFilter READ xrScaleFilter WRITE setXrScaleFilter NOTIFY \
                xrScaleFilterChanged)
-    Q_PROPERTY(bool unredirectFullscreen READ unredirectFullscreen WRITE \
                setUnredirectFullscreen NOTIFY unredirectFullscreenChanged)
     Q_PROPERTY(int glSwapStrategy READ glSwapStrategy WRITE setGlSwapStrategy NOTIFY \
                glSwapStrategyChanged)
     Q_PROPERTY(bool glColorCorrection READ glColorCorrection WRITE \
                setGlColorCorrection NOTIFY glColorCorrectionChanged)
     Q_PROPERTY(int compositingType READ compositingType WRITE setCompositingType \
NOTIFY compositingTypeChanged) @@ -55,7 +54,6 @@ public:
     int windowThumbnail() const;
     int glScaleFilter() const;
     bool xrScaleFilter() const;
-    bool unredirectFullscreen() const;
     int glSwapStrategy() const;
     bool glColorCorrection() const;
     int compositingType() const;
@@ -68,7 +66,6 @@ public:
     void setWindowThumbnail(int index);
     void setGlScaleFilter(int index);
     void setXrScaleFilter(bool filter);
-    void setUnredirectFullscreen(bool unredirect);
     void setGlSwapStrategy(int strategy);
     void setGlColorCorrection(bool correction);
     void setCompositingType(int index);
@@ -87,7 +84,6 @@ Q_SIGNALS:
     void windowThumbnailChanged(int);
     void glScaleFilterChanged(int);
     void xrScaleFilterChanged(int);
-    void unredirectFullscreenChanged(bool);
     void glSwapStrategyChanged(int);
     void glColorCorrectionChanged(bool);
     void compositingTypeChanged(int);
@@ -99,7 +95,6 @@ private:
     int m_windowThumbnail;
     int m_glScaleFilter;
     bool m_xrScaleFilter;
-    bool m_unredirectFullscreen;
     int m_glSwapStrategy;
     bool m_glColorCorrection;
     int m_compositingType;
diff --git a/kcmkwin/kwincompositing/compositing.ui \
b/kcmkwin/kwincompositing/compositing.ui index 8a39bf5..ef1343c 100644
--- a/kcmkwin/kwincompositing/compositing.ui
+++ b/kcmkwin/kwincompositing/compositing.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>481</width>
-    <height>415</height>
+    <height>349</height>
    </rect>
   </property>
   <layout class="QFormLayout" name="formLayout">
@@ -81,22 +81,6 @@ Alternatively, you might want to use the XRender backend \
instead.</string>  </property>
       </widget>
      </item>
-     <item>
-      <widget class="KMessageWidget" name="unredirectInformation">
-       <property name="visible">
-        <bool>false</bool>
-       </property>
-       <property name="text">
-        <string>Having full screen windows bypass the compositor is not supported on \
                every hardware.</string>
-       </property>
-       <property name="wordWrap">
-        <bool>true</bool>
-       </property>
-       <property name="messageType">
-        <enum>KMessageWidget::Information</enum>
-       </property>
-      </widget>
-     </item>
     </layout>
    </item>
    <item row="1" column="0" colspan="2">
@@ -298,27 +282,13 @@ Alternatively, you might want to use the XRender backend \
instead.</string>  </widget>
    </item>
    <item row="12" column="0">
-    <widget class="QLabel" name="label_8">
-     <property name="text">
-      <string>Expert:</string>
-     </property>
-    </widget>
-   </item>
-   <item row="12" column="1">
-    <widget class="QCheckBox" name="unredirectFullscreen">
-     <property name="text">
-      <string>Suspend compositor for full screen windows</string>
-     </property>
-    </widget>
-   </item>
-   <item row="13" column="0">
     <widget class="QLabel" name="label_9">
      <property name="text">
       <string>Experimental:</string>
      </property>
     </widget>
    </item>
-   <item row="13" column="1">
+   <item row="12" column="1">
     <widget class="QCheckBox" name="colorCorrection">
      <property name="text">
       <string>Enable color correction</string>
diff --git a/kcmkwin/kwincompositing/main.cpp b/kcmkwin/kwincompositing/main.cpp
index a0d8e95..2d03829 100644
--- a/kcmkwin/kwincompositing/main.cpp
+++ b/kcmkwin/kwincompositing/main.cpp
@@ -86,7 +86,6 @@ KWinCompositingSettings::KWinCompositingSettings(QWidget *parent, \
                const QVariant
     m_form.scaleWarning->setIcon(QIcon::fromTheme(QStringLiteral("dialog-warning")));
                
     m_form.tearingWarning->setIcon(QIcon::fromTheme(QStringLiteral("dialog-warning")));
                
     m_form.windowThumbnailWarning->setIcon(QIcon::fromTheme(QStringLiteral("dialog-warning")));
                
-    m_form.unredirectInformation->setIcon(QIcon::fromTheme(QStringLiteral("dialog-information")));
  
     init();
 }
@@ -165,20 +164,6 @@ void KWinCompositingSettings::init()
         }
     );
 
-    // unredirect fullscreen
-    m_form.unredirectFullscreen->setChecked(m_compositing->unredirectFullscreen());
-    connect(m_compositing, &Compositing::unredirectFullscreenChanged, \
                m_form.unredirectFullscreen, &QCheckBox::setChecked);
-    connect(m_form.unredirectFullscreen, &QCheckBox::toggled, m_compositing, \
                &Compositing::setUnredirectFullscreen);
-    connect(m_form.unredirectFullscreen, &QCheckBox::toggled,
-        [this](bool enabled) {
-            if (enabled) {
-                m_form.unredirectInformation->animatedShow();
-            } else {
-                m_form.unredirectInformation->animatedHide();
-            }
-        }
-    );
-
     // color correction
     m_form.colorCorrection->setChecked(m_compositing->glColorCorrection());
     connect(m_compositing, &Compositing::glColorCorrectionChanged, \
                m_form.colorCorrection, &QCheckBox::setChecked);
diff --git a/kwin.kcfg b/kwin.kcfg
index 5846721..763482c 100644
--- a/kwin.kcfg
+++ b/kwin.kcfg
@@ -254,9 +254,6 @@
             <min>4</min>
             <max>6</max>
         </entry>
-        <entry name="UnredirectFullscreen" type="Bool">
-            <default>false</default>
-        </entry>
         <entry name="AnimationSpeed" type="Int">
             <default>3</default>
             <min>0</min>
diff --git a/layers.cpp b/layers.cpp
index 2edfda0..a368def 100644
--- a/layers.cpp
+++ b/layers.cpp
@@ -722,9 +722,6 @@ ToplevelList Workspace::xStackingOrder() const
             x_stacking << c;
         }
     }
-    if (m_compositor) {
-        const_cast< Workspace* >(this)->m_compositor->checkUnredirect();
-    }
     return x_stacking;
 }
 
diff --git a/options.cpp b/options.cpp
index dbd957f..124593e 100644
--- a/options.cpp
+++ b/options.cpp
@@ -114,7 +114,6 @@ Options::Options(QObject *parent)
     , m_useCompositing(Options::defaultUseCompositing())
     , m_compositingInitialized(Options::defaultCompositingInitialized())
     , m_hiddenPreviews(Options::defaultHiddenPreviews())
-    , m_unredirectFullscreen(Options::defaultUnredirectFullscreen())
     , m_glSmoothScale(Options::defaultGlSmoothScale())
     , m_colorCorrected(Options::defaultColorCorrected())
     , m_xrenderSmoothScale(Options::defaultXrenderSmoothScale())
@@ -634,20 +633,6 @@ void Options::setHiddenPreviews(int hiddenPreviews)
     emit hiddenPreviewsChanged();
 }
 
-void Options::setUnredirectFullscreen(bool unredirectFullscreen)
-{
-    if (GLPlatform::instance()->driver() == Driver_Intel)
-        unredirectFullscreen = false; // bug #252817
-    if (m_unredirectFullscreen == unredirectFullscreen) {
-        return;
-    }
-    if (GLPlatform::instance()->driver() == Driver_Intel) { // write back the value
-        KConfigGroup(m_settings->config(), \
                "Compositing").writeEntry("UnredirectFullscreen", false);
-    }
-    m_unredirectFullscreen = unredirectFullscreen;
-    emit unredirectFullscreenChanged();
-}
-
 void Options::setGlSmoothScale(int glSmoothScale)
 {
     if (m_glSmoothScale == glSmoothScale) {
@@ -1007,7 +992,6 @@ void Options::reloadCompositingSettings(bool force)
         previews = HiddenPreviewsAlways;
     setHiddenPreviews(previews);
 
-    setUnredirectFullscreen(config.readEntry("UnredirectFullscreen", \
Options::defaultUnredirectFullscreen()));  // TOOD: add setter
     animationSpeed = qBound(0, config.readEntry("AnimationSpeed", \
Options::defaultAnimationSpeed()), 6);  
@@ -1162,10 +1146,4 @@ bool Options::isUseCompositing() const
     return m_useCompositing || kwinApp()->platform()->requiresCompositing();
 }
 
-
-bool Options::isUnredirectFullscreen() const
-{
-    return m_unredirectFullscreen && !kwinApp()->platform()->requiresCompositing();
-}
-
 } // namespace
diff --git a/options.h b/options.h
index 30c3899..7f4bb0e 100644
--- a/options.h
+++ b/options.h
@@ -169,7 +169,6 @@ class KWIN_EXPORT Options : public QObject
     Q_PROPERTY(bool useCompositing READ isUseCompositing WRITE setUseCompositing \
                NOTIFY useCompositingChanged)
     Q_PROPERTY(bool compositingInitialized READ isCompositingInitialized WRITE \
                setCompositingInitialized NOTIFY compositingInitializedChanged)
     Q_PROPERTY(int hiddenPreviews READ hiddenPreviews WRITE setHiddenPreviews NOTIFY \
                hiddenPreviewsChanged)
-    Q_PROPERTY(bool unredirectFullscreen READ isUnredirectFullscreen WRITE \
setUnredirectFullscreen NOTIFY unredirectFullscreenChanged)  /**
      * 0 = no, 1 = yes when transformed,
      * 2 = try trilinear when transformed; else 1,
@@ -551,7 +550,6 @@ public:
     HiddenPreviews hiddenPreviews() const {
         return m_hiddenPreviews;
     }
-    bool isUnredirectFullscreen() const;
     // OpenGL
     // 0 = no, 1 = yes when transformed,
     // 2 = try trilinear when transformed; else 1,
@@ -648,7 +646,6 @@ public:
     void setUseCompositing(bool useCompositing);
     void setCompositingInitialized(bool compositingInitialized);
     void setHiddenPreviews(int hiddenPreviews);
-    void setUnredirectFullscreen(bool unredirectFullscreen);
     void setGlSmoothScale(int glSmoothScale);
     void setXrenderSmoothScale(bool xrenderSmoothScale);
     void setMaxFpsInterval(qint64 maxFpsInterval);
@@ -736,9 +733,6 @@ public:
     static HiddenPreviews defaultHiddenPreviews() {
         return HiddenPreviewsShown;
     }
-    static bool defaultUnredirectFullscreen() {
-        return false;
-    }
     static int defaultGlSmoothScale() {
         return 2;
     }
@@ -843,7 +837,6 @@ Q_SIGNALS:
     void useCompositingChanged();
     void compositingInitializedChanged();
     void hiddenPreviewsChanged();
-    void unredirectFullscreenChanged();
     void glSmoothScaleChanged();
     void colorCorrectedChanged();
     void xrenderSmoothScaleChanged();
@@ -892,7 +885,6 @@ private:
     bool m_useCompositing;
     bool m_compositingInitialized;
     HiddenPreviews m_hiddenPreviews;
-    bool m_unredirectFullscreen;
     int m_glSmoothScale;
     bool m_colorCorrected;
     bool m_xrenderSmoothScale;
diff --git a/plugins/platforms/x11/standalone/glxbackend.cpp \
b/plugins/platforms/x11/standalone/glxbackend.cpp index 94ef225..abe6f83 100644
--- a/plugins/platforms/x11/standalone/glxbackend.cpp
+++ b/plugins/platforms/x11/standalone/glxbackend.cpp
@@ -173,8 +173,6 @@ void GlxBackend::init()
     // Initialize OpenGL
     GLPlatform *glPlatform = GLPlatform::instance();
     glPlatform->detect(GlxPlatformInterface);
-    if (GLPlatform::instance()->driver() == Driver_Intel)
-        options->setUnredirectFullscreen(false); // bug #252817
     options->setGlPreferBufferSwap(options->glPreferBufferSwap()); // resolve \
autosetting  if (options->glPreferBufferSwap() == Options::AutoSwapStrategy)
         options->setGlPreferBufferSwap('e'); // for unknown drivers - should not \
                happen
diff --git a/scene.cpp b/scene.cpp
index 9f31c89..6f4aec3 100644
--- a/scene.cpp
+++ b/scene.cpp
@@ -234,9 +234,6 @@ void Scene::paintGenericScreen(int orig_mask, ScreenPaintData)
             continue;
         }
         phase2.append(Phase2Data(w, infiniteRegion(), data.clip, data.mask, \
                data.quads));
-        // transformations require window pixmap
-        w->suspendUnredirect(data.mask
-                             & (PAINT_WINDOW_TRANSLUCENT | PAINT_SCREEN_TRANSFORMED \
| PAINT_WINDOW_TRANSFORMED));  }
 
     foreach (const Phase2Data & d, phase2) {
@@ -309,15 +306,12 @@ void Scene::paintSimpleScreen(int orig_mask, QRegion region)
         }
 #endif
         if (!w->isPaintingEnabled()) {
-            w->suspendUnredirect(true);
             continue;
         }
         dirtyArea |= data.paint;
         // Schedule the window for painting
         phase2data.append(QPair< Window*, Phase2Data >(w,Phase2Data(w, data.paint, \
                data.clip,
                                                                     data.mask, \
                data.quads)));
-        // no transformations, but translucency requires window pixmap
-        w->suspendUnredirect(data.mask & PAINT_WINDOW_TRANSLUCENT);
     }
 
     // Save the part of the repaint region that's exclusively rendered to
diff --git a/scene.h b/scene.h
index 58280a5..c5ee865 100644
--- a/scene.h
+++ b/scene.h
@@ -275,7 +275,6 @@ public:
     void updateToplevel(Toplevel* c);
     // creates initial quad list for the window
     virtual WindowQuadList buildQuads(bool force = false) const;
-    void suspendUnredirect(bool suspend);
     void updateShadow(Shadow* shadow);
     const Shadow* shadow() const;
     Shadow* shadow();
@@ -535,12 +534,6 @@ void Scene::Window::updateToplevel(Toplevel* c)
 }
 
 inline
-void Scene::Window::suspendUnredirect(bool suspend)
-{
-    toplevel->suspendUnredirect(suspend);
-}
-
-inline
 void Scene::Window::updateShadow(Shadow* shadow)
 {
     m_shadow = shadow;
diff --git a/shell_client.cpp b/shell_client.cpp
index 887c5a6..9e4a0a5 100644
--- a/shell_client.cpp
+++ b/shell_client.cpp
@@ -322,12 +322,6 @@ Layer ShellClient::layerForDock() const
     return AbstractClient::layerForDock();
 }
 
-bool ShellClient::shouldUnredirect() const
-{
-    // TODO: unredirect for fullscreen
-    return false;
-}
-
 QRect ShellClient::transparentRect() const
 {
     // TODO: implement
diff --git a/shell_client.h b/shell_client.h
index 26b70c3..4f32b03 100644
--- a/shell_client.h
+++ b/shell_client.h
@@ -50,7 +50,6 @@ public:
     QPoint clientContentPos() const override;
     QSize clientSize() const override;
     QRect transparentRect() const override;
-    bool shouldUnredirect() const override;
     NET::WindowType windowType(bool direct = false, int supported_types = 0) const \
override;  void debug(QDebug &stream) const override;
     double opacity() const override;
diff --git a/toplevel.cpp b/toplevel.cpp
index 1407aec..579bdd7 100644
--- a/toplevel.cpp
+++ b/toplevel.cpp
@@ -50,8 +50,6 @@ Toplevel::Toplevel()
     , effect_window(NULL)
     , m_clientMachine(new ClientMachine(this))
     , wmClientLeaderWin(0)
-    , unredirect(false)
-    , unredirectSuspend(false)
     , m_damageReplyPending(false)
     , m_screen(0)
     , m_skipCloseAnimation(false)
diff --git a/toplevel.h b/toplevel.h
index c80ffd3..0db6145 100644
--- a/toplevel.h
+++ b/toplevel.h
@@ -295,9 +295,6 @@ public:
     bool hasAlpha() const;
     virtual bool setupCompositing();
     virtual void finishCompositing(ReleaseReason releaseReason = \
                ReleaseReason::Release);
-    bool updateUnredirectedState();
-    bool unredirected() const;
-    void suspendUnredirect(bool suspend);
     Q_INVOKABLE void addRepaint(const QRect& r);
     Q_INVOKABLE void addRepaint(const QRegion& r);
     Q_INVOKABLE void addRepaint(int x, int y, int w, int h);
@@ -500,7 +497,6 @@ protected:
     void disownDataPassedToDeleted();
     friend QDebug& operator<<(QDebug& stream, const Toplevel*);
     void deleteEffectWindow();
-    virtual bool shouldUnredirect() const = 0;
     void setDepth(int depth);
     QRect geom;
     xcb_visualid_t m_visual;
@@ -524,8 +520,6 @@ private:
     QByteArray resource_class;
     ClientMachine *m_clientMachine;
     WId wmClientLeaderWin;
-    bool unredirect;
-    bool unredirectSuspend; // when unredirected, but pixmap is needed temporarily
     bool m_damageReplyPending;
     QRegion opaque_region;
     xcb_xfixes_fetch_region_cookie_t m_regionCookie;
@@ -763,11 +757,6 @@ inline QByteArray Toplevel::resourceClass() const
     return resource_class; // it is always lowercase
 }
 
-inline bool Toplevel::unredirected() const
-{
-    return unredirect;
-}
-
 inline const ClientMachine *Toplevel::clientMachine() const
 {
     return m_clientMachine;
diff --git a/unmanaged.h b/unmanaged.h
index 31aea04..6cee6c1 100644
--- a/unmanaged.h
+++ b/unmanaged.h
@@ -51,7 +51,6 @@ public Q_SLOTS:
     void release(ReleaseReason releaseReason = ReleaseReason::Release);
 protected:
     virtual void debug(QDebug& stream) const;
-    virtual bool shouldUnredirect() const;
 private:
     virtual ~Unmanaged(); // use release()
     // handlers for X11 events
diff --git a/workspace.cpp b/workspace.cpp
index dd6dee8..a7f3961 100644
--- a/workspace.cpp
+++ b/workspace.cpp
@@ -495,10 +495,6 @@ Client* Workspace::createClient(xcb_window_t w, bool is_mapped)
     StackingUpdatesBlocker blocker(this);
     Client* c = new Client();
     setupClientConnections(c);
-    connect(c, &Client::activeChanged, m_compositor, static_cast<void \
                (Compositor::*)()>(&Compositor::checkUnredirect));
-    connect(c, SIGNAL(fullScreenChanged()), m_compositor, SLOT(checkUnredirect()));
-    connect(c, SIGNAL(geometryChanged()), m_compositor, SLOT(checkUnredirect()));
-    connect(c, SIGNAL(geometryShapeChanged(KWin::Toplevel*,QRect)), m_compositor, \
                SLOT(checkUnredirect()));
     connect(c, SIGNAL(blockingCompositingChanged(KWin::Client*)), m_compositor, \
                SLOT(updateCompositeBlocking(KWin::Client*)));
     connect(c, SIGNAL(clientFullScreenSet(KWin::Client*,bool,bool)), \
ScreenEdges::self(), SIGNAL(checkBlocking()));  if (!c->manage(w, is_mapped)) {


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic