From ff666eda9b20181135e163b0553a70101c196589 Mon Sep 17 00:00:00 2001
From: Gary Talent <gary@drinkingtea.net>
Date: Thu, 23 Jan 2025 00:55:10 -0600
Subject: [PATCH] [studio] Make NewMenu default Name field to focus when it
 appears

---
 src/olympic/studio/applib/src/newmenu.cpp | 13 ++++++++-----
 src/olympic/studio/applib/src/newmenu.hpp |  1 +
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/olympic/studio/applib/src/newmenu.cpp b/src/olympic/studio/applib/src/newmenu.cpp
index a348a2c7..04479583 100644
--- a/src/olympic/studio/applib/src/newmenu.cpp
+++ b/src/olympic/studio/applib/src/newmenu.cpp
@@ -53,6 +53,7 @@ void NewMenu::draw(StudioContext &sctx) noexcept {
 		case Stage::NewItemType:
 			drawNewItemType(sctx);
 			break;
+		case Stage::NewItemTransitioningToPath:
 		case Stage::NewItemPath:
 			drawNewItemPath(sctx);
 			break;
@@ -90,8 +91,8 @@ void NewMenu::drawNewItemType(StudioContext const&sctx) noexcept {
 		}, m_types.size(), m_selectedType, {200, 100});
 		auto const&im = *m_types[m_selectedType];
 		drawFirstPageButtons(im.itemTemplates().size() == 1 ?
-			Stage::NewItemPath : Stage::NewItemTemplate);
-		if (m_stage == Stage::NewItemPath || m_stage == Stage::NewItemTemplate) {
+			Stage::NewItemTransitioningToPath : Stage::NewItemTemplate);
+		if (m_stage == Stage::NewItemTransitioningToPath || m_stage == Stage::NewItemTemplate) {
 			if (m_path.len() == 0) {
 				m_path = im.defaultPath();
 			}
@@ -108,16 +109,18 @@ void NewMenu::drawNewItemTemplate(StudioContext const&sctx) noexcept {
 		ig::ListBox("Template", [&](size_t const i) -> ox::CStringView {
 			return templates[i]->name();
 		}, templates.size(), m_selectedTemplate, {200, 100});
-		drawButtons(Stage::NewItemPath);
+		drawButtons(Stage::NewItemTransitioningToPath);
 	});
 }
 
 void NewMenu::drawNewItemPath(StudioContext &sctx) noexcept {
 	setSize({380, 340});
 	drawWindow(sctx.tctx, m_open, [this, &sctx] {
-		if (m_selectedType < m_types.size()) {
-			ig::InputText("Name", m_itemName);
+		if (m_stage == Stage::NewItemTransitioningToPath) [[unlikely]] {
+			ImGui::SetKeyboardFocusHere();
+			m_stage = Stage::NewItemPath;
 		}
+		ig::InputText("Name", m_itemName);
 		ImGui::NewLine();
 		ImGui::Text("Path");
 		auto const vp = ImGui::GetContentRegionAvail();
diff --git a/src/olympic/studio/applib/src/newmenu.hpp b/src/olympic/studio/applib/src/newmenu.hpp
index f2db5f00..51c949dc 100644
--- a/src/olympic/studio/applib/src/newmenu.hpp
+++ b/src/olympic/studio/applib/src/newmenu.hpp
@@ -20,6 +20,7 @@ class NewMenu final: public Popup {
 			Closed,
 			Opening,
 			NewItemType,
+			NewItemTransitioningToPath,
 			NewItemPath,
 			NewItemTemplate,
 		};