diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp
index 2600541502d..68b1f4204e6 100644
--- a/src/app/qgisapp.cpp
+++ b/src/app/qgisapp.cpp
@@ -1323,6 +1323,13 @@ QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, bool skipVersionCh
}
#endif
+ auto toggleRevert = [ = ]
+ {
+ mActionRevertProject->setEnabled( QgsProject::instance()->isDirty() &&!QgsProject::instance()->fileName().isEmpty() );
+ };
+ connect( QgsProject::instance(), &QgsProject::isDirtyChanged, mActionRevertProject, toggleRevert );
+ connect( QgsProject::instance(), &QgsProject::fileNameChanged, mActionRevertProject, toggleRevert );
+
} // QgisApp ctor
QgisApp::QgisApp()
@@ -1880,6 +1887,7 @@ void QgisApp::createActions()
connect( mActionNewProject, &QAction::triggered, this, [ = ] { fileNew(); } );
connect( mActionNewBlankProject, &QAction::triggered, this, &QgisApp::fileNewBlank );
connect( mActionOpenProject, &QAction::triggered, this, &QgisApp::fileOpen );
+ connect( mActionRevertProject, &QAction::triggered, this, &QgisApp::fileRevert );
connect( mActionSaveProject, &QAction::triggered, this, &QgisApp::fileSave );
connect( mActionCloseProject, &QAction::triggered, this, &QgisApp::fileClose );
connect( mActionSaveProjectAs, &QAction::triggered, this, &QgisApp::fileSaveAs );
@@ -5478,6 +5486,17 @@ void QgisApp::fileOpen()
}
}
+void QgisApp::fileRevert()
+{
+ if ( QMessageBox::question( this, tr( "Revert Project" ),
+ tr( "Are you sure you want to discard all unsaved changes the current project?" ),
+ QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) == QMessageBox::No )
+ return;
+
+ // re-open the current project
+ addProject( QgsProject::instance()->fileInfo().filePath() );
+}
+
void QgisApp::enableProjectMacros()
{
mTrustedMacros = true;
diff --git a/src/app/qgisapp.h b/src/app/qgisapp.h
index 39ecd805b6c..99d274d5ce7 100644
--- a/src/app/qgisapp.h
+++ b/src/app/qgisapp.h
@@ -1227,6 +1227,8 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
void saveMapAsPdf();
//! Open a project
void fileOpen();
+ //! Revert unsaved changes to a project
+ void fileRevert();
//! Create a new project
bool fileNew();
//! Create a new blank project (no template)
diff --git a/src/ui/qgisapp.ui b/src/ui/qgisapp.ui
index bea45fa417c..7164e87f136 100755
--- a/src/ui/qgisapp.ui
+++ b/src/ui/qgisapp.ui
@@ -46,6 +46,7 @@
+
@@ -2968,6 +2969,14 @@ Acts on currently active editable layer
Close Project
+
+
+ Revert Project…
+
+
+ Revert Project to Saved version
+
+