diff --git a/compositingprefs.cpp b/compositingprefs.cpp index 0c80eaa293..42077972db 100644 --- a/compositingprefs.cpp +++ b/compositingprefs.cpp @@ -33,7 +33,7 @@ namespace KWin CompositingPrefs::CompositingPrefs() : mXgl( false ) - , mEnableCompositing( false ) + , mRecommendCompositing( false ) , mEnableVSync( true ) , mEnableDirectRendering( true ) , mStrictBinding( true ) @@ -44,9 +44,9 @@ CompositingPrefs::~CompositingPrefs() { } -bool CompositingPrefs::enableCompositing() const +bool CompositingPrefs::recommendCompositing() const { - return mEnableCompositing; + return mRecommendCompositing; } bool CompositingPrefs::compositingPossible() @@ -321,7 +321,7 @@ void CompositingPrefs::applyDriverSpecificOptions() if( mXgl ) { kDebug( 1212 ) << "xgl, enabling"; - mEnableCompositing = true; + mRecommendCompositing = true; mStrictBinding = false; } else if( mDriver == "intel" ) @@ -334,12 +334,12 @@ void CompositingPrefs::applyDriverSpecificOptions() if( mGLRenderer.contains( "Intel(R) 9" )) { // Enable compositing by default on 900-series cards kDebug( 1212 ) << "intel >= 20061017 and 900-series card, enabling compositing"; - mEnableCompositing = true; + mRecommendCompositing = true; } if( mGLRenderer.contains( "Mesa DRI Intel(R) G" )) { // e.g. G43 chipset kDebug( 1212 ) << "intel >= 20061017 and Gxx-series card, enabling compositing"; - mEnableCompositing = true; + mRecommendCompositing = true; } } } @@ -349,7 +349,7 @@ void CompositingPrefs::applyDriverSpecificOptions() if( mVersion >= Version( "173.14.12" )) { kDebug( 1212 ) << "nvidia >= 173.14.12, enabling compositing"; - mEnableCompositing = true; + mRecommendCompositing = true; } } else if( mDriver == "radeon" ) @@ -357,12 +357,12 @@ void CompositingPrefs::applyDriverSpecificOptions() if( mGLRenderer.startsWith( "Mesa DRI R200" ) && mVersion >= Version( "20060602" )) // krazy:exclude=strings { kDebug( 1212 ) << "radeon r200 >= 20060602, enabling compositing"; - mEnableCompositing = true; + mRecommendCompositing = true; } if( mGLRenderer.startsWith( "Mesa DRI R300" ) && mVersion >= Version( "20090101" )) // krazy:exclude=strings { kDebug( 1212 ) << "radeon r300 >= 20090101, enabling compositing"; - mEnableCompositing = true; + mRecommendCompositing = true; } if( mGLRenderer.startsWith( "Mesa DRI R600" ) ) { @@ -372,7 +372,7 @@ void CompositingPrefs::applyDriverSpecificOptions() if( major > 7 || ( major == 7 && minor >= 7 ) ) { kDebug( 1212 ) << "Radeon R600/R700, Mesa 7.7 or better. Enabling compositing."; - mEnableCompositing = true; + mRecommendCompositing = true; } } } @@ -381,7 +381,7 @@ void CompositingPrefs::applyDriverSpecificOptions() if( mVersion >= Version( "2.1.7412" )) { kDebug( 1212 ) << "fglrx >= 2.1.7412, enabling compositing"; - mEnableCompositing = true; + mRecommendCompositing = true; } } } diff --git a/compositingprefs.h b/compositingprefs.h index 0dd7533d86..b6d3b8ed2f 100644 --- a/compositingprefs.h +++ b/compositingprefs.h @@ -54,7 +54,7 @@ public: static bool compositingPossible(); static QString compositingNotPossibleReason(); bool validateSetup( CompositingType compositingType ) const; - bool enableCompositing() const; // recommendCompositing()? + bool recommendCompositing() const; bool enableVSync() const { return mEnableVSync; } bool enableDirectRendering() const { return mEnableDirectRendering; } bool strictBinding() const { return mStrictBinding; } @@ -85,7 +85,7 @@ private: Version mVersion; bool mXgl; - bool mEnableCompositing; + bool mRecommendCompositing; bool mEnableVSync; bool mEnableDirectRendering; bool mStrictBinding; diff --git a/kcmkwin/kwincompositing/main.cpp b/kcmkwin/kwincompositing/main.cpp index 04a7e3b81e..9229585899 100644 --- a/kcmkwin/kwincompositing/main.cpp +++ b/kcmkwin/kwincompositing/main.cpp @@ -317,7 +317,7 @@ void KWinCompositingConfig::currentTabChanged(int tab) void KWinCompositingConfig::loadGeneralTab() { KConfigGroup config(mKWinConfig, "Compositing"); - bool enabled = config.readEntry("Enabled", mDefaultPrefs.enableCompositing()); + bool enabled = config.readEntry("Enabled", mDefaultPrefs.recommendCompositing()); ui.useCompositing->setChecked( enabled ); ui.animationSpeedCombo->setCurrentIndex(config.readEntry("AnimationSpeed", 3 )); @@ -473,7 +473,7 @@ void KWinCompositingConfig::saveGeneralTab() KConfigGroup config(mKWinConfig, "Compositing"); // Check if any critical settings that need confirmation have changed if(ui.useCompositing->isChecked() && - ui.useCompositing->isChecked() != config.readEntry("Enabled", mDefaultPrefs.enableCompositing())) + ui.useCompositing->isChecked() != config.readEntry("Enabled", mDefaultPrefs.recommendCompositing())) m_showConfirmDialog = true; config.writeEntry("Enabled", ui.useCompositing->isChecked()); @@ -674,7 +674,7 @@ void KWinCompositingConfig::checkLoadedEffects() QDBusMessage message = QDBusMessage::createMethodCall( "org.kde.kwin", "/KWin", "org.kde.KWin", "loadedEffects" ); QDBusMessage reply = QDBusConnection::sessionBus().call( message ); KConfigGroup effectConfig = KConfigGroup( mKWinConfig, "Compositing" ); - bool enabledAfter = effectConfig.readEntry( "Enabled", mDefaultPrefs.enableCompositing() ); + bool enabledAfter = effectConfig.readEntry( "Enabled", mDefaultPrefs.recommendCompositing() ); if( reply.type() == QDBusMessage::ReplyMessage && enabledAfter && !getenv( "KDE_FAILSAFE" )) { @@ -734,7 +734,7 @@ void KWinCompositingConfig::defaults() { ui.tabWidget->setCurrentIndex(0); - ui.useCompositing->setChecked(mDefaultPrefs.enableCompositing()); + ui.useCompositing->setChecked(mDefaultPrefs.recommendCompositing()); ui.effectWinManagement->setChecked(true); ui.effectShadows->setChecked(true); ui.effectAnimations->setChecked(true); diff --git a/kcmkwin/kwinscreenedges/main.cpp b/kcmkwin/kwinscreenedges/main.cpp index 17bf7f2bf0..ab331d54be 100644 --- a/kcmkwin/kwinscreenedges/main.cpp +++ b/kcmkwin/kwinscreenedges/main.cpp @@ -64,9 +64,17 @@ KWinScreenEdgesConfig::KWinScreenEdgesConfig( QWidget* parent, const QVariantLis connect( m_ui->quickMaximizeBox, SIGNAL( stateChanged(int) ), this, SLOT( groupChanged() )); connect( m_ui->quickTileBox, SIGNAL( stateChanged(int) ), this, SLOT( groupChanged() )); - if( CompositingPrefs::compositingPossible() ) + // NOTICE: this is intended to workaround broken GL implementations that succesfully segfault on glXQuery :-( + KConfigGroup gl_workaround_config(m_config, "Compositing"); + const bool checkIsSafe = gl_workaround_config.readEntry("CheckIsSafe", true); + if( checkIsSafe && CompositingPrefs::compositingPossible() ) + { + gl_workaround_config.writeEntry("CheckIsSafe", false); + gl_workaround_config.sync(); m_defaultPrefs.detect(); // Driver-specific config detection - + gl_workaround_config.writeEntry("CheckIsSafe", true); + gl_workaround_config.sync(); + } load(); } @@ -413,7 +421,7 @@ void KWinScreenEdgesConfig::monitorShowEvent() { // Check if they are enabled KConfigGroup config( m_config, "Compositing" ); - if( config.readEntry( "Enabled", m_defaultPrefs.enableCompositing() )) + if( config.readEntry( "Enabled", m_defaultPrefs.recommendCompositing() )) { // Compositing enabled config = KConfigGroup( m_config, "Plugins" ); diff --git a/options.cpp b/options.cpp index f408aee808..5209586697 100644 --- a/options.cpp +++ b/options.cpp @@ -229,12 +229,13 @@ void Options::reloadCompositingSettings() // Compositing settings CompositingPrefs prefs; - useCompositing = config.readEntry("Enabled", true); - if (useCompositing) - { + if( !config.hasKey( "Enabled" )) + { prefs.detect(); - useCompositing = prefs.enableCompositing(); - } + useCompositing = prefs.recommendCompositing(); + } + else + useCompositing = config.readEntry( "Enabled" , true ); if (!useCompositing) return;