mirror of
https://github.com/4ian/GDevelop.git
synced 2025-10-15 10:19:04 +00:00
Fix behaviors that were staying in the list after switching of project with an extension tab opened (#5102)
This commit is contained in:
@@ -351,6 +351,10 @@ const MainFrame = (props: Props) => {
|
||||
const [isProjectOpening, setIsProjectOpening] = React.useState<boolean>(
|
||||
false
|
||||
);
|
||||
const [
|
||||
isProjectClosedSoAvoidReloadingExtensions,
|
||||
setIsProjectClosedSoAvoidReloadingExtensions,
|
||||
] = React.useState<boolean>(false);
|
||||
const [exportDialogOpen, openExportDialog] = React.useState<boolean>(false);
|
||||
const { showConfirmation, showAlert } = useAlertDialog();
|
||||
const preferences = React.useContext(PreferencesContext);
|
||||
@@ -682,6 +686,11 @@ const MainFrame = (props: Props) => {
|
||||
setPreviewState(initialPreviewState);
|
||||
|
||||
console.info('Closing project...');
|
||||
// TODO Remove this state
|
||||
// Instead:
|
||||
// - Move the EventsFunctionsExtensionsLoader to Core
|
||||
// - Add a dirty flag system to refresh on demand.
|
||||
setIsProjectClosedSoAvoidReloadingExtensions(true);
|
||||
|
||||
// While not strictly necessary, use `currentProjectRef` to be 100%
|
||||
// sure to have the latest project (avoid risking any stale variable to an old
|
||||
@@ -704,6 +713,7 @@ const MainFrame = (props: Props) => {
|
||||
eventsFunctionsExtensionsState.unloadProjectEventsFunctionsExtensions(
|
||||
currentProject
|
||||
);
|
||||
await eventsFunctionsExtensionsState.ensureLoadFinished();
|
||||
currentProject.delete();
|
||||
if (unsavedChanges.hasUnsavedChanges) {
|
||||
unsavedChanges.sealUnsavedChanges();
|
||||
@@ -2417,6 +2427,7 @@ const MainFrame = (props: Props) => {
|
||||
const createProject = React.useCallback(
|
||||
async (i18n: I18n, newProjectSetup: NewProjectSetup) => {
|
||||
setIsProjectOpening(true);
|
||||
setIsProjectClosedSoAvoidReloadingExtensions(false);
|
||||
|
||||
// 4 cases when creating a project:
|
||||
// - From an example
|
||||
@@ -2597,6 +2608,7 @@ const MainFrame = (props: Props) => {
|
||||
rawError,
|
||||
errorId: 'project-creation-save-as-error',
|
||||
});
|
||||
setIsProjectClosedSoAvoidReloadingExtensions(true);
|
||||
} finally {
|
||||
// Stop the loading when we're successful or have failed.
|
||||
setIsProjectOpening(false);
|
||||
@@ -2904,6 +2916,9 @@ const MainFrame = (props: Props) => {
|
||||
}
|
||||
eventsFunctionsExtensionsError={eventsFunctionsExtensionsError}
|
||||
onReloadEventsFunctionsExtensions={() => {
|
||||
if (isProjectClosedSoAvoidReloadingExtensions) {
|
||||
return;
|
||||
}
|
||||
// Check if load is sufficient
|
||||
eventsFunctionsExtensionsState.reloadProjectEventsFunctionsExtensions(
|
||||
currentProject
|
||||
@@ -3037,15 +3052,23 @@ const MainFrame = (props: Props) => {
|
||||
onOpenPreferences: () => openPreferencesDialog(true),
|
||||
onOpenAbout: () => openAboutDialog(true),
|
||||
selectInAppTutorial: selectInAppTutorial,
|
||||
onLoadEventsFunctionsExtensions: () =>
|
||||
eventsFunctionsExtensionsState.loadProjectEventsFunctionsExtensions(
|
||||
onLoadEventsFunctionsExtensions: () => {
|
||||
if (isProjectClosedSoAvoidReloadingExtensions) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
return eventsFunctionsExtensionsState.loadProjectEventsFunctionsExtensions(
|
||||
currentProject
|
||||
),
|
||||
onReloadEventsFunctionsExtensionMetadata: extension =>
|
||||
);
|
||||
},
|
||||
onReloadEventsFunctionsExtensionMetadata: extension => {
|
||||
if (isProjectClosedSoAvoidReloadingExtensions) {
|
||||
return;
|
||||
}
|
||||
eventsFunctionsExtensionsState.reloadProjectEventsFunctionsExtensionMetadata(
|
||||
currentProject,
|
||||
extension
|
||||
),
|
||||
);
|
||||
},
|
||||
onDeleteResource: (
|
||||
resource: gdResource,
|
||||
cb: boolean => void
|
||||
|
Reference in New Issue
Block a user