From d9cf47449e88032803aa4fa3429cd607a074d5ad Mon Sep 17 00:00:00 2001 From: Justin Luth Date: Fri, 16 Oct 2015 20:41:12 +0300 Subject: 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 Tested-by: Justin Luth --- vcl/unx/gtk/window/gtksalframe.cxx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'vcl/unx') diff --git a/vcl/unx/gtk/window/gtksalframe.cxx b/vcl/unx/gtk/window/gtksalframe.cxx index ebc85166caa5..25f3fe560e55 100644 --- a/vcl/unx/gtk/window/gtksalframe.cxx +++ b/vcl/unx/gtk/window/gtksalframe.cxx @@ -4712,9 +4712,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; } -- cgit