diff --git a/src/plugins/coreplugin/ioutputpane.h b/src/plugins/coreplugin/ioutputpane.h index edcdb9d2183..df033e76580 100644 --- a/src/plugins/coreplugin/ioutputpane.h +++ b/src/plugins/coreplugin/ioutputpane.h @@ -78,15 +78,16 @@ public: virtual void goToPrev() = 0; public slots: - void popup() { popup(true); } - void popup(bool withFocus) { emit showPage(withFocus); } + void popup() { popup(true, false); } + void popup(bool withFocus) { popup(withFocus, false); } + void popup(bool withFocus, bool ensureSizeHint) { emit showPage(withFocus, ensureSizeHint); } void hide() { emit hidePage(); } void toggle() { toggle(true); } void toggle(bool withFocusIfShown) { emit togglePage(withFocusIfShown); } void navigateStateChanged() { emit navigateStateUpdate(); } signals: - void showPage(bool withFocus); + void showPage(bool withFocus, bool ensureSizeHint); void hidePage(); void togglePage(bool withFocusIfShown); void navigateStateUpdate(); diff --git a/src/plugins/coreplugin/outputpane.cpp b/src/plugins/coreplugin/outputpane.cpp index 336e7bc6569..95543b0d7fb 100644 --- a/src/plugins/coreplugin/outputpane.cpp +++ b/src/plugins/coreplugin/outputpane.cpp @@ -143,6 +143,28 @@ bool OutputPanePlaceHolder::isMaximized() const return Internal::OutputPaneManager::instance()->isMaximized(); } +void OutputPanePlaceHolder::ensureSizeHintAsMinimum() +{ + if (!d->m_splitter) + return; + int idx = d->m_splitter->indexOf(this); + if (idx < 0) + return; + + QList sizes = d->m_splitter->sizes(); + Internal::OutputPaneManager *om = Internal::OutputPaneManager::instance(); + int minimum = (d->m_splitter->orientation() == Qt::Vertical + ? om->sizeHint().height() : om->sizeHint().width()); + int difference = minimum - sizes.at(idx); + if (difference <= 0) // is already larger + return; + for (int i = 0; i < sizes.count(); ++i) { + sizes[i] += difference / (sizes.count()-1); + } + sizes[idx] = minimum; + d->m_splitter->setSizes(sizes); +} + void OutputPanePlaceHolder::unmaximize() { if (Internal::OutputPaneManager::instance()->isMaximized()) diff --git a/src/plugins/coreplugin/outputpane.h b/src/plugins/coreplugin/outputpane.h index 5c4c7dc4132..b0dbf6af66d 100644 --- a/src/plugins/coreplugin/outputpane.h +++ b/src/plugins/coreplugin/outputpane.h @@ -64,6 +64,7 @@ public: void unmaximize(); bool isMaximized() const; + void ensureSizeHintAsMinimum(); private slots: void currentModeChanged(Core::IMode *); diff --git a/src/plugins/coreplugin/outputpanemanager.cpp b/src/plugins/coreplugin/outputpanemanager.cpp index edd1b61b8d9..0e3216f8b61 100644 --- a/src/plugins/coreplugin/outputpanemanager.cpp +++ b/src/plugins/coreplugin/outputpanemanager.cpp @@ -254,7 +254,7 @@ void OutputPaneManager::init() const int idx = m_outputWidgetPane->addWidget(outPane->outputWidget(this)); m_pageMap.insert(idx, outPane); - connect(outPane, SIGNAL(showPage(bool)), this, SLOT(showPage(bool))); + connect(outPane, SIGNAL(showPage(bool,bool)), this, SLOT(showPage(bool,bool))); connect(outPane, SIGNAL(hidePage()), this, SLOT(slotHide())); connect(outPane, SIGNAL(togglePage(bool)), this, SLOT(togglePage(bool))); connect(outPane, SIGNAL(navigateStateUpdate()), this, SLOT(updateNavigateState())); @@ -431,10 +431,12 @@ void OutputPaneManager::updateNavigateState() } // Slot connected to showPage signal of each page -void OutputPaneManager::showPage(bool focus) +void OutputPaneManager::showPage(bool focus, bool ensureSizeHint) { int idx = findIndexForPage(qobject_cast(sender())); showPage(idx, focus); + if (ensureSizeHint && OutputPanePlaceHolder::getCurrent()) + OutputPanePlaceHolder::getCurrent()->ensureSizeHintAsMinimum(); } void OutputPaneManager::showPage(int idx, bool focus) diff --git a/src/plugins/coreplugin/outputpanemanager.h b/src/plugins/coreplugin/outputpanemanager.h index 0f0423792a0..280a4703105 100644 --- a/src/plugins/coreplugin/outputpanemanager.h +++ b/src/plugins/coreplugin/outputpanemanager.h @@ -78,7 +78,7 @@ protected: private slots: void changePage(); - void showPage(bool focus); + void showPage(bool focus, bool ensureSizeHint); void togglePage(bool focus); void clearPage(); void buttonTriggered(); diff --git a/src/plugins/find/searchresultwindow.cpp b/src/plugins/find/searchresultwindow.cpp index f5e04a2ece4..27233ef9708 100644 --- a/src/plugins/find/searchresultwindow.cpp +++ b/src/plugins/find/searchresultwindow.cpp @@ -48,6 +48,7 @@ #include #include #include +#include #include static const char SETTINGSKEYSECTIONNAME[] = "SearchResults"; @@ -209,7 +210,10 @@ SearchResultWindow::SearchResultWindow(QWidget *newSearchPanel) d->m_widget = new QStackedWidget; d->m_widget->setWindowTitle(displayName()); - d->m_widget->addWidget(newSearchPanel); + QScrollArea *newSearchArea = new QScrollArea(d->m_widget); + newSearchArea->setFrameStyle(QFrame::NoFrame); + newSearchArea->setWidget(newSearchPanel); + d->m_widget->addWidget(newSearchArea); d->m_currentIndex = 0; d->m_expandCollapseButton = new QToolButton(d->m_widget); @@ -400,7 +404,7 @@ void SearchResultWindow::setTextEditorFont(const QFont &font) void SearchResultWindow::openNewSearchPanel() { d->setCurrentIndex(0); - popup(); + popup(true/*focus*/, true/*sizeHint*/); } /*!