summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorJustin Luth <justin_luth@sil.org>2015-10-16 20:41:12 +0300
committerAndras Timar <andras.timar@collabora.com>2015-10-29 13:08:52 +0100
commitf9936a89922bbbc481d3b213375efe8db9d0243c (patch)
tree548c93d8c71386c48a323dfa45692f4d85577f55 /vcl
parentcaddeb911c346f3fb139e31d471774ea63bac836 (diff)
tdf#95096 avoid invalid cursor position exception
Somehow, accessible text can lose focus and so when attempting to set the cursor, the string we were just working with may no longer be available, so verify that the cursor position is still valid before setting it. If the text can just disappear like that, then potentially we are still forcing the cursor into the wrong place (since the string is different than expected). However we can at least make sure the program doesn't crash/exit without saving... Change-Id: I8dcaf4625d187cb75008bdc0af0e3a546090a018 Reviewed-on: https://gerrit.libreoffice.org/19414 Reviewed-by: Justin Luth <justin_luth@sil.org> Tested-by: Justin Luth <justin_luth@sil.org> (cherry picked from commit d9cf47449e88032803aa4fa3429cd607a074d5ad) Reviewed-on: https://gerrit.libreoffice.org/19418 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Miklos Vajna <vmiklos@collabora.co.uk> (cherry picked from commit 9f008e2ae5e9d090ca011e5a6146e221e6799531)
Diffstat (limited to 'vcl')
-rw-r--r--vcl/unx/gtk/window/gtksalframe.cxx7
1 files changed, 5 insertions, 2 deletions
diff --git a/vcl/unx/gtk/window/gtksalframe.cxx b/vcl/unx/gtk/window/gtksalframe.cxx
index 347497c2acb9..980f0e4511d7 100644
--- a/vcl/unx/gtk/window/gtksalframe.cxx
+++ b/vcl/unx/gtk/window/gtksalframe.cxx
@@ -4689,9 +4689,12 @@ gboolean GtkSalFrame::IMHandler::signalIMDeleteSurrounding( GtkIMContext*, gint
if (nDeletePos < nPosition)
{
if (nDeleteEnd <= nPosition)
- xText->setCaretPosition( nPosition-(nDeleteEnd-nDeletePos) );
+ nPosition = nPosition - (nDeleteEnd - nDeletePos);
else
- xText->setCaretPosition( nDeletePos );
+ nPosition = nDeletePos;
+
+ if (xText->getCharacterCount() >= nPosition)
+ xText->setCaretPosition( nPosition );
}
return true;
}