[Libreoffice-commits] core.git: vcl/unx
Justin Luth
justin_luth at sil.org
Tue Jun 30 04:50:34 PDT 2015
vcl/unx/gtk/window/gtksalframe.cxx | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
New commits:
commit 6c76a0a84785b48c29687e6d31b8229a230563d8
Author: Justin Luth <justin_luth at sil.org>
Date: Fri May 29 10:10:21 2015 +0300
tdf#91641 adjust cursor when deleting preceding characters
IMDeleteSurrounding is used by input methods to take multiple
keystrokes and convert them into a special character. Then the
composing keystrokes are removed.
Before this fix, the cursor placement was not adjusted,
so the special character was inserted in the wrong position
and if 3+ keystrokes were involved, the wrong characters were deleted.
Change-Id: I35b97bc150dc68ffe65eebc59450e21e0033bd16
Reviewed-on: https://gerrit.libreoffice.org/15961
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/vcl/unx/gtk/window/gtksalframe.cxx b/vcl/unx/gtk/window/gtksalframe.cxx
index 9f8e35d..7697eca 100644
--- a/vcl/unx/gtk/window/gtksalframe.cxx
+++ b/vcl/unx/gtk/window/gtksalframe.cxx
@@ -4655,7 +4655,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;
@@ -4667,6 +4667,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;
}
More information about the Libreoffice-commits
mailing list