src/gui/widgets/qlineedit_p.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
child 7 f7bc934e204c
--- a/src/gui/widgets/qlineedit_p.cpp	Tue Jan 26 12:42:25 2010 +0200
+++ b/src/gui/widgets/qlineedit_p.cpp	Tue Feb 02 00:43:10 2010 +0200
@@ -103,12 +103,12 @@
 void QLineEditPrivate::_q_textEdited(const QString &text)
 {
     Q_Q(QLineEdit);
+    emit q->textEdited(text);
 #ifndef QT_NO_COMPLETER
-    if (control->completer() &&
-            control->completer()->completionMode() != QCompleter::InlineCompletion)
+    if (control->completer()
+        && control->completer()->completionMode() != QCompleter::InlineCompletion)
         control->complete(-1); // update the popup on cut/paste/del
 #endif
-    emit q->textEdited(text);
 }
 
 void QLineEditPrivate::_q_cursorPositionChanged(int from, int to)
@@ -126,19 +126,34 @@
 }
 #endif
 
+void QLineEditPrivate::_q_selectionChanged()
+{
+    Q_Q(QLineEdit);
+    if (control->preeditAreaText().isEmpty()) {
+        QStyleOptionFrameV2 opt;
+        q->initStyleOption(&opt);
+        bool showCursor = control->hasSelectedText() ?
+                          q->style()->styleHint(QStyle::SH_BlinkCursorWhenTextSelected, &opt, q):
+                          true;
+        setCursorVisible(showCursor);
+    }
+
+    emit q->selectionChanged();
+}
+
 void QLineEditPrivate::init(const QString& txt)
 {
     Q_Q(QLineEdit);
     control = new QLineControl(txt);
     control->setFont(q->font());
-    QObject::connect(control, SIGNAL(textChanged(const QString &)),
-            q, SIGNAL(textChanged(const QString &)));
-    QObject::connect(control, SIGNAL(textEdited(const QString &)),
-            q, SLOT(_q_textEdited(const QString &)));
-    QObject::connect(control, SIGNAL(cursorPositionChanged(int, int)),
-            q, SLOT(_q_cursorPositionChanged(int, int)));
+    QObject::connect(control, SIGNAL(textChanged(QString)),
+            q, SIGNAL(textChanged(QString)));
+    QObject::connect(control, SIGNAL(textEdited(QString)),
+            q, SLOT(_q_textEdited(QString)));
+    QObject::connect(control, SIGNAL(cursorPositionChanged(int,int)),
+            q, SLOT(_q_cursorPositionChanged(int,int)));
     QObject::connect(control, SIGNAL(selectionChanged()),
-            q, SIGNAL(selectionChanged()));
+            q, SLOT(_q_selectionChanged()));
     QObject::connect(control, SIGNAL(accepted()),
             q, SIGNAL(returnPressed()));
     QObject::connect(control, SIGNAL(editingFinished()),
@@ -147,17 +162,20 @@
     QObject::connect(control, SIGNAL(editFocusChange(bool)),
             q, SLOT(_q_editFocusChange(bool)));
 #endif
-    QObject::connect(control, SIGNAL(cursorPositionChanged(int, int)),
+    QObject::connect(control, SIGNAL(cursorPositionChanged(int,int)),
+            q, SLOT(updateMicroFocus()));
+    
+    QObject::connect(control, SIGNAL(textChanged(const QString &)),
             q, SLOT(updateMicroFocus()));
 
     // for now, going completely overboard with updates.
     QObject::connect(control, SIGNAL(selectionChanged()),
             q, SLOT(update()));
 
-    QObject::connect(control, SIGNAL(displayTextChanged(const QString &)),
+    QObject::connect(control, SIGNAL(displayTextChanged(QString)),
             q, SLOT(update()));
 
-    QObject::connect(control, SIGNAL(updateNeeded(const QRect &)),
+    QObject::connect(control, SIGNAL(updateNeeded(QRect)),
             q, SLOT(update()));
 
     QStyleOptionFrameV2 opt;