diff options
author | Qt Continuous Integration System <qt-info@nokia.com> | 2010-03-05 03:24:03 (GMT) |
---|---|---|
committer | Qt Continuous Integration System <qt-info@nokia.com> | 2010-03-05 03:24:03 (GMT) |
commit | a2e7ab8926c5e8a4c89bb017bbcacfcfbf43ef25 (patch) | |
tree | eadedfd873d7684bdec5f4d793ddd96a96beb897 /src/gui/styles/qgtkstyle_p.h | |
parent | 1cdaca2823a7c09f377ab205e6424e35febcbf2c (diff) | |
parent | ca89d8dc944e7af886c3b31c9d23c8957e5667ab (diff) | |
download | Qt-a2e7ab8926c5e8a4c89bb017bbcacfcfbf43ef25.zip Qt-a2e7ab8926c5e8a4c89bb017bbcacfcfbf43ef25.tar.gz Qt-a2e7ab8926c5e8a4c89bb017bbcacfcfbf43ef25.tar.bz2 |
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into 4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1: (72 commits)
Doc: Enabled the context menu in the spreadsheet demo.
Updated URLs.
Doc: Applied suggestion for an improvement to the foreach documentation.
Doc: Added a note about the lack of standard file copy/paste on X11.
Doc: Fixed the row number for a widget in two parts of the tutorial.
Doc: Fixed typos.
Reduce compiling time of QScriptValue autotest suite on Windows.
Optimize QScriptValue autotest generator.
Set database write behavior to synchronous=OFF and increase page cache.
doc: Fixed some qdoc errors.
Setting ImhHiddenText for NoEcho line edits is not 100% correct, but still way better than fully visible text.
Allow building documentation without all of Qt
Added a documentation for the new enum value in gesture api.
Remove the OBJECTS_DIR variable assignment from some projets in Qt.
Fix compile
qmake/MinGw: Link statically for Qt Creator to be able to detect it.
Enable two fast path for blend_tiled_rgb565
Avoid QString reallocation for smallcaps fonts in Itemizer::generate()
Make QLabel::text a reloadable property
remove non wifi interfaces from being handled.
...
Diffstat (limited to 'src/gui/styles/qgtkstyle_p.h')
-rw-r--r-- | src/gui/styles/qgtkstyle_p.h | 78 |
1 files changed, 69 insertions, 9 deletions
diff --git a/src/gui/styles/qgtkstyle_p.h b/src/gui/styles/qgtkstyle_p.h index db5b9b9..6ee7904 100644 --- a/src/gui/styles/qgtkstyle_p.h +++ b/src/gui/styles/qgtkstyle_p.h @@ -56,6 +56,10 @@ #include <QtCore/qglobal.h> #if !defined(QT_NO_STYLE_GTK) +#include <QtCore/qstring.h> +#include <QtCore/qstringbuilder.h> +#include <QtCore/qcoreapplication.h> + #include <QtGui/QFileDialog> #include <QtGui/QGtkStyle> @@ -72,6 +76,54 @@ typedef unsigned long XID; #define QLS(x) QLatin1String(x) +QT_BEGIN_NAMESPACE + +// ### Qt 4.7 - merge with QLatin1Literal +class QHashableLatin1Literal +{ +public: + int size() const { return m_size; } + const char *data() const { return m_data; } + + template <int N> + QHashableLatin1Literal(const char (&str)[N]) + : m_size(N - 1), m_data(str) {} + + QHashableLatin1Literal(const QHashableLatin1Literal &other) + : m_size(other.m_size), m_data(other.m_data) + {} + + QHashableLatin1Literal &operator=(const QHashableLatin1Literal &other) + { + if (this == &other) + return *this; + *const_cast<int *>(&m_size) = other.m_size; + *const_cast<char **>(&m_data) = const_cast<char *>(other.m_data); + return *this; + } + + QString toString() const { return QString::fromLatin1(m_data, m_size); } + + static QHashableLatin1Literal fromData(const char *str) + { + return QHashableLatin1Literal(str, qstrlen(str)); + } + +private: + QHashableLatin1Literal(const char *str, int length) + : m_size(length), m_data(str) + {} + + const int m_size; + const char *m_data; +}; + +bool operator==(const QHashableLatin1Literal &l1, const QHashableLatin1Literal &l2); +inline bool operator!=(const QHashableLatin1Literal &l1, const QHashableLatin1Literal &l2) { return !operator==(l1, l2); } +uint qHash(const QHashableLatin1Literal &key); + +QT_END_NAMESPACE + class GConf; class GConfClient; @@ -252,7 +304,6 @@ typedef char* (*Ptr_gnome_icon_lookup_sync) ( GnomeIconLookupFlags flags, GnomeIconLookupResultFlags *result); - class QGtkStylePrivate : public QCleanlooksStylePrivate { Q_DECLARE_PUBLIC(QGtkStyle) @@ -262,8 +313,8 @@ public: QGtkStyleFilter filter; - static GtkWidget* gtkWidget(const QString &path); - static GtkStyle* gtkStyle(const QString &path = QLatin1String("GtkWindow")); + static GtkWidget* gtkWidget(const QHashableLatin1Literal &path); + static GtkStyle* gtkStyle(const QHashableLatin1Literal &path = QHashableLatin1Literal("GtkWindow")); virtual void resolveGtk() const; virtual void initGtkMenu() const; @@ -418,17 +469,25 @@ public: static Ptr_gnome_icon_lookup_sync gnome_icon_lookup_sync; static Ptr_gnome_vfs_init gnome_vfs_init; - virtual QPalette gtkWidgetPalette(const QString >kWidgetName) const; + virtual QPalette gtkWidgetPalette(const QHashableLatin1Literal >kWidgetName) const; protected: - typedef QHash<QString, GtkWidget*> WidgetMap; + typedef QHash<QHashableLatin1Literal, GtkWidget*> WidgetMap; + + static inline void destroyWidgetMap() + { + cleanupGtkWidgets(); + delete widgetMap; + widgetMap = 0; + } static inline WidgetMap *gtkWidgetMap() { - static WidgetMap *map = 0; - if (!map) - map = new WidgetMap(); - return map; + if (!widgetMap) { + widgetMap = new WidgetMap(); + qAddPostRoutine(destroyWidgetMap); + } + return widgetMap; } static QStringList extract_filter(const QString &rawFilter); @@ -443,6 +502,7 @@ protected: private: static QList<QGtkStylePrivate *> instances; + static WidgetMap *widgetMap; friend class QGtkStyleUpdateScheduler; }; |