From 6762d8d4a08ef0de010e858a88dd67aa759f6fe2 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Wed, 6 Sep 2023 18:35:19 +0530 Subject: [PATCH] fix: invalidate options menu after closing unsaved files (fixes #1176) --- .../androidide/actions/file/CloseAllFilesAction.kt | 5 +++-- .../itsaky/androidide/actions/file/CloseFileAction.kt | 7 ++++--- .../activities/editor/EditorHandlerActivity.kt | 10 ++++------ .../com/itsaky/androidide/interfaces/IEditorHandler.kt | 6 ++++-- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/itsaky/androidide/actions/file/CloseAllFilesAction.kt b/app/src/main/java/com/itsaky/androidide/actions/file/CloseAllFilesAction.kt index e9453b17a..628850419 100644 --- a/app/src/main/java/com/itsaky/androidide/actions/file/CloseAllFilesAction.kt +++ b/app/src/main/java/com/itsaky/androidide/actions/file/CloseAllFilesAction.kt @@ -38,8 +38,9 @@ class CloseAllFilesAction(context: Context) : FileTabAction() { } override fun EditorHandlerActivity.doAction(data: ActionData): Boolean { - closeAll() - this.invalidateOptionsMenu() + closeAll { + invalidateOptionsMenu() + } return true } } diff --git a/app/src/main/java/com/itsaky/androidide/actions/file/CloseFileAction.kt b/app/src/main/java/com/itsaky/androidide/actions/file/CloseFileAction.kt index ae8a738b2..fe232b258 100644 --- a/app/src/main/java/com/itsaky/androidide/actions/file/CloseFileAction.kt +++ b/app/src/main/java/com/itsaky/androidide/actions/file/CloseFileAction.kt @@ -38,9 +38,10 @@ class CloseFileAction(context: Context) : FileTabAction() { } override fun EditorHandlerActivity.doAction(data: ActionData): Boolean { - binding.tabs.selectedTabPosition.let { - closeFile(it) - this.invalidateOptionsMenu() + binding.tabs.selectedTabPosition.let { index -> + closeFile(index) { + invalidateOptionsMenu() + } } return true } diff --git a/app/src/main/java/com/itsaky/androidide/activities/editor/EditorHandlerActivity.kt b/app/src/main/java/com/itsaky/androidide/activities/editor/EditorHandlerActivity.kt index 62549875c..1fdc1504a 100644 --- a/app/src/main/java/com/itsaky/androidide/activities/editor/EditorHandlerActivity.kt +++ b/app/src/main/java/com/itsaky/androidide/activities/editor/EditorHandlerActivity.kt @@ -399,13 +399,13 @@ open class EditorHandlerActivity : ProjectHandlerActivity(), IEditorHandler { return editorViewModel.areFilesModified() } - override fun closeFile(index: Int) { + override fun closeFile(index: Int, runAfter: () -> Unit) { if (index >= 0 && index < editorViewModel.getOpenedFileCount()) { val opened: File = editorViewModel.getOpenedFile(index) log.info("Closing file:", opened) val editor = getEditorAtIndex(index) if (editor != null && editor.isModified) { - notifyFilesUnsaved(listOf(editor)) { closeFile(index) } + notifyFilesUnsaved(listOf(editor)) { closeFile(index, runAfter) } return } @@ -429,10 +429,8 @@ open class EditorHandlerActivity : ProjectHandlerActivity(), IEditorHandler { log.error("Invalid file index. Cannot close.") return } - } - override fun closeAll() { - closeAll {} + runAfter() } override fun closeOthers() { @@ -483,7 +481,7 @@ open class EditorHandlerActivity : ProjectHandlerActivity(), IEditorHandler { binding.editorToolbar.updateMenuDisplay() } - private fun closeAll(runAfter: () -> Unit = {}) { + override fun closeAll(runAfter: () -> Unit) { val count = editorViewModel.getOpenedFileCount() val unsavedFiles = editorViewModel.getOpenedFiles().map(this::getEditorForFile).filter { it != null && it.isModified } diff --git a/app/src/main/java/com/itsaky/androidide/interfaces/IEditorHandler.kt b/app/src/main/java/com/itsaky/androidide/interfaces/IEditorHandler.kt index 34b35f04f..a00f6e21c 100644 --- a/app/src/main/java/com/itsaky/androidide/interfaces/IEditorHandler.kt +++ b/app/src/main/java/com/itsaky/androidide/interfaces/IEditorHandler.kt @@ -46,7 +46,9 @@ interface IEditorHandler { fun saveAllResult() : SaveResult fun saveResult(index: Int, result: SaveResult) - fun closeFile(index: Int) - fun closeAll() + fun closeFile(index: Int) = closeFile(index) {} + fun closeFile(index: Int, runAfter: () -> Unit) + fun closeAll() = closeAll {} + fun closeAll(runAfter: () -> Unit) fun closeOthers() } \ No newline at end of file