summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/widgets/kernel/qapplication.cpp21
-rw-r--r--src/widgets/kernel/qapplication_p.h7
2 files changed, 28 insertions, 0 deletions
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index b4c4ffe7c7..0b983e7a9d 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -146,6 +146,20 @@ static void clearSystemPalette()
QApplicationPrivate::sys_pal = 0;
}
+static QByteArray get_style_class_name()
+{
+ QScopedPointer<QStyle> s(QStyleFactory::create(QApplicationPrivate::desktopStyleKey()));
+ if (!s.isNull())
+ return s->metaObject()->className();
+ return QByteArray();
+}
+
+static QByteArray nativeStyleClassName()
+{
+ static QByteArray name = get_style_class_name();
+ return name;
+}
+
#ifdef Q_OS_WINCE
int QApplicationPrivate::autoMaximizeThreshold = -1;
bool QApplicationPrivate::autoSipEnabled = false;
@@ -372,6 +386,8 @@ void qt_init_tooltip_palette();
void qt_cleanup();
QStyle *QApplicationPrivate::app_style = 0; // default application style
+bool QApplicationPrivate::overrides_native_style = false; // whether native QApplication style is
+ // overridden, i.e. not native
QString QApplicationPrivate::styleOverride; // style override
#ifndef QT_NO_STYLE_STYLESHEET
@@ -997,6 +1013,8 @@ QStyle *QApplication::style()
Q_ASSERT(!"No styles available!");
return 0;
}
+ QApplicationPrivate::overrides_native_style =
+ app_style->objectName() != QApplicationPrivate::desktopStyleKey();
}
// take ownership of the style
QApplicationPrivate::app_style->setParent(qApp);
@@ -1061,6 +1079,9 @@ void QApplication::setStyle(QStyle *style)
QStyle *old = QApplicationPrivate::app_style; // save
+ QApplicationPrivate::overrides_native_style =
+ nativeStyleClassName() == QByteArray(style->metaObject()->className());
+
#ifndef QT_NO_STYLE_STYLESHEET
if (!QApplicationPrivate::styleSheet.isEmpty() && !qobject_cast<QStyleSheetStyle *>(style)) {
// we have a stylesheet already and a new style is being set
diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h
index 0284a613d4..d5efb62dda 100644
--- a/src/widgets/kernel/qapplication_p.h
+++ b/src/widgets/kernel/qapplication_p.h
@@ -150,6 +150,12 @@ public:
bool canQuit();
#endif
+ //style
+ static bool usesNativeStyle()
+ {
+ return !overrides_native_style;
+ }
+
bool notify_helper(QObject *receiver, QEvent * e);
void construct(
@@ -184,6 +190,7 @@ public:
static QSize app_strut;
static QWidgetList *popupWidgets;
static QStyle *app_style;
+ static bool overrides_native_style;
static int app_cspec;
static QPalette *sys_pal;
static QPalette *set_pal;