Show current compositing state (disabled/suspended/active) in Desktop Effects KCM and add a button to resume/suspend compositing. So it should be easier for the user to resume compositing if he does not know about the shortcut.

CCBUG: 188118

svn path=/trunk/KDE/kdebase/workspace/; revision=955636
icc-effect-5.14.5
Martin Gräßlin 2009-04-18 10:07:16 +00:00
parent f199007952
commit 63edbaff81
6 changed files with 116 additions and 2 deletions

View File

@ -306,6 +306,7 @@ void Workspace::suspendCompositing( bool suspend )
compositingSuspended = suspend;
finishCompositing();
setupCompositing(); // will do nothing if suspended
emit compositingToggled( !compositingSuspended );
}
void Workspace::resetCompositing()

View File

@ -74,6 +74,7 @@ KWinCompositingConfig::KWinCompositingConfig(QWidget *parent, const QVariantList
: KCModule( KWinCompositingConfigFactory::componentData(), parent )
, mKWinConfig(KSharedConfig::openConfig( "kwinrc" ))
, m_showConfirmDialog( false )
, kwinInterface( NULL )
{
KGlobal::locale()->insertCatalog( "kwin_effects" );
ui.setupUi(this);
@ -95,6 +96,8 @@ KWinCompositingConfig::KWinCompositingConfig(QWidget *parent, const QVariantList
#define XRENDER_INDEX -1
#endif
kwinInterface = new OrgKdeKWinInterface( "org.kde.kwin", "/KWin", QDBusConnection::sessionBus() );
connect(ui.useCompositing, SIGNAL(toggled(bool)), this, SLOT(compositingEnabled(bool)));
connect(ui.tabWidget, SIGNAL(currentChanged(int)), this, SLOT(currentTabChanged(int)));
@ -120,6 +123,8 @@ KWinCompositingConfig::KWinCompositingConfig(QWidget *parent, const QVariantList
connect(ui.glDirect, SIGNAL(toggled(bool)), this, SLOT(changed()));
connect(ui.glVSync, SIGNAL(toggled(bool)), this, SLOT(changed()));
connect(ui.xrenderSmoothScale, SIGNAL(toggled(bool)), this, SLOT(changed()));
connect(ui.compositingStateButton, SIGNAL(clicked(bool)), kwinInterface, SLOT(toggleCompositing()));
connect(kwinInterface, SIGNAL(compositingToggled(bool)), this, SLOT(setupCompositingState(bool)));
// Open the temporary config file
// Temporary conf file is used to synchronize effect checkboxes with effect
@ -149,6 +154,8 @@ KWinCompositingConfig::KWinCompositingConfig(QWidget *parent, const QVariantList
ui.statusTitleWidget->setText(text);
ui.statusTitleWidget->setPixmap(KTitleWidget::InfoMessage, KTitleWidget::ImageLeft);
ui.statusTitleWidget->show();
setupCompositingState( false, false );
}
KAboutData *about = new KAboutData(I18N_NOOP("kcmkwincompositing"), 0,
@ -234,6 +241,11 @@ void KWinCompositingConfig::showConfirmDialog( bool reinitCompositing )
ConfirmDialog confirm;
if( !confirm.exec())
revert = true;
else
{
// compositing is enabled now
setupCompositingState( kwinInterface->compositingActive() );
}
}
if( revert )
{
@ -297,7 +309,8 @@ void KWinCompositingConfig::currentTabChanged(int tab)
void KWinCompositingConfig::loadGeneralTab()
{
KConfigGroup config(mKWinConfig, "Compositing");
ui.useCompositing->setChecked(config.readEntry("Enabled", mDefaultPrefs.enableCompositing()));
bool enabled = config.readEntry("Enabled", mDefaultPrefs.enableCompositing());
ui.useCompositing->setChecked( enabled );
ui.animationSpeedCombo->setCurrentIndex(config.readEntry("AnimationSpeed", 3 ));
// Load effect settings
@ -339,6 +352,48 @@ void KWinCompositingConfig::loadGeneralTab()
ui.desktopSwitchingCombo->setCurrentIndex( 2 );
if( effectEnabled( "fadedesktop", effectconfig ))
ui.desktopSwitchingCombo->setCurrentIndex( 3 );
if( enabled )
setupCompositingState( kwinInterface->compositingActive() );
else
setupCompositingState( false, false );
}
void KWinCompositingConfig::setupCompositingState( bool active, bool enabled )
{
// compositing state
QString stateIcon;
QString stateText;
QString stateButtonText;
if( enabled )
{
// check if compositing is active or suspended
if( active )
{
stateIcon = QString( "dialog-ok-apply" );
stateText = i18n( "Compositing is active" );
stateButtonText = i18n( "Suspend Compositing" );
}
else
{
stateIcon = QString( "dialog-cancel" );
stateText = i18n( "Compositing is temporarily disabled" );
stateButtonText = i18n( "Resume Compositing" );
}
}
else
{
// compositing is disabled
stateIcon = QString( "dialog-cancel" );
stateText = i18n( "Compositing is disabled" );
stateButtonText = i18n( "Resume Compositing" );
}
ui.compositingStateIcon->setPixmap( KIcon( stateIcon ).pixmap( 32, 32 ) );
ui.compositingStateLabel->setText( stateText );
ui.compositingStateButton->setText( stateButtonText );
ui.compositingStateIcon->setEnabled( enabled );
ui.compositingStateLabel->setEnabled( enabled );
ui.compositingStateButton->setEnabled( enabled );
}
bool KWinCompositingConfig::effectEnabled( const QString& effect, const KConfigGroup& cfg ) const
@ -410,6 +465,10 @@ void KWinCompositingConfig::saveGeneralTab()
config.writeEntry("Enabled", ui.useCompositing->isChecked());
config.writeEntry("AnimationSpeed", ui.animationSpeedCombo->currentIndex());
// disable the compositing state if compositing was turned off
if( !ui.useCompositing->isChecked() )
setupCompositingState( false, false );
// Save effects
KConfigGroup effectconfig(mTmpConfig, "Plugins");
#define WRITE_EFFECT_CONFIG(effectname, widget) effectconfig.writeEntry("kwin4_effect_" effectname "Enabled", widget->isChecked())

View File

@ -26,6 +26,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <ksharedconfig.h>
#include <ktemporaryfile.h>
#include "kwin_interface.h"
#include "ui_main.h"
#include "compositingprefs.h"
#include "ktimerdialog.h"
@ -71,6 +73,7 @@ class KWinCompositingConfig : public KCModule
void configChanged(bool reinitCompositing);
void initEffectSelector();
void setupCompositingState( bool active, bool enabled = true );
private:
bool effectEnabled( const QString& effect, const KConfigGroup& cfg ) const;
@ -83,6 +86,8 @@ class KWinCompositingConfig : public KCModule
KTemporaryFile mTmpConfigFile;
KSharedConfigPtr mTmpConfig;
bool m_showConfirmDialog;
OrgKdeKWinInterface* kwinInterface;
};
} // namespace

View File

@ -37,7 +37,7 @@
<item>
<widget class="QWidget" name="compositingOptionsContainer" native="true">
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0" colspan="2">
<item row="1" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Common Settings</string>
@ -225,6 +225,49 @@
</layout>
</widget>
</item>
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Compositing State</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="compositingStateIcon">
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="compositingStateLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="compositingStateButton">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>

View File

@ -38,6 +38,9 @@
<method name="circulateDesktopApplications"/>
<signal name="reloadConfig"/>
<signal name="reinitCompositing"/>
<signal name="compositingToggled">
<arg name="active" type="b" direction="out"/>
</signal>
<method name="loadEffect">
<arg name="name" type="s" direction="in"/>
</method>

View File

@ -644,6 +644,9 @@ class Workspace : public QObject, public KDecorationDefines
protected:
bool keyPressMouseEmulation( XKeyEvent& ev );
Q_SIGNALS:
Q_SCRIPTABLE void compositingToggled( bool active );
private:
void init();
void initShortcuts();