From 2a581c3e2ce092d174a7c032149eaf3309d24377 Mon Sep 17 00:00:00 2001 From: WarmUpTill <19472752+WarmUpTill@users.noreply.github.com> Date: Mon, 8 Jun 2026 21:46:15 +0200 Subject: [PATCH] Focus segment type selection when new segment is added --- lib/macro/macro-action-edit.cpp | 5 +++++ lib/macro/macro-action-edit.hpp | 1 + lib/macro/macro-condition-edit.cpp | 5 +++++ lib/macro/macro-condition-edit.hpp | 1 + lib/macro/macro-edit.cpp | 28 ++++++++++++++++------------ lib/macro/macro-edit.hpp | 2 ++ lib/macro/macro-segment.hpp | 1 + 7 files changed, 31 insertions(+), 12 deletions(-) diff --git a/lib/macro/macro-action-edit.cpp b/lib/macro/macro-action-edit.cpp index 5b5a239a..8f31feb6 100644 --- a/lib/macro/macro-action-edit.cpp +++ b/lib/macro/macro-action-edit.cpp @@ -164,4 +164,9 @@ std::shared_ptr MacroActionEdit::Data() const return *_entryData; } +void MacroActionEdit::FocusTypeSelection() +{ + _actionSelection->setFocus(); +} + } // namespace advss diff --git a/lib/macro/macro-action-edit.hpp b/lib/macro/macro-action-edit.hpp index bf76dac3..2d021e86 100644 --- a/lib/macro/macro-action-edit.hpp +++ b/lib/macro/macro-action-edit.hpp @@ -17,6 +17,7 @@ public: std::shared_ptr * = nullptr); void SetupWidgets(bool basicSetup = false); void SetEntryData(std::shared_ptr *); + void FocusTypeSelection() override; private slots: void ActionSelectionChanged(const QString &text); diff --git a/lib/macro/macro-condition-edit.cpp b/lib/macro/macro-condition-edit.cpp index 06486967..616d89f2 100644 --- a/lib/macro/macro-condition-edit.cpp +++ b/lib/macro/macro-condition-edit.cpp @@ -305,4 +305,9 @@ std::shared_ptr MacroConditionEdit::Data() const return *_entryData; } +void MacroConditionEdit::FocusTypeSelection() +{ + _conditionSelection->setFocus(); +} + } // namespace advss diff --git a/lib/macro/macro-condition-edit.hpp b/lib/macro/macro-condition-edit.hpp index 7c50b885..afff2caf 100644 --- a/lib/macro/macro-condition-edit.hpp +++ b/lib/macro/macro-condition-edit.hpp @@ -43,6 +43,7 @@ public: void SetRootNode(bool); void SetupWidgets(bool basicSetup = false); void SetEntryData(std::shared_ptr *); + void FocusTypeSelection() override; private slots: void LogicSelectionChanged(int idx); diff --git a/lib/macro/macro-edit.cpp b/lib/macro/macro-edit.cpp index 39ebaa0a..af57f28b 100644 --- a/lib/macro/macro-edit.cpp +++ b/lib/macro/macro-edit.cpp @@ -650,6 +650,18 @@ void MacroEdit::HighlightCondition(int idx, QColor color) const ui->conditionsList->Highlight(idx, color); } +void MacroEdit::ScrollAndFocusNewSegment(MacroSegmentList *list, int newIdx, + int *currentIdx) +{ + QTimer::singleShot(0, this, [this, list, newIdx, currentIdx]() { + list->ensureWidgetVisible(list->WidgetAt(*currentIdx)); + auto *widget = list->WidgetAt(newIdx); + if (widget) { + widget->FocusTypeSelection(); + } + }); +} + static void resetSegmentHighlights(MacroSegmentList *list) { MacroSegmentEdit *widget = nullptr; @@ -1087,10 +1099,7 @@ void MacroEdit::AddMacroAction(Macro *macro, int idx, const std::string &id, ui->actionsList->SetHelpMsgVisible(false); emit(MacroSegmentOrderChanged()); - QTimer::singleShot(0, this, [this]() { - ui->actionsList->ensureWidgetVisible( - ui->actionsList->WidgetAt(currentActionIdx)); - }); + ScrollAndFocusNewSegment(ui->actionsList, idx, ¤tActionIdx); } void MacroEdit::AddMacroAction(int idx) @@ -1398,10 +1407,8 @@ void MacroEdit::AddMacroElseAction(Macro *macro, int idx, const std::string &id, ui->elseActionsList->SetHelpMsgVisible(false); emit(MacroSegmentOrderChanged()); - QTimer::singleShot(0, this, [this]() { - ui->elseActionsList->ensureWidgetVisible( - ui->elseActionsList->WidgetAt(currentElseActionIdx)); - }); + ScrollAndFocusNewSegment(ui->elseActionsList, idx, + ¤tElseActionIdx); } void MacroEdit::AddMacroElseAction(int idx) @@ -1611,10 +1618,7 @@ void MacroEdit::AddMacroCondition(Macro *macro, int idx, const std::string &id, ui->conditionsList->SetHelpMsgVisible(false); emit(MacroSegmentOrderChanged()); - QTimer::singleShot(0, this, [this]() { - ui->conditionsList->ensureWidgetVisible( - ui->conditionsList->WidgetAt(currentConditionIdx)); - }); + ScrollAndFocusNewSegment(ui->conditionsList, idx, ¤tConditionIdx); } void MacroEdit::on_conditionAdd_clicked() diff --git a/lib/macro/macro-edit.hpp b/lib/macro/macro-edit.hpp index 7a748c38..7387a735 100644 --- a/lib/macro/macro-edit.hpp +++ b/lib/macro/macro-edit.hpp @@ -116,6 +116,8 @@ private: void PopulateMacroActions(Macro &m, uint32_t afterIdx = 0); void PopulateMacroElseActions(Macro &m, uint32_t afterIdx = 0); void PopulateMacroConditions(Macro &m, uint32_t afterIdx = 0); + void ScrollAndFocusNewSegment(MacroSegmentList *list, int newIdx, + int *currentIdx); void SetupMacroSegmentSelection(MacroSection type, int idx); void SetupContextMenu(const QPoint &pos, diff --git a/lib/macro/macro-segment.hpp b/lib/macro/macro-segment.hpp index 22d5c7e0..60ab7161 100644 --- a/lib/macro/macro-segment.hpp +++ b/lib/macro/macro-segment.hpp @@ -134,6 +134,7 @@ public: void SetSelected(bool); virtual std::shared_ptr Data() const = 0; virtual void SetupWidgets(bool basicSetup = false) = 0; + virtual void FocusTypeSelection() {} void SetupVarMappings(MacroSegment *segment);