]> Pileus Git - ~andy/gtk/commitdiff
Update IM spot location before running _validate_onscreen()
authorKristian Rietveld <kris@gtk.org>
Fri, 4 Sep 2009 11:30:48 +0000 (13:30 +0200)
committerKristian Rietveld <kris@gtk.org>
Fri, 4 Sep 2009 12:06:58 +0000 (14:06 +0200)
Updating the IM spot location in gtk_text_view_value_changed() might
invalidate the layout, so we need to make sure that we update it before
validating the layout again.  Otherwise, the layout will be invalidated
right after validating it (possibly resulting in a failed
onscreen_validated assertion).  Patch merged from maemo-gtk.

gtk/gtktextview.c

index 18da865e11436ea5c96554cd5f4d39478ff66a0c..4c5f0d233d9ea3ff0d66848b2ea8ca1faf4b28b8 100644 (file)
@@ -7196,6 +7196,11 @@ gtk_text_view_value_changed (GtkAdjustment *adj,
    */
   gtk_text_view_update_layout_width (text_view);
   
+  /* We also update the IM spot location here, since the IM context
+   * might do something that leads to validation.
+   */
+  gtk_text_view_update_im_spot_location (text_view);
+
   /* note that validation of onscreen could invoke this function
    * recursively, by scrolling to maintain first_para, or in response
    * to updating the layout width, however there is no problem with
@@ -7230,6 +7235,9 @@ gtk_text_view_value_changed (GtkAdjustment *adj,
       text_view->first_validate_idle = 0;
     }
 
+  /* Finally we update the IM cursor location again, to ensure any
+   * changes made by the validation are pushed through.
+   */
   gtk_text_view_update_im_spot_location (text_view);
   
   DV(g_print(">End scroll offset changed handler ("G_STRLOC")\n"));