[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - vcl/unx

Justin Luth justin_luth at sil.org
Tue Oct 27 04:28:58 PDT 2015


 vcl/unx/gtk/window/gtksalframe.cxx |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

New commits:
commit 9f008e2ae5e9d090ca011e5a6146e221e6799531
Author: Justin Luth <justin_luth at sil.org>
Date:   Fri Oct 16 20:41:12 2015 +0300

    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 at sil.org>
    Tested-by: Justin Luth <justin_luth at sil.org>
    (cherry picked from commit d9cf47449e88032803aa4fa3429cd607a074d5ad)
    Reviewed-on: https://gerrit.libreoffice.org/19418
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
    Tested-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/vcl/unx/gtk/window/gtksalframe.cxx b/vcl/unx/gtk/window/gtksalframe.cxx
index 347497c..980f0e4 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;
     }


More information about the Libreoffice-commits mailing list