forked from qt-creator/qt-creator
Fix display of build errors/warnings in status bar
We show a summary of errors/warnings with icons in the status bar, if
the "Progress Details" are toggled off. The change that fixed the size
of that details widget to a grid, to prevent constant relayouting of the
output pane buttons while indexing runs, broke the size of the build
result summary.
The size was adapted in
ProgressManagerPrivate::updateStatusDetailsWidget() but that is only
called when FutureProgress::setWidget is called. When the build manager
later makes the warning/error details visible, the size was left at the
minimum size of 20 pixels, leading to the widget being cut off.
Amends b4f2ac0dd4
Change-Id: Ia41cf3db7e4485dff4712412976c1d4f5dd315b2
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -226,6 +226,27 @@ using namespace Utils;
|
|||||||
|
|
||||||
static ProgressManagerPrivate *m_instance = nullptr;
|
static ProgressManagerPrivate *m_instance = nullptr;
|
||||||
|
|
||||||
|
const int RASTER = 20;
|
||||||
|
|
||||||
|
class StatusDetailsWidgetContainer : public QWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
StatusDetailsWidgetContainer(QWidget *parent)
|
||||||
|
: QWidget(parent)
|
||||||
|
{}
|
||||||
|
|
||||||
|
QSize sizeHint() const override
|
||||||
|
{
|
||||||
|
// make size fit on raster, to avoid flickering in status bar
|
||||||
|
// because the output pane buttons resize, if the widget changes a lot (like it is the case for
|
||||||
|
// the language server indexing)
|
||||||
|
const QSize preferredSize = layout()->sizeHint();
|
||||||
|
const int preferredWidth = preferredSize.width();
|
||||||
|
const int width = preferredWidth + (RASTER - preferredWidth % RASTER);
|
||||||
|
return {width, preferredSize.height()};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
ProgressManagerPrivate::ProgressManagerPrivate()
|
ProgressManagerPrivate::ProgressManagerPrivate()
|
||||||
: m_opacityEffect(new QGraphicsOpacityEffect(this))
|
: m_opacityEffect(new QGraphicsOpacityEffect(this))
|
||||||
{
|
{
|
||||||
@@ -273,13 +294,13 @@ void ProgressManagerPrivate::init()
|
|||||||
summaryProgressLayout->setContentsMargins(0, 0, 0, 2);
|
summaryProgressLayout->setContentsMargins(0, 0, 0, 2);
|
||||||
summaryProgressLayout->setSpacing(0);
|
summaryProgressLayout->setSpacing(0);
|
||||||
m_summaryProgressWidget->setLayout(summaryProgressLayout);
|
m_summaryProgressWidget->setLayout(summaryProgressLayout);
|
||||||
m_statusDetailsWidgetContainer = new QWidget(m_summaryProgressWidget);
|
auto statusDetailsWidgetContainer = new StatusDetailsWidgetContainer(m_summaryProgressWidget);
|
||||||
m_statusDetailsWidgetLayout = new QHBoxLayout(m_statusDetailsWidgetContainer);
|
m_statusDetailsWidgetLayout = new QHBoxLayout(statusDetailsWidgetContainer);
|
||||||
m_statusDetailsWidgetLayout->setContentsMargins(0, 0, 0, 0);
|
m_statusDetailsWidgetLayout->setContentsMargins(0, 0, 0, 0);
|
||||||
m_statusDetailsWidgetLayout->setSpacing(0);
|
m_statusDetailsWidgetLayout->setSpacing(0);
|
||||||
m_statusDetailsWidgetLayout->addStretch(1);
|
m_statusDetailsWidgetLayout->addStretch(1);
|
||||||
m_statusDetailsWidgetContainer->setLayout(m_statusDetailsWidgetLayout);
|
statusDetailsWidgetContainer->setLayout(m_statusDetailsWidgetLayout);
|
||||||
summaryProgressLayout->addWidget(m_statusDetailsWidgetContainer);
|
summaryProgressLayout->addWidget(statusDetailsWidgetContainer);
|
||||||
m_summaryProgressBar = new ProgressBar(m_summaryProgressWidget);
|
m_summaryProgressBar = new ProgressBar(m_summaryProgressWidget);
|
||||||
m_summaryProgressBar->setMinimumWidth(70);
|
m_summaryProgressBar->setMinimumWidth(70);
|
||||||
m_summaryProgressBar->setTitleVisible(false);
|
m_summaryProgressBar->setTitleVisible(false);
|
||||||
@@ -616,8 +637,6 @@ void ProgressManagerPrivate::updateVisibilityWithDelay()
|
|||||||
QTimer::singleShot(150, this, &ProgressManagerPrivate::updateVisibility);
|
QTimer::singleShot(150, this, &ProgressManagerPrivate::updateVisibility);
|
||||||
}
|
}
|
||||||
|
|
||||||
const int RASTER = 20;
|
|
||||||
|
|
||||||
void ProgressManagerPrivate::updateStatusDetailsWidget()
|
void ProgressManagerPrivate::updateStatusDetailsWidget()
|
||||||
{
|
{
|
||||||
QWidget *candidateWidget = nullptr;
|
QWidget *candidateWidget = nullptr;
|
||||||
@@ -645,15 +664,6 @@ void ProgressManagerPrivate::updateStatusDetailsWidget()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// make size fit on raster, to avoid flickering in status bar
|
|
||||||
// because the output pane buttons resize, if the widget changes a lot (like it is the case for
|
|
||||||
// the language server indexing)
|
|
||||||
if (candidateWidget) {
|
|
||||||
const int preferredWidth = candidateWidget->sizeHint().width();
|
|
||||||
const int width = preferredWidth + (RASTER - preferredWidth % RASTER);
|
|
||||||
m_statusDetailsWidgetContainer->setFixedWidth(width);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (candidateWidget == m_currentStatusDetailsWidget)
|
if (candidateWidget == m_currentStatusDetailsWidget)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
@@ -101,7 +101,6 @@ private:
|
|||||||
StatusBarWidget *m_statusBarWidgetContainer;
|
StatusBarWidget *m_statusBarWidgetContainer;
|
||||||
QWidget *m_statusBarWidget;
|
QWidget *m_statusBarWidget;
|
||||||
QWidget *m_summaryProgressWidget;
|
QWidget *m_summaryProgressWidget;
|
||||||
QWidget *m_statusDetailsWidgetContainer = nullptr;
|
|
||||||
QHBoxLayout *m_statusDetailsWidgetLayout = nullptr;
|
QHBoxLayout *m_statusDetailsWidgetLayout = nullptr;
|
||||||
QWidget *m_currentStatusDetailsWidget = nullptr;
|
QWidget *m_currentStatusDetailsWidget = nullptr;
|
||||||
QPointer<FutureProgress> m_currentStatusDetailsProgress;
|
QPointer<FutureProgress> m_currentStatusDetailsProgress;
|
||||||
|
|||||||
Reference in New Issue
Block a user