diff --git a/src/olympic/studio/applib/src/studioapp.cpp b/src/olympic/studio/applib/src/studioapp.cpp index 61a06f12..82df7b2d 100644 --- a/src/olympic/studio/applib/src/studioapp.cpp +++ b/src/olympic/studio/applib/src/studioapp.cpp @@ -334,6 +334,14 @@ void StudioUI::handleKeyInput() noexcept { if (m_activeEditor && m_activeEditor->pasteEnabled()) { m_activeEditor->paste(); } + } else if (ImGui::IsKeyPressed(ImGuiKey_W)) { + if (m_activeEditor) { + if (m_activeEditor->unsavedChanges()) { + m_closeFileConfirm.open(); + } else { + oxLogError(closeCurrentFile()); + } + } } else if (ImGui::IsKeyPressed(ImGuiKey_X)) { if (m_activeEditor && m_activeEditor->cutEnabled()) { m_activeEditor->cut(); @@ -491,14 +499,19 @@ ox::Error StudioUI::openFileActiveTab(ox::StringViewCR path, bool const makeActi ox::Error StudioUI::handleCloseFileResponse(ig::PopupResponse const response) noexcept { if (response == ig::PopupResponse::OK && m_activeEditor) { - for (size_t i{}; auto &e : m_editors) { - if (m_activeEditor == e.get()) { - oxLogError(closeFile(e->itemPath())); - oxLogError(m_editors.erase(i).error); - break; - } - ++i; + return closeCurrentFile(); + } + return {}; +} + +ox::Error StudioUI::closeCurrentFile() noexcept { + for (size_t i{}; auto &e : m_editors) { + if (m_activeEditor == e.get()) { + oxLogError(closeFile(e->itemPath())); + oxLogError(m_editors.erase(i).error); + break; } + ++i; } return {}; } diff --git a/src/olympic/studio/applib/src/studioapp.hpp b/src/olympic/studio/applib/src/studioapp.hpp index 9c413e1c..3ac1b308 100644 --- a/src/olympic/studio/applib/src/studioapp.hpp +++ b/src/olympic/studio/applib/src/studioapp.hpp @@ -118,6 +118,8 @@ class StudioUI: public ox::SignalHandler { ox::Error handleCloseFileResponse(ig::PopupResponse response) noexcept; + ox::Error closeCurrentFile() noexcept; + ox::Error closeFile(ox::StringViewCR path) noexcept; ox::Error queueDirMove(ox::StringParam src, ox::StringParam dst) noexcept;