make it possible to set the theme per-application, allowing krunner to share plasma's theme by default but amarok to have their own Fun(tm) too

svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=689180
This commit is contained in:
Aaron J. Seigo 2007-07-17 20:51:12 +00:00
parent cf889b289b
commit 9789d8b57f
2 changed files with 50 additions and 11 deletions

View File

@ -27,19 +27,20 @@ namespace Plasma
class Theme::Private class Theme::Private
{ {
public: public:
Private() Private()
: themeName( "default" ) : themeName( "default" )
{ {
} }
QString themeName; QString themeName;
QString app;
}; };
class ThemeSingleton class ThemeSingleton
{ {
public: public:
Theme self; Theme self;
}; };
K_GLOBAL_STATIC( ThemeSingleton, privateSelf ) K_GLOBAL_STATIC( ThemeSingleton, privateSelf )
@ -53,9 +54,7 @@ Theme::Theme(QObject* parent)
: QObject(parent), : QObject(parent),
d(new Private) d(new Private)
{ {
KConfig config( "plasmarc" ); settingsChanged();
KConfigGroup group( &config, "Theme" );
d->themeName = group.readEntry( "name", d->themeName );
} }
Theme::~Theme() Theme::~Theme()
@ -63,6 +62,30 @@ Theme::~Theme()
delete d; delete d;
} }
void Theme::setApplication(const QString &appname)
{
if (d->app != appname) {
d->app = appname;
settingsChanged();
}
}
void Theme::settingsChanged()
{
QString groupName = "Theme";
if (!d->app.isEmpty() && d->app != "plasma") {
groupName.append("-").append(d->app);
}
KSharedConfig::Ptr config = KSharedConfig::openConfig("plasmarc");
KConfigGroup group(config, groupName);
QString themeName = group.readEntry("name", d->themeName);
if (themeName != d->themeName) {
d->themeName = themeName;
emit changed();
}
}
QString Theme::themeName() const QString Theme::themeName() const
{ {
return d->themeName; return d->themeName;

16
theme.h
View File

@ -57,6 +57,15 @@ class PLASMA_EXPORT Theme : public QObject
explicit Theme( QObject* parent = 0 ); explicit Theme( QObject* parent = 0 );
~Theme(); ~Theme();
/**
* Sets the application the theme setting is associated with. This
* allows for individual applications that use libplasma to have the
* theme set independantly.
*
* @param appname name of the application
**/
void setApplication(const QString &appname);
/** /**
* @return the name of the theme. "default" is none set. * @return the name of the theme. "default" is none set.
*/ */
@ -78,6 +87,13 @@ class PLASMA_EXPORT Theme : public QObject
*/ */
void changed(); void changed();
public Q_SLOTS:
/**
* Notifies the Theme object that the theme settings have changed
* and should be read from the config file
**/
void settingsChanged();
private: private:
class Private; class Private;
Private* const d; Private* const d;