Index: libkdepim/kmeditor.cpp
===================================================================
--- libkdepim/kmeditor.cpp	(revision 788608)
+++ libkdepim/kmeditor.cpp	(working copy)
@@ -63,6 +63,7 @@
 #include <QAction>
 #include <QProcess>
 #include <QTextLayout>
+#include <QTimer>
 
 //system includes
 #include <assert.h>
@@ -91,6 +92,7 @@
     //
     void addSuggestion( const QString&,const QStringList& );
 
+    void ensureCursorVisibleDelayed();
 
     //
     // Normal functions
@@ -239,6 +241,11 @@
   replacements[originalWord] = lst;
 }
 
+void KMeditorPrivate::ensureCursorVisibleDelayed()
+{
+  static_cast<KTextEdit*>( q )->ensureCursorVisible();
+}
+
 void KMeditorPrivate::mergeFormatOnWordOrSelection( const QTextCharFormat &format )
 {
   QTextCursor cursor = q->textCursor();
@@ -1169,4 +1176,11 @@
   return temp;
 }
 
+void KMeditor::ensureCursorVisible()
+{
+  QCoreApplication::processEvents();
+  // ugly hack because the layout changes afterwards, making the cursor hidden...
+  QTimer::singleShot(500, this, SLOT(ensureCursorVisibleDelayed()));
+}
+
 #include "kmeditor.moc"
Index: libkdepim/kmeditor.h
===================================================================
--- libkdepim/kmeditor.h	(revision 788608)
+++ libkdepim/kmeditor.h	(working copy)
@@ -267,6 +267,8 @@
      */
     QString toWrappedPlainText() const;
 
+    void ensureCursorVisible();
+
   public Q_SLOTS:
 
     /**
@@ -380,6 +382,7 @@
     KMeditorPrivate *const d;
     friend class KMeditorPrivate;
     Q_PRIVATE_SLOT( d, void addSuggestion( const QString&, const QStringList& ) )
+    Q_PRIVATE_SLOT( d, void ensureCursorVisibleDelayed() )
 };
 
 }
