diff --git a/src/plugins/coreplugin/windowsupport.cpp b/src/plugins/coreplugin/windowsupport.cpp index 25ab34793c7..ad296e65819 100644 --- a/src/plugins/coreplugin/windowsupport.cpp +++ b/src/plugins/coreplugin/windowsupport.cpp @@ -15,8 +15,8 @@ #include #include +#include #include -#include #include #include #include @@ -106,11 +106,8 @@ bool WindowSupport::eventFilter(QObject *obj, QEvent *event) updateFullScreenAction(); } else if (event->type() == QEvent::WindowActivate) { m_windowList->setActiveWindow(m_window); - } else if (event->type() == QEvent::Hide) { - // minimized windows are hidden, but we still want to show them - m_windowList->setWindowVisible(m_window, m_window->isMinimized()); - } else if (event->type() == QEvent::Show) { - m_windowList->setWindowVisible(m_window, true); + } else if (event->type() == QEvent::Hide || event->type() == QEvent::Show) { + m_windowList->updateVisibility(m_window); } return false; } @@ -182,9 +179,9 @@ void WindowList::activateWindow(QAction *action) ICore::raiseWindow(m_windows.at(index)); } -void WindowList::updateTitle(QWidget *window) +void WindowList::updateTitle(QWidget *window, int i) { - int index = m_windows.indexOf(window); + const int index = i < 0 ? m_windows.indexOf(window) : i; QTC_ASSERT(index >= 0, return); QTC_ASSERT(index < m_windowActions.size(), return); QString title = window->windowTitle(); @@ -193,6 +190,19 @@ void WindowList::updateTitle(QWidget *window) m_windowActions.at(index)->setText(Utils::quoteAmpersands(title.trimmed())); } +void WindowList::updateVisibility(QWidget *window) +{ + updateVisibility(window, m_windows.indexOf(window)); +} + +void WindowList::updateVisibility(QWidget *window, int index) +{ + QTC_ASSERT(index >= 0, return); + QTC_ASSERT(index < m_windowActions.size(), return); + // minimized windows are hidden, but we still want to show them + m_windowActions.at(index)->setVisible(window->isVisible() || window->isMinimized()); +} + void WindowList::removeWindow(QWidget *window) { // remove window from list, @@ -207,8 +217,12 @@ void WindowList::removeWindow(QWidget *window) m_windows.removeOne(window); - for (int i = index; i < m_windows.size(); ++i) - updateTitle(m_windows.at(i)); + for (int i = index; i < m_windows.size(); ++i) { + QWidget *window = m_windows.at(i); + updateTitle(window, i); + updateVisibility(window, i); + } + setActiveWindow(QApplication::activeWindow()); } void WindowList::setActiveWindow(QWidget *window) @@ -217,13 +231,5 @@ void WindowList::setActiveWindow(QWidget *window) m_windowActions.at(i)->setChecked(m_windows.at(i) == window); } -void WindowList::setWindowVisible(QWidget *window, bool visible) -{ - int index = m_windows.indexOf(window); - QTC_ASSERT(index >= 0, return); - QTC_ASSERT(index < m_windowActions.size(), return); - m_windowActions.at(index)->setVisible(visible); -} - } // Internal } // Core diff --git a/src/plugins/coreplugin/windowsupport.h b/src/plugins/coreplugin/windowsupport.h index bfdc969ffb0..8b7eb026afd 100644 --- a/src/plugins/coreplugin/windowsupport.h +++ b/src/plugins/coreplugin/windowsupport.h @@ -24,11 +24,12 @@ public: void addWindow(QWidget *window); void removeWindow(QWidget *window); void setActiveWindow(QWidget *window); - void setWindowVisible(QWidget *window, bool visible); + void updateVisibility(QWidget *window); private: void activateWindow(QAction *action); - void updateTitle(QWidget *window); + void updateTitle(QWidget *window, int index = -1); + void updateVisibility(QWidget *window, int index); QMenu *m_dockMenu = nullptr; QList m_windows;