diff --git a/src/vte.cc b/src/vte.cc
index 027634d..318fc10 100644
--- a/src/vte.cc
+++ b/src/vte.cc
@@ -771,9 +771,9 @@ _vte_invalidate_cursor_once(VteTerminal *terminal, gboolean periodic)
 				columns++;
 			}
 		}
-		if (preedit_width > 0) {
-			columns += preedit_width;
-			columns++; /* one more for the preedit cursor */
+		columns = MAX(columns, preedit_width);
+		if (column + columns > terminal->pvt->column_count) {
+			column = MAX(0, terminal->pvt->column_count - columns);
 		}
 
 		_vte_debug_print(VTE_DEBUG_UPDATES,
