Send notification about effects that could not be activated because they are not supported by hardware or compositing backend.

FEATURE: 168841

svn path=/trunk/KDE/kdebase/workspace/; revision=947920
This commit is contained in:
Martin Gräßlin 2009-04-01 16:24:40 +00:00
parent a4a783d94c
commit 8ed4c44539

View file

@ -33,6 +33,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <kplugininfo.h> #include <kplugininfo.h>
#include <kservice.h> #include <kservice.h>
#include <ktitlewidget.h> #include <ktitlewidget.h>
#include <knotification.h>
#include <QtDBus/QtDBus> #include <QtDBus/QtDBus>
#include <QTimer> #include <QTimer>
@ -611,6 +612,45 @@ void KWinCompositingConfig::configChanged(bool reinitCompositing)
effectConfig = KConfigGroup( mKWinConfig, "Plugins" ); effectConfig = KConfigGroup( mKWinConfig, "Plugins" );
bool shadowAfter = effectEnabled( "shadow", effectConfig ); bool shadowAfter = effectEnabled( "shadow", effectConfig );
// check for effects not supported by Backend or hardware
// such effects are enabled but not returned by DBus method loadedEffects
message = QDBusMessage::createMethodCall( "org.kde.kwin", "/KWin", "org.kde.KWin", "loadedEffects" );
QDBusMessage reply = QDBusConnection::sessionBus().call( message );
if( reply.type() == QDBusMessage::ReplyMessage )
{
QStringList loadedEffects = reply.arguments()[0].toStringList();
QStringList effects = effectConfig.keyList();
QStringList disabledEffects = QStringList();
foreach( QString effect, effects )
{
QString temp = effect.mid( 13, effect.length() - 13 - 7 );
effect.truncate( effect.length() - 7 );
if( effectEnabled( temp, effectConfig ) && !loadedEffects.contains( effect ) )
{
disabledEffects << effect;
}
}
if( !disabledEffects.isEmpty() )
{
KServiceTypeTrader* trader = KServiceTypeTrader::self();
KService::List services;
QString message = i18n( "The following effects could not be activated:" );
message.append( "<ul>" );
foreach( QString effect, disabledEffects )
{
services = trader->query("KWin/Effect", "[X-KDE-PluginInfo-Name] == '" + effect + "'");
message.append( "<li>" );
if( !services.isEmpty() )
message.append( services.first()->name() );
else
message.append( effect);
message.append( "</li>" );
}
message.append( "</ul>" );
KNotification::event( KNotification::Notification, message );
}
}
if( enabledBefore != enabledAfter || shadowBefore != shadowAfter ) if( enabledBefore != enabledAfter || shadowBefore != shadowAfter )
{ {
message = QDBusMessage::createMethodCall( "org.kde.kwin", "/KWin", "org.kde.KWin", "reconfigure" ); message = QDBusMessage::createMethodCall( "org.kde.kwin", "/KWin", "org.kde.KWin", "reconfigure" );