From 2d70c2e2123c73ad8235ec1f06fd785f731dfdc7 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Fri, 7 Mar 2014 13:55:06 -0300 Subject: [PATCH] CodeAssist: Limit width of tooltips This is a workaround for black tooltips or even crahes when the nvidia driver is used. Task-number: QTCREATORBUG-11653 Change-Id: I4ddc09354a9956a55ac6b196a596f3eaeef13670 Reviewed-by: Daniel Teske --- .../codeassist/genericproposalwidget.cpp | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp index 839e26f31d9..5bc89f1dd7f 100644 --- a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp +++ b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp @@ -36,6 +36,7 @@ #include #include +#include #include #include @@ -150,13 +151,16 @@ class GenericProposalInfoFrame : public Utils::FakeToolTip { public: GenericProposalInfoFrame(QWidget *parent = 0) - : Utils::FakeToolTip(parent), m_label(new QLabel(this)) + : Utils::FakeToolTip(parent), m_label(new Utils::ElidingLabel(this)) { QVBoxLayout *layout = new QVBoxLayout(this); layout->setMargin(0); layout->setSpacing(0); layout->addWidget(m_label); + // Limit horizontal width + m_label->setSizePolicy(QSizePolicy::Fixed, m_label->sizePolicy().verticalPolicy()); + m_label->setForegroundRole(QPalette::ToolTipText); m_label->setBackgroundRole(QPalette::ToolTipBase); } @@ -166,6 +170,20 @@ public: m_label->setText(text); } + // Workaround QTCREATORBUG-11653 + void calculateMaximumWidth() + { + const QDesktopWidget *desktopWidget = QApplication::desktop(); + const int desktopWidth = desktopWidget->isVirtualDesktop() + ? desktopWidget->width() + : desktopWidget->availableGeometry(desktopWidget->primaryScreen()).width(); + const QMargins widgetMargins = contentsMargins(); + const QMargins layoutMargins = layout()->contentsMargins(); + const int margins = widgetMargins.left() + widgetMargins.right() + + layoutMargins.left() + layoutMargins.right(); + m_label->setMaximumWidth(desktopWidth - this->pos().x() - margins); + } + private: QLabel *m_label; }; @@ -296,6 +314,7 @@ void GenericProposalWidgetPrivate::maybeShowInfoTip() m_infoFrame->move(m_completionListView->infoFramePos()); m_infoFrame->setText(infoTip); + m_infoFrame->calculateMaximumWidth(); m_infoFrame->adjustSize(); m_infoFrame->show(); m_infoFrame->raise();