mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Block changes to selection during resize and tiling
This commit is contained in:
parent
000b6713b1
commit
9c2ed5ad92
@ -116,7 +116,6 @@ RiuMainWindow::RiuMainWindow()
|
|||||||
, m_pvtPlotPanel(nullptr)
|
, m_pvtPlotPanel(nullptr)
|
||||||
, m_mohrsCirclePlot(nullptr)
|
, m_mohrsCirclePlot(nullptr)
|
||||||
, m_windowMenu(nullptr)
|
, m_windowMenu(nullptr)
|
||||||
, m_blockSlotSubWindowActivated(false)
|
|
||||||
, m_holoLensToolBar(nullptr)
|
, m_holoLensToolBar(nullptr)
|
||||||
{
|
{
|
||||||
m_mdiArea = new RiuMdiArea;
|
m_mdiArea = new RiuMdiArea;
|
||||||
@ -1115,9 +1114,9 @@ RiuMessagePanel* RiuMainWindow::messagePanel()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RiuMainWindow::removeViewer(QWidget* viewer)
|
void RiuMainWindow::removeViewer(QWidget* viewer)
|
||||||
{
|
{
|
||||||
m_blockSlotSubWindowActivated = true;
|
setBlockSlotSubWindowActivated(true);
|
||||||
m_mdiArea->removeSubWindow(findMdiSubWindow(viewer));
|
m_mdiArea->removeSubWindow(findMdiSubWindow(viewer));
|
||||||
m_blockSlotSubWindowActivated = false;
|
setBlockSlotSubWindowActivated(false);
|
||||||
if (subWindowsAreTiled())
|
if (subWindowsAreTiled())
|
||||||
{
|
{
|
||||||
tileSubWindows();
|
tileSubWindows();
|
||||||
@ -1245,7 +1244,7 @@ void RiuMainWindow::slotViewFromBelow()
|
|||||||
void RiuMainWindow::slotSubWindowActivated(QMdiSubWindow* subWindow)
|
void RiuMainWindow::slotSubWindowActivated(QMdiSubWindow* subWindow)
|
||||||
{
|
{
|
||||||
if (!subWindow) return;
|
if (!subWindow) return;
|
||||||
if (m_blockSlotSubWindowActivated) return;
|
if (blockSlotSubWindowActivated()) return;
|
||||||
|
|
||||||
RimProject* proj = RiaApplication::instance()->project();
|
RimProject* proj = RiaApplication::instance()->project();
|
||||||
if (!proj) return;
|
if (!proj) return;
|
||||||
@ -1353,12 +1352,12 @@ void RiuMainWindow::slotSubWindowActivated(QMdiSubWindow* subWindow)
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RiuMainWindow::setActiveViewer(QWidget* viewer)
|
void RiuMainWindow::setActiveViewer(QWidget* viewer)
|
||||||
{
|
{
|
||||||
m_blockSlotSubWindowActivated = true;
|
setBlockSlotSubWindowActivated(true);
|
||||||
|
|
||||||
QMdiSubWindow* swin = findMdiSubWindow(viewer);
|
QMdiSubWindow* swin = findMdiSubWindow(viewer);
|
||||||
if (swin) m_mdiArea->setActiveSubWindow(swin);
|
if (swin) m_mdiArea->setActiveSubWindow(swin);
|
||||||
|
|
||||||
m_blockSlotSubWindowActivated = false;
|
setBlockSlotSubWindowActivated(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -2040,19 +2039,22 @@ void RiuMainWindow::tileSubWindows()
|
|||||||
// Based on workaround described here
|
// Based on workaround described here
|
||||||
// https://forum.qt.io/topic/50053/qmdiarea-tilesubwindows-always-places-widgets-in-activationhistoryorder-in-subwindowview-mode
|
// https://forum.qt.io/topic/50053/qmdiarea-tilesubwindows-always-places-widgets-in-activationhistoryorder-in-subwindowview-mode
|
||||||
|
|
||||||
|
bool prevActivationBlock = blockSlotSubWindowActivated();
|
||||||
// Force activation order so they end up in the order of the loop.
|
// Force activation order so they end up in the order of the loop.
|
||||||
m_mdiArea->setActivationOrder(QMdiArea::ActivationHistoryOrder);
|
m_mdiArea->setActivationOrder(QMdiArea::ActivationHistoryOrder);
|
||||||
QMdiSubWindow* a = m_mdiArea->activeSubWindow();
|
QMdiSubWindow* a = m_mdiArea->activeSubWindow();
|
||||||
|
|
||||||
|
setBlockSlotSubWindowActivated(true);
|
||||||
for (QMdiSubWindow* subWindow : windowList)
|
for (QMdiSubWindow* subWindow : windowList)
|
||||||
{
|
{
|
||||||
m_mdiArea->setActiveSubWindow(subWindow);
|
m_mdiArea->setActiveSubWindow(subWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_mdiArea->tileSubWindows();
|
m_mdiArea->tileSubWindows();
|
||||||
|
|
||||||
// Set back the original activation order to avoid messing with the standard ordering
|
// Set back the original activation order to avoid messing with the standard ordering
|
||||||
m_mdiArea->setActivationOrder(currentActivationOrder);
|
m_mdiArea->setActivationOrder(currentActivationOrder);
|
||||||
m_mdiArea->setActiveSubWindow(a);
|
m_mdiArea->setActiveSubWindow(a);
|
||||||
|
setBlockSlotSubWindowActivated(prevActivationBlock);
|
||||||
|
|
||||||
storeSubWindowTiling(true);
|
storeSubWindowTiling(true);
|
||||||
}
|
}
|
||||||
|
@ -270,5 +270,4 @@ private:
|
|||||||
|
|
||||||
std::vector<QPointer<QDockWidget> > m_additionalProjectViews;
|
std::vector<QPointer<QDockWidget> > m_additionalProjectViews;
|
||||||
|
|
||||||
bool m_blockSlotSubWindowActivated;
|
|
||||||
};
|
};
|
||||||
|
@ -42,6 +42,7 @@ RiuMainWindowBase::RiuMainWindowBase()
|
|||||||
: m_projectTreeView(nullptr)
|
: m_projectTreeView(nullptr)
|
||||||
, m_allowActiveViewChangeFromSelection(true)
|
, m_allowActiveViewChangeFromSelection(true)
|
||||||
, m_showFirstVisibleWindowMaximized(true)
|
, m_showFirstVisibleWindowMaximized(true)
|
||||||
|
, m_blockSlotSubWindowActivated(false)
|
||||||
{
|
{
|
||||||
setDockNestingEnabled(true);
|
setDockNestingEnabled(true);
|
||||||
}
|
}
|
||||||
@ -146,6 +147,22 @@ void RiuMainWindowBase::enableShowFirstVisibleMdiWindowMaximized(bool enable)
|
|||||||
m_showFirstVisibleWindowMaximized = enable;
|
m_showFirstVisibleWindowMaximized = enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RiuMainWindowBase::setBlockSlotSubWindowActivated(bool block)
|
||||||
|
{
|
||||||
|
m_blockSlotSubWindowActivated = block;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
bool RiuMainWindowBase::blockSlotSubWindowActivated() const
|
||||||
|
{
|
||||||
|
return m_blockSlotSubWindowActivated;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -69,6 +69,9 @@ public:
|
|||||||
virtual void clearWindowTiling() = 0;
|
virtual void clearWindowTiling() = 0;
|
||||||
virtual bool subWindowsAreTiled() const = 0;
|
virtual bool subWindowsAreTiled() const = 0;
|
||||||
|
|
||||||
|
void setBlockSlotSubWindowActivated(bool block);
|
||||||
|
bool blockSlotSubWindowActivated() const;
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void slotDockWidgetToggleViewActionTriggered();
|
void slotDockWidgetToggleViewActionTriggered();
|
||||||
void addViewerToMdiArea(QMdiArea* mdiArea, QWidget* viewer, const QPoint& subWindowPos, const QSize& subWindowSize);
|
void addViewerToMdiArea(QMdiArea* mdiArea, QWidget* viewer, const QPoint& subWindowPos, const QSize& subWindowSize);
|
||||||
@ -82,4 +85,6 @@ private:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_showFirstVisibleWindowMaximized;
|
bool m_showFirstVisibleWindowMaximized;
|
||||||
|
bool m_blockSlotSubWindowActivated;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -57,6 +57,9 @@ void RiuMdiArea::resizeEvent(QResizeEvent* resizeEvent)
|
|||||||
riuWindow->blockTilingChanges(true);
|
riuWindow->blockTilingChanges(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RiuMainWindowBase* mainWindow = dynamic_cast<RiuMainWindowBase*>(window());
|
||||||
|
mainWindow->setBlockSlotSubWindowActivated(true);
|
||||||
|
|
||||||
// Workaround for Qt bug #51761: https://bugreports.qt.io/browse/QTBUG-51761
|
// Workaround for Qt bug #51761: https://bugreports.qt.io/browse/QTBUG-51761
|
||||||
// Set the first window to be the active window then perform resize event and set back.
|
// Set the first window to be the active window then perform resize event and set back.
|
||||||
auto a = activeSubWindow();
|
auto a = activeSubWindow();
|
||||||
@ -67,6 +70,8 @@ void RiuMdiArea::resizeEvent(QResizeEvent* resizeEvent)
|
|||||||
|
|
||||||
setActiveSubWindow(a);
|
setActiveSubWindow(a);
|
||||||
|
|
||||||
|
mainWindow->setBlockSlotSubWindowActivated(false);
|
||||||
|
|
||||||
for (auto subWindow : subWindowList())
|
for (auto subWindow : subWindowList())
|
||||||
{
|
{
|
||||||
auto riuWindow = dynamic_cast<RiuMdiSubWindow*>(subWindow);
|
auto riuWindow = dynamic_cast<RiuMdiSubWindow*>(subWindow);
|
||||||
|
Loading…
Reference in New Issue
Block a user