]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kstandarditemlistwidget.cpp
Merge branch 'KDE/4.9' of git://anongit.kde.org/kde-baseapps into KDE/4.9
[dolphin.git] / src / kitemviews / kstandarditemlistwidget.cpp
index 69f818c4e87bee0a71b3701488ce19989580f8a1..7ae7e2efcffc2f68c72a05cdbc3b29abc4c3aff4 100644 (file)
@@ -291,7 +291,7 @@ void KStandardItemListWidget::paint(QPainter* painter, const QStyleOptionGraphic
         QPointF pos = ratingTextInfo->pos;
         const Qt::Alignment align = ratingTextInfo->staticText.textOption().alignment();
         if (align & Qt::AlignHCenter) {
-            pos.rx() += (size().width() - m_rating.width()) / 2;
+            pos.rx() += (size().width() - m_rating.width()) / 2 - 2;
         }
         painter->drawPixmap(pos, m_rating);
     }
@@ -411,7 +411,7 @@ QPixmap KStandardItemListWidget::createDragPixmap(const QStyleOptionGraphicsItem
                                                   QWidget* widget)
 {
     QPixmap pixmap = KItemListWidget::createDragPixmap(option, widget);
-    if (m_layout != DetailsLayout || styleOption().extendedSelectionRegion) {
+    if (m_layout != DetailsLayout) {
         return pixmap;
     }
 
@@ -464,6 +464,11 @@ QFont KStandardItemListWidget::customizedFont(const QFont& baseFont) const
     return baseFont;
 }
 
+QPalette::ColorRole KStandardItemListWidget::normalTextColorRole() const
+{
+    return QPalette::Text;
+}
+
 void KStandardItemListWidget::setTextColor(const QColor& color)
 {
     if (color != m_customTextColor) {
@@ -480,8 +485,8 @@ QColor KStandardItemListWidget::textColor() const
     }
 
     const QPalette::ColorGroup group = isActiveWindow() ? QPalette::Active : QPalette::Inactive;
-    const QPalette::ColorRole role = isSelected() ? QPalette::HighlightedText : QPalette::Text;
-    return styleOption().palette.brush(group, role).color();
+    const QPalette::ColorRole role = isSelected() ? QPalette::HighlightedText : normalTextColorRole();
+    return styleOption().palette.color(group, role);
 }
 
 void KStandardItemListWidget::setOverlay(const QPixmap& overlay)
@@ -576,6 +581,11 @@ void KStandardItemListWidget::siblingsInformationChanged(const QBitArray& curren
     m_dirtyLayout = true;
 }
 
+int KStandardItemListWidget::selectionLength(const QString& text) const
+{
+    return text.length();
+}
+
 void KStandardItemListWidget::editedRoleChanged(const QByteArray& current, const QByteArray& previous)
 {
     Q_UNUSED(previous);
@@ -584,6 +594,11 @@ void KStandardItemListWidget::editedRoleChanged(const QByteArray& current, const
    if (current.isEmpty() || !parent || current != "text") {
         if (m_roleEditor) {
             emit roleEditingCanceled(index(), current, data().value(current));
+
+            disconnect(m_roleEditor, SIGNAL(roleEditingCanceled(int,QByteArray,QVariant)),
+                       this, SLOT(slotRoleEditingCanceled(int,QByteArray,QVariant)));
+            disconnect(m_roleEditor, SIGNAL(roleEditingFinished(int,QByteArray,QVariant)),
+                       this, SLOT(slotRoleEditingFinished(int,QByteArray,QVariant)));
             m_roleEditor->deleteLater();
             m_roleEditor = 0;
         }
@@ -605,18 +620,12 @@ void KStandardItemListWidget::editedRoleChanged(const QByteArray& current, const
     QTextOption textOption = textInfo->staticText.textOption();
     m_roleEditor->document()->setDefaultTextOption(textOption);
 
-    // Select the text without MIME-type extension
-    int selectionLength = text.length();
+    const int textSelectionLength = selectionLength(text);
 
-    const QString extension = KMimeType::extractKnownExtension(text);
-    if (!extension.isEmpty()) {
-        selectionLength -= extension.length() + 1;
-    }
-
-    if (selectionLength > 0) {
+    if (textSelectionLength > 0) {
         QTextCursor cursor = m_roleEditor->textCursor();
         cursor.movePosition(QTextCursor::StartOfBlock);
-        cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, selectionLength);
+        cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, textSelectionLength);
         m_roleEditor->setTextCursor(cursor);
     }
 
@@ -685,8 +694,8 @@ void KStandardItemListWidget::slotCutItemsChanged()
 }
 
 void KStandardItemListWidget::slotRoleEditingCanceled(int index,
-                                                  const QByteArray& role,
-                                                  const QVariant& value)
+                                                      const QByteArray& role,
+                                                      const QVariant& value)
 {
     closeRoleEditor();
     emit roleEditingCanceled(index, role, value);
@@ -694,8 +703,8 @@ void KStandardItemListWidget::slotRoleEditingCanceled(int index,
 }
 
 void KStandardItemListWidget::slotRoleEditingFinished(int index,
-                                                  const QByteArray& role,
-                                                  const QVariant& value)
+                                                      const QByteArray& role,
+                                                      const QVariant& value)
 {
     closeRoleEditor();
     emit roleEditingFinished(index, role, value);
@@ -914,7 +923,7 @@ void KStandardItemListWidget::updateTextsCache()
 
         const qreal availableWidth = (m_layout == DetailsLayout)
                                      ? columnWidth("rating") - columnPadding(option)
-                                     : m_textRect.width();
+                                     : size().width();
         if (ratingSize.width() > availableWidth) {
             ratingSize.rwidth() = availableWidth;
         }
@@ -1030,6 +1039,9 @@ void KStandardItemListWidget::updateIconsLayoutTextCache()
                 const QString elidedText = m_customizedFontMetrics.elidedText(text, Qt::ElideRight, maxWidth);
                 textInfo->staticText.setText(elidedText);
                 requiredWidth = m_customizedFontMetrics.width(elidedText);
+            } else if (role == "rating") {
+               // Use the width of the rating pixmap, because the rating text is empty.
+                requiredWidth = m_rating.width();
             }
         }
         layout.endLayout();
@@ -1246,6 +1258,11 @@ void KStandardItemListWidget::closeRoleEditor()
         // to transfer the keyboard focus back to the KItemListContainer.
         scene()->views()[0]->parentWidget()->setFocus();
     }
+
+    disconnect(m_roleEditor, SIGNAL(roleEditingCanceled(int,QByteArray,QVariant)),
+               this, SLOT(slotRoleEditingCanceled(int,QByteArray,QVariant)));
+    disconnect(m_roleEditor, SIGNAL(roleEditingFinished(int,QByteArray,QVariant)),
+               this, SLOT(slotRoleEditingFinished(int,QByteArray,QVariant)));
     m_roleEditor->deleteLater();
     m_roleEditor = 0;
 }