#7778 MainWindow: fix crash when reopening grid case

This commit is contained in:
Kristian Bendiksen 2022-05-18 14:35:24 +02:00
parent 837a0f208c
commit 9678b80feb
5 changed files with 32 additions and 15 deletions

View File

@ -189,6 +189,7 @@ RiaGuiApplication::RiaGuiApplication( int& argc, char** argv )
//--------------------------------------------------------------------------------------------------
RiaGuiApplication::~RiaGuiApplication()
{
m_mainWindow.clear();
}
//--------------------------------------------------------------------------------------------------
@ -923,7 +924,7 @@ RiuMainWindow* RiaGuiApplication::getOrCreateAndShowMainWindow()
m_mainWindow->loadWinGeoAndDockToolBarLayout();
}
return m_mainWindow.get();
return m_mainWindow;
}
//--------------------------------------------------------------------------------------------------
@ -931,7 +932,7 @@ RiuMainWindow* RiaGuiApplication::getOrCreateAndShowMainWindow()
//--------------------------------------------------------------------------------------------------
RiuMainWindow* RiaGuiApplication::mainWindow()
{
return m_mainWindow.get();
return m_mainWindow;
}
//--------------------------------------------------------------------------------------------------
@ -960,7 +961,7 @@ void RiaGuiApplication::createMainWindow()
caf::CmdExecCommandManager::instance()->enableUndoCommandSystem( true );
}
m_mainWindow = std::make_unique<RiuMainWindow>();
m_mainWindow = new RiuMainWindow;
QString platform = cvf::System::is64Bit() ? "(64bit)" : "(32bit)";
m_mainWindow->setWindowTitle( "ResInsight " + platform );
m_mainWindow->setDefaultWindowSize();
@ -1042,7 +1043,7 @@ RiuPlotMainWindow* RiaGuiApplication::mainPlotWindow()
RiuMainWindowBase* RiaGuiApplication::mainWindowByID( int mainWindowID )
{
if ( mainWindowID == 0 )
return m_mainWindow.get();
return m_mainWindow;
else if ( mainWindowID == 1 )
return m_mainPlotWindow.get();
else
@ -1451,7 +1452,7 @@ void RiaGuiApplication::applyGuiPreferences( const RiaPreferences*
}
QMessageBox::StandardButton reply;
reply = QMessageBox::question( m_mainWindow.get(),
reply = QMessageBox::question( m_mainWindow,
QString( "Apply %1 to Existing Views or Plots?" ).arg( listString ),
QString( "You have changed default %1 and have existing views or plots with "
"different settings.\n" )

View File

@ -166,7 +166,7 @@ private slots:
void onLastWindowClosed();
private:
std::unique_ptr<RiuMainWindow> m_mainWindow;
QPointer<RiuMainWindow> m_mainWindow;
std::unique_ptr<RiuPlotMainWindow> m_mainPlotWindow;
std::unique_ptr<RiuRecentFileActionProvider> m_recentFileActionProvider;

View File

@ -18,6 +18,8 @@
#include "RicShowMainWindowFeature.h"
#include "RiaGuiApplication.h"
#include "RiuMainWindow.h"
#include <QAction>
@ -31,19 +33,27 @@ void RicShowMainWindowFeature::showMainWindow()
{
RiuMainWindow* mainWnd = RiuMainWindow::instance();
if ( mainWnd->isMinimized() )
if ( mainWnd )
{
mainWnd->showNormal();
mainWnd->update();
if ( mainWnd->isMinimized() )
{
mainWnd->showNormal();
mainWnd->update();
}
else
{
mainWnd->show();
}
mainWnd->raise();
mainWnd->restoreDockWidgetVisibilities();
}
else
{
mainWnd->show();
RiaGuiApplication* app = RiaGuiApplication::instance();
app->getOrCreateAndShowMainWindow();
}
mainWnd->raise();
mainWnd->restoreDockWidgetVisibilities();
}
//--------------------------------------------------------------------------------------------------

View File

@ -121,6 +121,8 @@ RiuMainWindow::RiuMainWindow()
, m_windowMenu( nullptr )
, m_holoLensToolBar( nullptr )
{
setAttribute( Qt::WA_DeleteOnClose );
m_mdiArea = new RiuMdiArea( this );
connect( m_mdiArea, SIGNAL( subWindowActivated( QMdiSubWindow* ) ), SLOT( slotSubWindowActivated( QMdiSubWindow* ) ) );
setCentralWidget( m_mdiArea );
@ -171,6 +173,11 @@ RiuMainWindow::RiuMainWindow()
RiuMainWindow::~RiuMainWindow()
{
setPdmRoot( nullptr );
if ( m_pdmUiPropertyView )
{
m_pdmUiPropertyView->showProperties( nullptr );
}
}
//--------------------------------------------------------------------------------------------------

View File

@ -48,7 +48,6 @@ RiuMdiSubWindow::RiuMdiSubWindow( QWidget* parent /*= 0*/, Qt::WindowFlags flags
//--------------------------------------------------------------------------------------------------
RiuMdiSubWindow::~RiuMdiSubWindow()
{
RiuMainWindow::instance()->slotRefreshViewActions();
}
//--------------------------------------------------------------------------------------------------