From d1b6b7be7d5bc7754a143b424295a267bbdafdbd Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sun, 22 Dec 2013 03:17:30 -0600 Subject: Repair performance regression accidentally introduced with new style API --- src/kernel/qobject.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'src/kernel/qobject.cpp') diff --git a/src/kernel/qobject.cpp b/src/kernel/qobject.cpp index 403691e..d6be971 100644 --- a/src/kernel/qobject.cpp +++ b/src/kernel/qobject.cpp @@ -49,6 +49,9 @@ #include "qucomextra_p.h" #include "qptrvector.h" +// QStyleControlElementData +#include "qstyle.h" + #ifdef QT_THREAD_SUPPORT #include "qmutex.h" #include @@ -58,6 +61,33 @@ #include #include +// Keep in sync with duplicate definition in qcommonstyle.cpp +class QStyleControlElementDataPrivate { + public: + bool isQPushButton; + bool isQToolButton; + bool isQButton; + bool isQTabBar; + bool isQTitleBar; + bool isQToolBox; + bool isQToolBar; + bool isQProgressBar; + bool isQPopupMenu; + bool isQComboBox; + bool isQCheckBox; + bool isQRadioButton; + bool isQHeader; + bool isQScrollBar; + bool isQSlider; + bool isQDialogButtons; + bool isQSpinWidget; + bool isQListView; + bool isQDockWindow; + bool isQTabWidget; + bool isQFrame; + bool isQWidget; +}; + #ifndef QT_NO_USERDATA class QObjectPrivate : public QPtrVector #else @@ -70,14 +100,36 @@ public: ownThread = NULL; disableThreadPostedEvents = false; setAutoDelete( TRUE ); + controlElementData = NULL; + controlElementDataPrivate = NULL; + } + ~QObjectPrivate() { + delete controlElementData; + delete controlElementDataPrivate; } #endif QThread* ownThread; QMutex* senderObjectListMutex; QMutex* childObjectListMutex; bool disableThreadPostedEvents; + QStyleControlElementData* controlElementData; + QStyleControlElementDataPrivate* controlElementDataPrivate; }; +QStyleControlElementData* QObject::controlElementDataObject() { + if (!d->controlElementData) { + d->controlElementData = new QStyleControlElementData(); + } + return d->controlElementData; +} + +QStyleControlElementDataPrivate* QObject::controlElementDataPrivateObject() { + if (!d->controlElementDataPrivate) { + d->controlElementDataPrivate = new QStyleControlElementDataPrivate(); + } + return d->controlElementDataPrivate; +} + #if defined(QT_THREAD_SUPPORT) void QObject::moveToThread_helper(QThread *targetThread) -- cgit v1.2.3