From 2a02ac7d02790c69a63ee79e2fac4e94b9165531 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Sat, 21 Nov 2009 22:50:22 +0000 Subject: [PATCH] Let KMetaDataWidget and all the child widgets respect the foreground role that might be set by the client. This allows KMetaDataWidget to get embedded inside a tooltip having correct tooltip colors. svn path=/trunk/KDE/kdebase/apps/; revision=1052509 --- src/panels/information/kcommentwidget.cpp | 9 +++++ src/panels/information/kcommentwidget_p.h | 3 ++ src/panels/information/kmetadatawidget.cpp | 46 ++++++++++++++++------ src/panels/information/kmetadatawidget.h | 3 ++ src/panels/information/ktaggingwidget.cpp | 9 +++++ src/panels/information/ktaggingwidget_p.h | 3 ++ 6 files changed, 60 insertions(+), 13 deletions(-) diff --git a/src/panels/information/kcommentwidget.cpp b/src/panels/information/kcommentwidget.cpp index c1f7ab757..408e6a873 100644 --- a/src/panels/information/kcommentwidget.cpp +++ b/src/panels/information/kcommentwidget.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -87,6 +88,14 @@ bool KCommentWidget::isReadOnly() const return m_readOnly; } +bool KCommentWidget::event(QEvent* event) +{ + if (event->type() == QEvent::Polish) { + m_label->setForegroundRole(foregroundRole()); + } + return QWidget::event(event); +} + void KCommentWidget::slotLinkActivated(const QString& link) { KDialog dialog(this, Qt::Dialog); diff --git a/src/panels/information/kcommentwidget_p.h b/src/panels/information/kcommentwidget_p.h index cd895223f..b40fa71bc 100644 --- a/src/panels/information/kcommentwidget_p.h +++ b/src/panels/information/kcommentwidget_p.h @@ -50,6 +50,9 @@ public: signals: void commentChanged(const QString& comment); +protected: + virtual bool event(QEvent* event); + private slots: void slotLinkActivated(const QString& link); diff --git a/src/panels/information/kmetadatawidget.cpp b/src/panels/information/kmetadatawidget.cpp index 7109fd282..848a4c55a 100644 --- a/src/panels/information/kmetadatawidget.cpp +++ b/src/panels/information/kmetadatawidget.cpp @@ -26,6 +26,7 @@ #include #include +#include #include #include #include @@ -177,12 +178,6 @@ KMetaDataWidget::Private::Private(KMetaDataWidget* parent) : m_ownerInfo = new QLabel(parent); m_permissionsInfo = new QLabel(parent); - addRow(new QLabel(i18nc("@label", "Type:"), parent), m_typeInfo); - addRow(m_sizeLabel, m_sizeInfo); - addRow(new QLabel(i18nc("@label", "Modified:"), parent), m_modifiedInfo); - addRow(new QLabel(i18nc("@label", "Owner:"), parent), m_ownerInfo); - addRow(new QLabel(i18nc("@label", "Permissions:"), parent), m_permissionsInfo); - #ifdef HAVE_NEPOMUK m_nepomukActivated = (Nepomuk::ResourceManager::instance()->init() == 0); if (m_nepomukActivated) { @@ -198,15 +193,10 @@ KMetaDataWidget::Private::Private(KMetaDataWidget* parent) : m_commentWidget = new KCommentWidget(parent); connect(m_commentWidget, SIGNAL(commentChanged(const QString&)), q, SLOT(slotCommentChanged(const QString&))); - - addRow(new QLabel(i18nc("@label", "Rating:"), parent), m_ratingWidget); - addRow(new QLabel(i18nc("@label", "Tags:"), parent), m_taggingWidget); - addRow(new QLabel(i18nc("@label", "Comment:"), parent), m_commentWidget); } #endif initMetaInfoSettings(); - updateRowsVisibility(); } KMetaDataWidget::Private::~Private() @@ -230,14 +220,17 @@ void KMetaDataWidget::Private::addRow(QLabel* label, QWidget* infoWidget) const QFont smallFont = KGlobalSettings::smallestReadableFont(); // use a brighter color for the label and a small font size QPalette palette = label->palette(); - QColor textColor = palette.color(QPalette::Text); + const QPalette::ColorRole role = q->foregroundRole(); + QColor textColor = palette.color(role); textColor.setAlpha(128); - palette.setColor(QPalette::WindowText, textColor); + palette.setColor(role, textColor); label->setPalette(palette); + label->setForegroundRole(role); label->setFont(smallFont); label->setWordWrap(true); label->setAlignment(Qt::AlignTop | Qt::AlignRight); + infoWidget->setForegroundRole(role); QLabel* infoLabel = qobject_cast(infoWidget); if (infoLabel != 0) { infoLabel->setFont(smallFont); @@ -642,4 +635,31 @@ QSize KMetaDataWidget::sizeHint() const return QSize(fixedWidth, height); } +bool KMetaDataWidget::event(QEvent* event) +{ + if (event->type() == QEvent::Polish) { + // The adding of rows is not done in the constructor. This allows the + // client of KMetaDataWidget to set a proper foreground role which + // will be respected by the rows. + + d->addRow(new QLabel(i18nc("@label", "Type:"), this), d->m_typeInfo); + d->addRow(d->m_sizeLabel, d->m_sizeInfo); + d->addRow(new QLabel(i18nc("@label", "Modified:"), this), d->m_modifiedInfo); + d->addRow(new QLabel(i18nc("@label", "Owner:"), this), d->m_ownerInfo); + d->addRow(new QLabel(i18nc("@label", "Permissions:"), this), d->m_permissionsInfo); + + #ifdef HAVE_NEPOMUK + if (d->m_nepomukActivated) { + d->addRow(new QLabel(i18nc("@label", "Rating:"), this), d->m_ratingWidget); + d->addRow(new QLabel(i18nc("@label", "Tags:"), this), d->m_taggingWidget); + d->addRow(new QLabel(i18nc("@label", "Comment:"), this), d->m_commentWidget); + } + #endif + + d->updateRowsVisibility(); + } + + return QWidget::event(event); +} + #include "kmetadatawidget.moc" diff --git a/src/panels/information/kmetadatawidget.h b/src/panels/information/kmetadatawidget.h index 2618913b8..060b82c73 100644 --- a/src/panels/information/kmetadatawidget.h +++ b/src/panels/information/kmetadatawidget.h @@ -125,6 +125,9 @@ public: Q_SIGNALS: void urlActivated(const KUrl& url); +protected: + virtual bool event(QEvent* event); + private: class Private; Private* d; diff --git a/src/panels/information/ktaggingwidget.cpp b/src/panels/information/ktaggingwidget.cpp index 1dff1278f..d33b9f6de 100644 --- a/src/panels/information/ktaggingwidget.cpp +++ b/src/panels/information/ktaggingwidget.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include @@ -97,6 +98,14 @@ bool KTaggingWidget::isReadOnly() const return m_readOnly; } +bool KTaggingWidget::event(QEvent* event) +{ + if (event->type() == QEvent::Polish) { + m_label->setForegroundRole(foregroundRole()); + } + return QWidget::event(event); +} + void KTaggingWidget::slotLinkActivated(const QString& link) { Q_UNUSED(link); diff --git a/src/panels/information/ktaggingwidget_p.h b/src/panels/information/ktaggingwidget_p.h index c82df8735..1a4589a62 100644 --- a/src/panels/information/ktaggingwidget_p.h +++ b/src/panels/information/ktaggingwidget_p.h @@ -50,6 +50,9 @@ public: signals: void tagsChanged(const QList& tags); +protected: + virtual bool event(QEvent* event); + private slots: void slotLinkActivated(const QString& link); -- 2.47.3