Use kwinrc:[Translucency]:UseTranslucency for controlling compositing.

svn path=/branches/work/kwin_composite/; revision=558712
This commit is contained in:
Luboš Luňák 2006-07-05 21:46:01 +00:00
parent a3e8749d1c
commit bab62bf88f
5 changed files with 21 additions and 12 deletions

View file

@ -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

View file

@ -39,7 +39,7 @@
#include <QVBoxLayout>
#include <kmessagebox.h>
#include <qlabel.h>
#include <kactivelabel.h>
#include <klocale.h>
#include <kcolorbutton.h>
#include <kconfig.h>
@ -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("<qt><b>It seems that alpha channel support is not available.</b><br><br>"
KActiveLabel *label = new KActiveLabel(i18n("<qt><b>It seems that alpha channel support is not available.</b><br><br>"
"Please make sure you have "
"<a href=\"http://www.freedesktop.org/\">Xorg &ge; 6.8</a>,"
" and have installed the kompmgr that came with kwin.<br>"
@ -1255,7 +1255,6 @@ KTranslucencyConfig::KTranslucencyConfig (bool _standAlone, KConfig *_config, KI
"And if your GPU provides hardware-accelerated Xrender support (mainly nVidia cards):<br><br>"
"<i>Option \"RenderAccel\" \"true\"</i><br>"
"In <i>Section \"Device\"</i></qt>"), 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());

View file

@ -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();

View file

@ -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 );

View file

@ -961,6 +961,11 @@ void Workspace::slotReconfigure()
updateTopMenuGeometry();
updateCurrentTopMenu();
}
if( options->useTranslucency )
setupCompositing();
else
finishCompositing();
loadWindowRules();
for( ClientList::Iterator it = clients.begin();