src/gui/widgets/qlineedit.cpp
changeset 30 5dc02b23752f
parent 23 89e065397ea6
child 33 3e2da88830cd
--- a/src/gui/widgets/qlineedit.cpp	Wed Jun 23 19:07:03 2010 +0300
+++ b/src/gui/widgets/qlineedit.cpp	Tue Jul 06 15:10:48 2010 +0300
@@ -383,8 +383,6 @@
     d->control->setText(text);
 }
 
-// ### Qt 4.7: remove this #if guard
-#if (QT_VERSION >= 0x407000) || defined(Q_WS_MAEMO_5)
 /*!
     \since 4.7
 
@@ -414,7 +412,6 @@
             update();
     }
 }
-#endif
 
 /*!
     \property QLineEdit::displayText
@@ -542,11 +539,16 @@
     if (mode == (EchoMode)d->control->echoMode())
         return;
     Qt::InputMethodHints imHints = inputMethodHints();
-    if (mode == Password) {
+    if (mode == Password || mode == NoEcho) {
         imHints |= Qt::ImhHiddenText;
     } else {
         imHints &= ~Qt::ImhHiddenText;
     }
+    if (mode != Normal) {
+        imHints |= (Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText);
+    } else {
+        imHints &= ~(Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText);
+    }
     setInputMethodHints(imHints);
     d->control->setEchoMode(mode);
     update();
@@ -1643,12 +1645,8 @@
                 if (!hasEditFocus() && !(event->modifiers() & Qt::ControlModifier)) {
                     if (!event->text().isEmpty() && event->text().at(0).isPrint()
                         && !isReadOnly())
-                    {
                         setEditFocus(true);
-#ifndef Q_OS_SYMBIAN
-                        clear();
-#endif
-                    } else {
+                    else {
                         event->ignore();
                         return;
                     }
@@ -1704,12 +1702,8 @@
     // commit text as they focus out without interfering with focus
     if (QApplication::keypadNavigationEnabled()
         && hasFocus() && !hasEditFocus()
-        && !e->preeditString().isEmpty()) {
+        && !e->preeditString().isEmpty())
         setEditFocus(true);
-#ifndef Q_OS_SYMBIAN
-        selectAll();        // so text is replaced rather than appended to
-#endif
-    }
 #endif
 
     d->control->processInputMethodEvent(e);
@@ -1881,13 +1875,18 @@
     }
     QRect lineRect(r.x() + d->horizontalMargin, d->vscroll, r.width() - 2*d->horizontalMargin, fm.height());
 
+    int minLB = qMax(0, -fm.minLeftBearing());
+    int minRB = qMax(0, -fm.minRightBearing());
+
     if (d->control->text().isEmpty()) {
         if (!hasFocus() && !d->placeholderText.isEmpty()) {
             QColor col = pal.text().color();
             col.setAlpha(128);
             QPen oldpen = p.pen();
             p.setPen(col);
-            p.drawText(lineRect, va, d->placeholderText);
+            lineRect.adjust(minLB, 0, 0, 0);
+            QString elidedText = fm.elidedText(d->placeholderText, Qt::ElideRight, lineRect.width());
+            p.drawText(lineRect, va, elidedText);
             p.setPen(oldpen);
             return;
         }
@@ -1901,8 +1900,6 @@
     // the below code handles all scrolling based on the textline (widthUsed,
     // minLB, minRB), the line edit rect (lineRect) and the cursor position
     // (cix).
-    int minLB = qMax(0, -fm.minLeftBearing());
-    int minRB = qMax(0, -fm.minRightBearing());
     int widthUsed = qRound(d->control->naturalTextWidth()) + 1 + minRB;
     if ((minLB + widthUsed) <=  lineRect.width()) {
         // text fits in lineRect; use hscroll for alignment
@@ -2052,12 +2049,13 @@
 */
 void QLineEdit::contextMenuEvent(QContextMenuEvent *event)
 {
-    QPointer<QMenu> menu = createStandardContextMenu();
-    menu->exec(event->globalPos());
-    delete menu;
+    if (QMenu *menu = createStandardContextMenu()) {
+        menu->setAttribute(Qt::WA_DeleteOnClose);
+        menu->popup(event->globalPos());
+    }
 }
 
-#if defined(Q_WS_WIN)
+#if defined(Q_WS_WIN) || defined(Q_WS_X11)
     extern bool qt_use_rtl_extensions;
 #endif
 
@@ -2129,7 +2127,7 @@
     }
 #endif
 
-#if defined(Q_WS_WIN)
+#if defined(Q_WS_WIN) || defined(Q_WS_X11)
     if (!d->control->isReadOnly() && qt_use_rtl_extensions) {
 #else
     if (!d->control->isReadOnly()) {