From b1170251fbca5b6b243902cf10695ab4c4c5642b Mon Sep 17 00:00:00 2001 From: Oliver Specht Date: Thu, 11 Apr 2024 08:56:17 +0200 Subject: Improve case rotation in sentence case Rotating case (Shift+F3) applies sentence case only if multiple words are already selected or selects sentence if SENTENCE_CASE is going to be applied. Change-Id: I9e8536d7744a344d7ad54150783e91e843e0e81e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165986 Tested-by: Jenkins Reviewed-by: Thorsten Behrens --- sw/source/uibase/shells/textsh.cxx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'sw/source/uibase/shells') diff --git a/sw/source/uibase/shells/textsh.cxx b/sw/source/uibase/shells/textsh.cxx index 1b1fb47fd1f3..93020de3bad2 100644 --- a/sw/source/uibase/shells/textsh.cxx +++ b/sw/source/uibase/shells/textsh.cxx @@ -878,20 +878,33 @@ void SwTextShell::ExecRotateTransliteration( SfxRequest const & rReq ) { if( rReq.GetSlot() == SID_TRANSLITERATE_ROTATE_CASE ) { + TransliterationFlags transFlags = m_aRotateCase.getNextMode(); + bool bSentenceCase = TransliterationFlags::SENTENCE_CASE == transFlags; SwWrtShell& rSh = GetShell(); if (rSh.HasSelection()) { - rSh.TransliterateText(m_aRotateCase.getNextMode()); + if (bSentenceCase) + { + OUString aSelection = rSh.GetSelText().trim(); + if (aSelection.getLength() <= 2 || (aSelection.indexOf(' ') < 0 && aSelection.indexOf('\t') < 0)) + transFlags = m_aRotateCase.getNextMode(); + } + rSh.TransliterateText(transFlags); } else { + if (bSentenceCase) + { + if (!rSh.IsEndSentence()) + rSh.EndSentence(false); + } if (rSh.IsEndSentence()) { rSh.BwdSentence(true); - rSh.TransliterateText(m_aRotateCase.getNextMode()); + rSh.TransliterateText(transFlags); } else if ((rSh.IsEndWrd() || rSh.IsStartWord() || rSh.IsInWord()) && rSh.SelWrd()) - rSh.TransliterateText(m_aRotateCase.getNextMode()); + rSh.TransliterateText(transFlags); } } } -- cgit