diff options
-rw-r--r-- | sc/source/ui/Accessibility/AccessibleEditObject.cxx | 12 | ||||
-rw-r--r-- | vcl/unx/gtk/window/gtksalframe.cxx | 12 |
2 files changed, 20 insertions, 4 deletions
diff --git a/sc/source/ui/Accessibility/AccessibleEditObject.cxx b/sc/source/ui/Accessibility/AccessibleEditObject.cxx index 0020a70e89cd..99104991de5b 100644 --- a/sc/source/ui/Accessibility/AccessibleEditObject.cxx +++ b/sc/source/ui/Accessibility/AccessibleEditObject.cxx @@ -372,13 +372,21 @@ void ScAccessibleEditObject::CreateTextHelper() ::std::unique_ptr< SvxEditSource > pEditSource (new ScAccessibilityEditSource(std::move(pAccessibleTextData))); mpTextHelper = new ::accessibility::AccessibleTextHelper(std::move(pEditSource)); mpTextHelper->SetEventSource(this); - mpTextHelper->SetFocus(mbHasFocus); + + const ScInputHandler* pInputHdl = SC_MOD()->GetInputHdl(); + if ( pInputHdl && pInputHdl->IsEditMode() ) + { + mpTextHelper->SetFocus(true); + } + else + { + mpTextHelper->SetFocus(mbHasFocus); + } // #i54814# activate cell in edit mode if( meObjectType == CellInEditMode ) { // do not activate cell object, if top edit line is active - const ScInputHandler* pInputHdl = SC_MOD()->GetInputHdl(); if( pInputHdl && !pInputHdl->IsTopMode() ) { SdrHint aHint( HINT_BEGEDIT ); diff --git a/vcl/unx/gtk/window/gtksalframe.cxx b/vcl/unx/gtk/window/gtksalframe.cxx index 9a2397b7e62a..6421c0cc08bd 100644 --- a/vcl/unx/gtk/window/gtksalframe.cxx +++ b/vcl/unx/gtk/window/gtksalframe.cxx @@ -4462,7 +4462,7 @@ gboolean GtkSalFrame::IMHandler::signalIMRetrieveSurrounding( GtkIMContext* pCon uno::Reference<accessibility::XAccessibleEditableText> xText = lcl_GetxText(pFocusWin); if (xText.is()) { - sal_uInt32 nPosition = xText->getCaretPosition(); + sal_Int32 nPosition = xText->getCaretPosition(); OUString sAllText = xText->getText(); OString sUTF = OUStringToOString(sAllText, RTL_TEXTENCODING_UTF8); OUString sCursorText(sAllText.copy(0, nPosition)); @@ -4484,7 +4484,7 @@ gboolean GtkSalFrame::IMHandler::signalIMDeleteSurrounding( GtkIMContext*, gint uno::Reference<accessibility::XAccessibleEditableText> xText = lcl_GetxText(pFocusWin); if (xText.is()) { - sal_uInt32 nPosition = xText->getCaretPosition(); + sal_Int32 nPosition = xText->getCaretPosition(); // #i111768# range checking sal_Int32 nDeletePos = nPosition + offset; sal_Int32 nDeleteEnd = nDeletePos + nchars; @@ -4496,6 +4496,14 @@ gboolean GtkSalFrame::IMHandler::signalIMDeleteSurrounding( GtkIMContext*, gint nDeleteEnd = xText->getCharacterCount(); xText->deleteText(nDeletePos, nDeleteEnd); + //tdf91641 adjust cursor if deleted chars shift it forward (normal case) + if (nDeletePos < nPosition) + { + if (nDeleteEnd <= nPosition) + xText->setCaretPosition( nPosition-(nDeleteEnd-nDeletePos) ); + else + xText->setCaretPosition( nDeletePos ); + } return true; } |