From 4461f99fa4b23ea15de98cd4539e63886255acd4 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Sun, 2 Feb 2025 23:13:15 -0600 Subject: [PATCH] [studio] Add Ctrl-W shortcut for closing active tab --- src/olympic/studio/applib/src/studioapp.cpp | 27 +++++++++++++++------ src/olympic/studio/applib/src/studioapp.hpp | 2 ++ 2 files changed, 22 insertions(+), 7 deletions(-) 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;