Skip to content

Commit 9fffe8a

Browse files
Merge pull request #28367 from mathesoncalum/28337-lingering_text_edit
Fix #28337: Lingering text edit after making selection
2 parents 92288a1 + f4b8633 commit 9fffe8a

File tree

4 files changed

+15
-17
lines changed

4 files changed

+15
-17
lines changed

src/notation/inotationinteraction.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ class INotationInteraction
148148
virtual bool textEditingAllowed(const EngravingItem* element) const = 0;
149149
virtual void startEditText(EngravingItem* element, const muse::PointF& elementPos = muse::PointF()) = 0;
150150
virtual void editText(QInputMethodEvent* event) = 0;
151-
virtual void endEditText() = 0;
151+
virtual void endEditText(bool startNonTextualEdit = true) = 0;
152152
virtual void changeTextCursorPosition(const muse::PointF& newCursorPos) = 0;
153153
virtual void selectText(mu::engraving::SelectTextType type) = 0;
154154
virtual const TextBase* editedText() const = 0;

src/notation/internal/notationinteraction.cpp

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -893,7 +893,7 @@ void NotationInteraction::doSelect(const std::vector<EngravingItem*>& elements,
893893
TRACEFUNC;
894894

895895
if (needEndTextEditing(elements)) {
896-
endEditText();
896+
endEditText(/*startNonTextualEdit*/ false);
897897
} else if (needEndElementEditing(elements)) {
898898
endEditElement();
899899
}
@@ -4188,21 +4188,19 @@ bool NotationInteraction::handleKeyPress(QKeyEvent* event)
41884188
return true;
41894189
}
41904190

4191-
void NotationInteraction::endEditText()
4191+
void NotationInteraction::endEditText(bool startNonTextualEdit)
41924192
{
41934193
if (!isTextEditingStarted()) {
41944194
return;
41954195
}
41964196

4197-
EngravingItem* editedElement = m_editData.element;
4197+
TextBase* editedElement = toTextBase(m_editData.element);
41984198
doEndEditElement();
4199+
notifyAboutTextEditingEnded(editedElement);
41994200

4200-
if (editedElement) {
4201-
notifyAboutTextEditingEnded(toTextBase(editedElement));
4202-
// When textual edit is finished, non-textual edit can still happen, so we need to start the non-textual edit mode here
4203-
if (editedElement->isTextBase() && toTextBase(editedElement)->supportsNonTextualEdit()) {
4204-
startEditElement(editedElement, false);
4205-
}
4201+
// When textual edit is finished, non-textual edit can still happen, so we need to start the non-textual edit mode here
4202+
if (startNonTextualEdit && editedElement->supportsNonTextualEdit()) {
4203+
startEditElement(editedElement, false);
42064204
}
42074205

42084206
notifyAboutTextEditingChanged();
@@ -6263,7 +6261,7 @@ void NotationInteraction::navigateToLyrics(bool back, bool moveOnly, bool end)
62636261
return;
62646262
}
62656263

6266-
endEditText();
6264+
endEditText(/*startNonTextualEdit*/ false);
62676265

62686266
// look for the lyrics we are moving from; may be the current lyrics or a previous one
62696267
// if we are skipping several chords with spaces
@@ -6413,7 +6411,7 @@ void NotationInteraction::navigateToNextSyllable()
64136411
return;
64146412
}
64156413

6416-
endEditText();
6414+
endEditText(/*startNonTextualEdit*/ false);
64176415

64186416
// look for the lyrics we are moving from; may be the current lyrics or a previous one
64196417
// we are extending with several dashes
@@ -6657,7 +6655,7 @@ void NotationInteraction::navigateToLyricsVerse(MoveDirection direction)
66576655
}
66586656
}
66596657

6660-
endEditText();
6658+
endEditText(/*startNonTextualEdit*/ false);
66616659

66626660
lyrics = cr->lyrics(verse, placement);
66636661
if (!lyrics) {
@@ -7239,7 +7237,7 @@ void NotationInteraction::addMelisma()
72397237
FontStyle fStyle = lyrics->fontStyle();
72407238
PropertyFlags fFlags = lyrics->propertyFlags(Pid::FONT_STYLE);
72417239
Fraction endTick = segment->tick(); // a previous melisma cannot extend beyond this point
7242-
endEditText();
7240+
endEditText(/*startNonTextualEdit*/ false);
72437241

72447242
// search next chord
72457243
Segment* nextSegment = segment;
@@ -7444,7 +7442,7 @@ void NotationInteraction::addLyricsVerse()
74447442
mu::engraving::FontStyle fStyle = oldLyrics->fontStyle();
74457443
mu::engraving::PropertyFlags fFlags = oldLyrics->propertyFlags(mu::engraving::Pid::FONT_STYLE);
74467444

7447-
endEditText();
7445+
endEditText(/*startNonTextualEdit*/ false);
74487446

74497447
score()->startCmd(TranslatableString("undoableAction", "Add lyrics verse"));
74507448
int newVerse = oldLyrics->no() + 1;

src/notation/internal/notationinteraction.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ class NotationInteraction : public INotationInteraction, public muse::Injectable
157157
bool textEditingAllowed(const EngravingItem* element) const override;
158158
void startEditText(EngravingItem* element, const muse::PointF& cursorPos = muse::PointF()) override;
159159
void editText(QInputMethodEvent* event) override;
160-
void endEditText() override;
160+
void endEditText(bool startNonTextualEdit = true) override;
161161
void changeTextCursorPosition(const muse::PointF& newCursorPos) override;
162162
void selectText(mu::engraving::SelectTextType type) override;
163163
const TextBase* editedText() const override;

src/notation/tests/mocks/notationinteractionmock.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ class NotationInteractionMock : public INotationInteraction
113113
MOCK_METHOD(bool, textEditingAllowed, (const EngravingItem*), (const, override));
114114
MOCK_METHOD(void, startEditText, (EngravingItem*, const muse::PointF&), (override));
115115
MOCK_METHOD(void, editText, (QInputMethodEvent*), (override));
116-
MOCK_METHOD(void, endEditText, (), (override));
116+
MOCK_METHOD(void, endEditText, (bool), (override));
117117
MOCK_METHOD(void, changeTextCursorPosition, (const muse::PointF&), (override));
118118
MOCK_METHOD(void, selectText, (mu::engraving::SelectTextType), (override));
119119
MOCK_METHOD(const TextBase*, editedText, (), (const, override));

0 commit comments

Comments
 (0)