summaryrefslogtreecommitdiffstats
path: root/src/widgets/kernel
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2012-02-21 14:45:07 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-23 10:24:50 +0100
commita6e20e4874d3f46f311625e471f1b7fbc64964b2 (patch)
tree2d659ae6b41b090aaf501dda65c20e36f4a97f40 /src/widgets/kernel
parentd2f65aa470fe30849a01380e4a50e8a4ebbce07e (diff)
Handle theme change in QApplication/QGuiApplication.
Re-initialize palette and fonts. Change-Id: Ib312747886a31e8370f8d99536d52cbcf8afe8a4 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
Diffstat (limited to 'src/widgets/kernel')
-rw-r--r--src/widgets/kernel/qapplication.cpp33
-rw-r--r--src/widgets/kernel/qapplication_p.h4
2 files changed, 29 insertions, 8 deletions
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index 134b1809bb..650d4af38b 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -128,6 +128,21 @@ Q_CORE_EXPORT void qt_call_post_routines();
QApplicationPrivate *QApplicationPrivate::self = 0;
+static void initSystemPalette()
+{
+ if (!QApplicationPrivate::sys_pal)
+ if (const QPalette *themePalette = QGuiApplicationPrivate::platformTheme()->palette())
+ QApplicationPrivate::setSystemPalette(*themePalette);
+ if (!QApplicationPrivate::sys_pal && QApplicationPrivate::app_style)
+ QApplicationPrivate::setSystemPalette(QApplicationPrivate::app_style->standardPalette());
+}
+
+static void clearSystemPalette()
+{
+ delete QApplicationPrivate::sys_pal;
+ QApplicationPrivate::sys_pal = 0;
+}
+
#ifdef Q_OS_WINCE
int QApplicationPrivate::autoMaximizeThreshold = -1;
bool QApplicationPrivate::autoSipEnabled = false;
@@ -365,6 +380,7 @@ QString QApplicationPrivate::styleSheet; // default application styles
QPointer<QWidget> QApplicationPrivate::leaveAfterRelease = 0;
int QApplicationPrivate::app_cspec = QApplication::NormalColor;
+
QPalette *QApplicationPrivate::sys_pal = 0; // default system palette
QPalette *QApplicationPrivate::set_pal = 0; // default palette set by programmer
@@ -783,8 +799,7 @@ QApplication::~QApplication()
delete QApplicationPrivate::app_pal;
QApplicationPrivate::app_pal = 0;
- delete QApplicationPrivate::sys_pal;
- QApplicationPrivate::sys_pal = 0;
+ clearSystemPalette();
delete QApplicationPrivate::set_pal;
QApplicationPrivate::set_pal = 0;
app_palettes()->clear();
@@ -1084,11 +1099,8 @@ QStyle *QApplication::style()
// take ownership of the style
QApplicationPrivate::app_style->setParent(qApp);
- if (!QApplicationPrivate::sys_pal)
- if (const QPalette *themePalette = QGuiApplicationPrivate::platformTheme()->palette())
- QApplicationPrivate::setSystemPalette(*themePalette);
- if (!QApplicationPrivate::sys_pal)
- QApplicationPrivate::setSystemPalette(QApplicationPrivate::app_style->standardPalette());
+ initSystemPalette();
+
if (QApplicationPrivate::set_pal) // repolish set palette with the new style
QApplication::setPalette(*QApplicationPrivate::set_pal);
@@ -4631,6 +4643,13 @@ void QApplicationPrivate::translateTouchCancel(QTouchDevice *device, ulong times
}
}
+void QApplicationPrivate::notifyThemeChanged()
+{
+ QGuiApplicationPrivate::notifyThemeChanged();
+ clearSystemPalette();
+ initSystemPalette();
+}
+
#ifndef QT_NO_GESTURES
QGestureManager* QGestureManager::instance()
{
diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h
index e728868182..7a880986bf 100644
--- a/src/widgets/kernel/qapplication_p.h
+++ b/src/widgets/kernel/qapplication_p.h
@@ -260,7 +260,9 @@ public:
static QPalette *sys_pal;
static QPalette *set_pal;
-private:
+protected:
+ void notifyThemeChanged();
+
public:
static QFont *sys_font;
static QFont *set_font;