diff --git a/composite.cpp b/composite.cpp index fa06b09d9f..9bbb9c3066 100644 --- a/composite.cpp +++ b/composite.cpp @@ -26,6 +26,8 @@ namespace KWinInternal #if defined( HAVE_XCOMPOSITE ) && defined( HAVE_XDAMAGE ) && defined( HAVE_XFIXES ) void Workspace::setupCompositing() { + if( !options->useTranslucency ) + return; if( !Extensions::compositeAvailable() || !Extensions::damageAvailable()) return; if( scene != NULL ) @@ -36,12 +38,20 @@ void Workspace::setupCompositing() // scene = new SceneBasic( this ); scene = new SceneXrender( this ); addDamage( 0, 0, displayWidth(), displayHeight()); + foreach( Client* c, clients ) + c->setupCompositing(); + foreach( Unmanaged* c, unmanaged ) + c->setupCompositing(); } void Workspace::finishCompositing() { if( scene == NULL ) return; + foreach( Client* c, clients ) + c->finishCompositing(); + foreach( Unmanaged* c, unmanaged ) + c->finishCompositing(); XCompositeUnredirectSubwindows( display(), rootWindow(), CompositeRedirectManual ); compositeTimer.stop(); // TODO stop tracking unmanaged windows diff --git a/kcmkwin/kwinoptions/windows.cpp b/kcmkwin/kwinoptions/windows.cpp index 51b323036d..89c0df9990 100644 --- a/kcmkwin/kwinoptions/windows.cpp +++ b/kcmkwin/kwinoptions/windows.cpp @@ -39,7 +39,7 @@ #include #include -#include +#include #include #include #include @@ -1244,7 +1244,7 @@ KTranslucencyConfig::KTranslucencyConfig (bool _standAlone, KConfig *_config, KI QVBoxLayout *lay = new QVBoxLayout (this); kompmgrAvailable_ = kompmgrAvailable(); if (!kompmgrAvailable_){ - QLabel *label = new QLabel(i18n("It seems that alpha channel support is not available.

" + KActiveLabel *label = new KActiveLabel(i18n("It seems that alpha channel support is not available.

" "Please make sure you have " "Xorg ≥ 6.8," " and have installed the kompmgr that came with kwin.
" @@ -1255,7 +1255,6 @@ KTranslucencyConfig::KTranslucencyConfig (bool _standAlone, KConfig *_config, KI "And if your GPU provides hardware-accelerated Xrender support (mainly nVidia cards):

" "Option \"RenderAccel\" \"true\"
" "In Section \"Device\"
"), this); - label->setOpenExternalLinks(true); lay->addWidget(label); } else @@ -1476,10 +1475,8 @@ void KTranslucencyConfig::load( void ) if (!kompmgrAvailable_) return; - config->setGroup( "Notification Messages" ); - useTranslucency->setChecked(config->readEntry("UseTranslucency", QVariant(false)).toBool()); - config->setGroup( "Translucency" ); + useTranslucency->setChecked(config->readEntry("UseTranslucency", QVariant(false)).toBool()); activeWindowTransparency->setChecked(config->readEntry("TranslucentActiveWindows", QVariant(false)).toBool()); inactiveWindowTransparency->setChecked(config->readEntry("TranslucentInactiveWindows", QVariant(true)).toBool()); movingWindowTransparency->setChecked(config->readEntry("TranslucentMovingWindows", QVariant(false)).toBool()); @@ -1539,10 +1536,8 @@ void KTranslucencyConfig::save( void ) { if (!kompmgrAvailable_) return; - config->setGroup( "Notification Messages" ); - config->writeEntry("UseTranslucency",useTranslucency->isChecked()); - config->setGroup( "Translucency" ); + config->writeEntry("UseTranslucency",useTranslucency->isChecked()); config->writeEntry("TranslucentActiveWindows",activeWindowTransparency->isChecked()); config->writeEntry("TranslucentInactiveWindows",inactiveWindowTransparency->isChecked()); config->writeEntry("TranslucentMovingWindows",movingWindowTransparency->isChecked()); diff --git a/options.cpp b/options.cpp index df57b750d9..d106922d87 100644 --- a/options.cpp +++ b/options.cpp @@ -174,9 +174,8 @@ unsigned long Options::updateSettings() CmdAllWheel = mouseWheelCommand(config->readEntry("CommandAllWheel","Nothing")); //translucency settings - TODO - config->setGroup( "Notification Messages" ); - useTranslucency = config->readEntry("UseTranslucency", QVariant(false)).toBool(); config->setGroup( "Translucency"); + useTranslucency = config->readEntry("UseTranslucency", QVariant(true)).toBool(); translucentActiveWindows = config->readEntry("TranslucentActiveWindows", QVariant(false)).toBool(); activeWindowOpacity = uint((config->readEntry("ActiveWindowOpacity", 100)/100.0)*0xFFFFFFFF); translucentInactiveWindows = config->readEntry("TranslucentInactiveWindows", QVariant(false)).toBool(); diff --git a/toplevel.h b/toplevel.h index 35c4e85387..dceaf55e4b 100644 --- a/toplevel.h +++ b/toplevel.h @@ -42,9 +42,9 @@ class Toplevel Pixmap windowPixmap() const; Visual* visual() const; virtual float opacity() const = 0; - protected: void setupCompositing(); void finishCompositing(); + protected: void setHandle( Window id ); void resetWindowPixmap(); void damageNotifyEvent( XDamageNotifyEvent* e ); diff --git a/workspace.cpp b/workspace.cpp index 3bb8adbc7d..34aef32842 100644 --- a/workspace.cpp +++ b/workspace.cpp @@ -961,6 +961,11 @@ void Workspace::slotReconfigure() updateTopMenuGeometry(); updateCurrentTopMenu(); } + + if( options->useTranslucency ) + setupCompositing(); + else + finishCompositing(); loadWindowRules(); for( ClientList::Iterator it = clients.begin();