Lock project files when opening; open locked projects read-only
Also clean up an include-what-you-use problem Fixes https://gitlab.com/kicad/code/kicad/-/issues/8037
This commit is contained in:
parent
8ea18c0639
commit
c1573744be
|
@ -47,6 +47,7 @@
|
||||||
#include "sg/scenegraph.h"
|
#include "sg/scenegraph.h"
|
||||||
#include "plugins/3dapi/ifsg_api.h"
|
#include "plugins/3dapi/ifsg_api.h"
|
||||||
|
|
||||||
|
#include <common.h> // For ExpandEnvVarSubstitutions
|
||||||
#include <filename_resolver.h>
|
#include <filename_resolver.h>
|
||||||
#include <paths.h>
|
#include <paths.h>
|
||||||
#include <pgm_base.h>
|
#include <pgm_base.h>
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <wx/filename.h>
|
#include <wx/filename.h>
|
||||||
#include <wx/stdpaths.h>
|
#include <wx/stdpaths.h>
|
||||||
#include <wx/string.h>
|
#include <wx/string.h>
|
||||||
|
#include <wx/utils.h>
|
||||||
|
|
||||||
#include <kiplatform/environment.h>
|
#include <kiplatform/environment.h>
|
||||||
#include <paths.h>
|
#include <paths.h>
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <wx/debug.h>
|
#include <wx/debug.h>
|
||||||
#include <wx/dir.h>
|
#include <wx/dir.h>
|
||||||
#include <wx/filename.h>
|
#include <wx/filename.h>
|
||||||
|
#include <wx/snglinst.h>
|
||||||
#include <wx/stdpaths.h>
|
#include <wx/stdpaths.h>
|
||||||
#include <wx/utils.h>
|
#include <wx/utils.h>
|
||||||
|
|
||||||
|
@ -31,6 +32,7 @@
|
||||||
#include <gestfich.h>
|
#include <gestfich.h>
|
||||||
#include <kiplatform/environment.h>
|
#include <kiplatform/environment.h>
|
||||||
#include <kiway.h>
|
#include <kiway.h>
|
||||||
|
#include <lockfile.h>
|
||||||
#include <macros.h>
|
#include <macros.h>
|
||||||
#include <paths.h>
|
#include <paths.h>
|
||||||
#include <project.h>
|
#include <project.h>
|
||||||
|
@ -757,6 +759,15 @@ bool SETTINGS_MANAGER::LoadProject( const wxString& aFullPath, bool aSetActive )
|
||||||
if( m_projects.count( fullPath ) )
|
if( m_projects.count( fullPath ) )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
bool readOnly = false;
|
||||||
|
std::unique_ptr<wxSingleInstanceChecker> lockFile = ::LockFile( fullPath );
|
||||||
|
|
||||||
|
if( !lockFile )
|
||||||
|
{
|
||||||
|
wxLogTrace( traceSettings, "Project %s is locked; opening read-only", fullPath );
|
||||||
|
readOnly = true;
|
||||||
|
}
|
||||||
|
|
||||||
// No MDI yet
|
// No MDI yet
|
||||||
if( aSetActive && !m_projects.empty() )
|
if( aSetActive && !m_projects.empty() )
|
||||||
{
|
{
|
||||||
|
@ -773,7 +784,12 @@ bool SETTINGS_MANAGER::LoadProject( const wxString& aFullPath, bool aSetActive )
|
||||||
bool success = loadProjectFile( *project );
|
bool success = loadProjectFile( *project );
|
||||||
|
|
||||||
if( success )
|
if( success )
|
||||||
project->SetReadOnly( project->GetProjectFile().IsReadOnly() );
|
{
|
||||||
|
project->SetReadOnly( readOnly || project->GetProjectFile().IsReadOnly() );
|
||||||
|
|
||||||
|
if( lockFile )
|
||||||
|
m_project_lock.reset( lockFile.release() );
|
||||||
|
}
|
||||||
|
|
||||||
m_projects_list.push_back( std::move( project ) );
|
m_projects_list.push_back( std::move( project ) );
|
||||||
m_projects[fullPath] = m_projects_list.back().get();
|
m_projects[fullPath] = m_projects_list.back().get();
|
||||||
|
@ -825,6 +841,9 @@ bool SETTINGS_MANAGER::UnloadProject( PROJECT* aProject, bool aSave )
|
||||||
// Remove the reference in the environment to the previous project
|
// Remove the reference in the environment to the previous project
|
||||||
wxSetEnv( PROJECT_VAR_NAME, "" );
|
wxSetEnv( PROJECT_VAR_NAME, "" );
|
||||||
|
|
||||||
|
// Release lock on the file, in case we had one
|
||||||
|
m_project_lock = nullptr;
|
||||||
|
|
||||||
if( m_kiway )
|
if( m_kiway )
|
||||||
m_kiway->ProjectChanged();
|
m_kiway->ProjectChanged();
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <bitmaps.h>
|
#include <bitmaps.h>
|
||||||
|
#include <common.h> // For ExpandEnvVarSubstitutions
|
||||||
#include <dialogs/wx_html_report_panel.h>
|
#include <dialogs/wx_html_report_panel.h>
|
||||||
#include <dialog_plot_schematic.h>
|
#include <dialog_plot_schematic.h>
|
||||||
#include <eeschema_settings.h>
|
#include <eeschema_settings.h>
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <wx/regex.h>
|
#include <wx/regex.h>
|
||||||
|
|
||||||
|
#include <common.h> // For ExpandEnvVarSubstitutions
|
||||||
#include <project.h>
|
#include <project.h>
|
||||||
#include <panel_sym_lib_table.h>
|
#include <panel_sym_lib_table.h>
|
||||||
#include <lib_id.h>
|
#include <lib_id.h>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#define _SETTINGS_MANAGER_H
|
#define _SETTINGS_MANAGER_H
|
||||||
|
|
||||||
#include <typeinfo>
|
#include <typeinfo>
|
||||||
#include <common.h> // for wxString hash
|
#include <core/wx_stl_compat.h> // for wxString hash
|
||||||
#include <settings/color_settings.h>
|
#include <settings/color_settings.h>
|
||||||
|
|
||||||
class COLOR_SETTINGS;
|
class COLOR_SETTINGS;
|
||||||
|
@ -31,6 +31,7 @@ class KIWAY;
|
||||||
class PROJECT;
|
class PROJECT;
|
||||||
class PROJECT_FILE;
|
class PROJECT_FILE;
|
||||||
class REPORTER;
|
class REPORTER;
|
||||||
|
class wxSingleInstanceChecker;
|
||||||
|
|
||||||
|
|
||||||
class SETTINGS_MANAGER
|
class SETTINGS_MANAGER
|
||||||
|
@ -425,6 +426,9 @@ private:
|
||||||
/// Loaded project files, mapped according to project full name
|
/// Loaded project files, mapped according to project full name
|
||||||
std::map<wxString, PROJECT_FILE*> m_project_files;
|
std::map<wxString, PROJECT_FILE*> m_project_files;
|
||||||
|
|
||||||
|
/// Lock for loaded project (expand to multiple once we support MDI)
|
||||||
|
std::unique_ptr<wxSingleInstanceChecker> m_project_lock;
|
||||||
|
|
||||||
static wxString backupDateTimeFormat;
|
static wxString backupDateTimeFormat;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue