diff --git a/source/Gui/SimulationParametersMainWindow.cpp b/source/Gui/SimulationParametersMainWindow.cpp index b424bd2b7..13b36f9dd 100644 --- a/source/Gui/SimulationParametersMainWindow.cpp +++ b/source/Gui/SimulationParametersMainWindow.cpp @@ -258,6 +258,9 @@ void SimulationParametersMainWindow::processDetailWidget() //AlienGui::ResetFilterText(); ImGui::Spacing(); + if (shouldStartFilterTyping()) { + ImGui::SetKeyboardFocusHere(); + } AlienGui::InputFilter(AlienGui::InputFilterParameters().width(250.0f), _filter); } AlienGui::EndTreeNode(); @@ -271,6 +274,19 @@ void SimulationParametersMainWindow::processDetailWidget() } } +bool SimulationParametersMainWindow::shouldStartFilterTyping() const +{ + if (ImGui::IsAnyItemActive() || !ImGui::IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows)) { + return false; + } + for (auto const& c : ImGui::GetIO().InputQueueCharacters) { + if (c >= 32 && c != 127) { + return true; + } + } + return false; +} + void SimulationParametersMainWindow::processExpertWidget() { if (ImGui::BeginChild("##expert", {0, 0})) { diff --git a/source/Gui/SimulationParametersMainWindow.h b/source/Gui/SimulationParametersMainWindow.h index 1d72bb2aa..1ad954210 100644 --- a/source/Gui/SimulationParametersMainWindow.h +++ b/source/Gui/SimulationParametersMainWindow.h @@ -26,6 +26,8 @@ class SimulationParametersMainWindow : public AlienWindow void processExpertWidget(); void processStatusBar(); + bool shouldStartFilterTyping() const; + struct Location { std::string name;