]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Merge remote-tracking branch 'origin/KDE/4.9'
authorFrank Reininghaus <frank78ac@googlemail.com>
Fri, 7 Dec 2012 21:31:24 +0000 (22:31 +0100)
committerFrank Reininghaus <frank78ac@googlemail.com>
Fri, 7 Dec 2012 21:31:24 +0000 (22:31 +0100)
1  2 
src/kitemviews/kstandarditemlistwidget.cpp
src/main.cpp
src/views/dolphinview.cpp

index 4d1031943f6e682c129f1484940008171b7579bb,af169546575158dce1ff6b586b509c394f2b3c96..e1f0f9df1c88953074f633139133a0fd70cce56f
@@@ -42,7 -42,6 +42,7 @@@
  #include <QStyleOption>
  #include <QTextLayout>
  #include <QTextLine>
 +#include <QPixmapCache>
  
  // #define KSTANDARDITEMLISTWIDGET_DEBUG
  
@@@ -194,7 -193,8 +194,8 @@@ KStandardItemListWidget::KStandardItemL
      m_additionalInfoTextColor(),
      m_overlay(),
      m_rating(),
-     m_roleEditor(0)
+     m_roleEditor(0),
+     m_oldRoleEditor(0)
  {
  }
  
@@@ -204,6 -204,7 +205,7 @@@ KStandardItemListWidget::~KStandardItem
      m_textInfo.clear();
  
      delete m_roleEditor;
+     delete m_oldRoleEditor;
  }
  
  void KStandardItemListWidget::setLayout(Layout layout)
@@@ -601,8 -602,8 +603,8 @@@ void KStandardItemListWidget::editedRol
  {
      Q_UNUSED(previous);
  
 -   QGraphicsView* parent = scene()->views()[0];
 -   if (current.isEmpty() || !parent || current != "text") {
 +    QGraphicsView* parent = scene()->views()[0];
 +    if (current.isEmpty() || !parent || current != "text") {
          if (m_roleEditor) {
              emit roleEditingCanceled(index(), current, data().value(current));
  
                         this, SLOT(slotRoleEditingCanceled(int,QByteArray,QVariant)));
              disconnect(m_roleEditor, SIGNAL(roleEditingFinished(int,QByteArray,QVariant)),
                         this, SLOT(slotRoleEditingFinished(int,QByteArray,QVariant)));
-             // Do not delete the role editor using deleteLater() because we might be
-             // inside a nested event loop which has been started by one of its event
-             // handlers (contextMenuEvent() or drag&drop inside mouseMoveEvent()).
-             m_roleEditor->deleteWhenIdle();
+             m_oldRoleEditor = m_roleEditor;
+             m_roleEditor->hide();
              m_roleEditor = 0;
          }
          return;
+     } else if (m_oldRoleEditor) {
+         // Delete the old editor before constructing the new one to
+         // prevent a memory leak.
+         m_oldRoleEditor->deleteLater();
+         m_oldRoleEditor = 0;
      }
  
      Q_ASSERT(!m_roleEditor);
@@@ -1268,57 -1272,48 +1273,55 @@@ QRectF KStandardItemListWidget::roleEdi
  
  void KStandardItemListWidget::closeRoleEditor()
  {
+     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)));
      if (m_roleEditor->hasFocus()) {
          // If the editing was not ended by a FocusOut event, we have
          // 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)));
-     // Do not delete the role editor using deleteLater() because we might be
-     // inside a nested event loop which has been started by one of its event
-     // handlers (contextMenuEvent() or drag&drop inside mouseMoveEvent()).
-     m_roleEditor->deleteWhenIdle();
+     m_oldRoleEditor = m_roleEditor;
+     m_roleEditor->hide();
      m_roleEditor = 0;
  }
  
  QPixmap KStandardItemListWidget::pixmapForIcon(const QString& name, int size)
  {
 -    const KIcon icon(name);
 -
 -    int requestedSize;
 -    if (size <= KIconLoader::SizeSmall) {
 -        requestedSize = KIconLoader::SizeSmall;
 -    } else if (size <= KIconLoader::SizeSmallMedium) {
 -        requestedSize = KIconLoader::SizeSmallMedium;
 -    } else if (size <= KIconLoader::SizeMedium) {
 -        requestedSize = KIconLoader::SizeMedium;
 -    } else if (size <= KIconLoader::SizeLarge) {
 -        requestedSize = KIconLoader::SizeLarge;
 -    } else if (size <= KIconLoader::SizeHuge) {
 -        requestedSize = KIconLoader::SizeHuge;
 -    } else if (size <= KIconLoader::SizeEnormous) {
 -        requestedSize = KIconLoader::SizeEnormous;
 -    } else if (size <= KIconLoader::SizeEnormous * 2) {
 -        requestedSize = KIconLoader::SizeEnormous * 2;
 -    } else {
 -        requestedSize = size;
 -    }
 +    const QString key = "KStandardItemListWidget:" % name  % ":" % QString::number(size);
 +    QPixmap pixmap;
 +
 +    if (!QPixmapCache::find(key, pixmap)) {
 +        const KIcon icon(name);
 +
 +        int requestedSize;
 +        if (size <= KIconLoader::SizeSmall) {
 +            requestedSize = KIconLoader::SizeSmall;
 +        } else if (size <= KIconLoader::SizeSmallMedium) {
 +            requestedSize = KIconLoader::SizeSmallMedium;
 +        } else if (size <= KIconLoader::SizeMedium) {
 +            requestedSize = KIconLoader::SizeMedium;
 +        } else if (size <= KIconLoader::SizeLarge) {
 +            requestedSize = KIconLoader::SizeLarge;
 +        } else if (size <= KIconLoader::SizeHuge) {
 +            requestedSize = KIconLoader::SizeHuge;
 +        } else if (size <= KIconLoader::SizeEnormous) {
 +            requestedSize = KIconLoader::SizeEnormous;
 +        } else if (size <= KIconLoader::SizeEnormous * 2) {
 +            requestedSize = KIconLoader::SizeEnormous * 2;
 +        } else {
 +            requestedSize = size;
 +        }
 +
 +        pixmap = icon.pixmap(requestedSize, requestedSize);
 +        if (requestedSize != size) {
 +            KPixmapModifier::scale(pixmap, QSize(size, size));
 +        }
  
 -    QPixmap pixmap = icon.pixmap(requestedSize, requestedSize);
 -    if (requestedSize != size) {
 -        KPixmapModifier::scale(pixmap, QSize(size, size));
 +        QPixmapCache::insert(key, pixmap);
      }
  
      return pixmap;
diff --combined src/main.cpp
index 2a6538e35751f9c07ceba53e8b662a32f97f72df,6dd2b1e7498008991bc19d656ec57fd38d3f52c5..e46c53a91078d43b5afa08cfedb69f83d93df4f5
@@@ -33,17 -33,17 +33,17 @@@ KDE_EXPORT int kdemain(int argc, char *
  {
      KAboutData about("dolphin", 0,
                       ki18nc("@title", "Dolphin"),
 -                     "2.1",
 +                     "2.1.95",
                       ki18nc("@title", "File Manager"),
                       KAboutData::License_GPL,
 -                     ki18nc("@info:credit", "(C) 2006-2012 Peter Penz"));
 +                     ki18nc("@info:credit", "(C) 2006-2012 Peter Penz and Frank Reininghaus"));
      about.setHomepage("http://dolphin.kde.org");
 -    about.addAuthor(ki18nc("@info:credit", "Peter Penz"),
 -                    ki18nc("@info:credit", "Maintainer and developer"),
 -                    "peter.penz19@gmail.com");
      about.addAuthor(ki18nc("@info:credit", "Frank Reininghaus"),
 -                    ki18nc("@info:credit", "Developer"),
 +                    ki18nc("@info:credit", "Maintainer (since 2012) and developer"),
                      "frank78ac@googlemail.com");
 +    about.addAuthor(ki18nc("@info:credit", "Peter Penz"),
 +                    ki18nc("@info:credit", "Maintainer and developer (2006-2012)"),
 +                    "peter.penz19@gmail.com");
      about.addAuthor(ki18nc("@info:credit", "Sebastian TrĂ¼g"),
                      ki18nc("@info:credit", "Developer"),
                      "trueg@kde.org"),
      options.add("+[Url]", ki18nc("@info:shell", "Document to open"));
      KCmdLineArgs::addCmdLineOptions(options);
  
-     DolphinApplication app;
-     if (app.isSessionRestored()) {
-         app.restoreSession();
+     {
+         DolphinApplication app;
+         if (app.isSessionRestored()) {
+             app.restoreSession();
+         }
+         app.exec(); // krazy:exclude=crashy
      }
-     app.exec(); // krazy:exclude=crashy
  
      return 0;
  }
index 035d3dc5589e88d2228873a0986a40f465333672,0e97c5a2bf40d27421d04e49641e4dc82a9ca1d5..54c0faa8d129662cbe54bd6eb83335496bd7a0d5
@@@ -73,7 -73,7 +73,7 @@@
  #include "zoomlevelinfo.h"
  
  #ifdef HAVE_NEPOMUK
 -    #include <Nepomuk/ResourceManager>
 +    #include <Nepomuk2/ResourceManager>
  #endif
  
  namespace {
@@@ -155,7 -155,6 +155,7 @@@ DolphinView::DolphinView(const KUrl& ur
  
      connect(m_model, SIGNAL(directoryLoadingStarted()),       this, SLOT(slotDirectoryLoadingStarted()));
      connect(m_model, SIGNAL(directoryLoadingCompleted()),     this, SLOT(slotDirectoryLoadingCompleted()));
 +    connect(m_model, SIGNAL(directoryLoadingCanceled()),      this, SIGNAL(directoryLoadingCanceled()));
      connect(m_model, SIGNAL(directoryLoadingProgress(int)),   this, SIGNAL(directoryLoadingProgress(int)));
      connect(m_model, SIGNAL(directorySortingProgress(int)),   this, SIGNAL(directorySortingProgress(int)));
      connect(m_model, SIGNAL(itemsChanged(KItemRangeList,QSet<QByteArray>)),
@@@ -639,25 -638,25 +639,25 @@@ void DolphinView::clearSelection(
  void DolphinView::renameSelectedItems()
  {
      const KFileItemList items = selectedItems();
 -     if (items.isEmpty()) {
 -         return;
 -     }
 -
 -     if (items.count() == 1 && GeneralSettings::renameInline()) {
 -         const int index = m_model->index(items.first());
 -         m_view->editRole(index, "text");
 -     } else {
 -         RenameDialog* dialog = new RenameDialog(this, items);
 -         dialog->setAttribute(Qt::WA_DeleteOnClose);
 -         dialog->show();
 -         dialog->raise();
 -         dialog->activateWindow();
 -     }
 -
 -     // Assure that the current index remains visible when KFileItemModel
 -     // will notify the view about changed items (which might result in
 -     // a changed sorting).
 -     m_assureVisibleCurrentIndex = true;
 +    if (items.isEmpty()) {
 +        return;
 +    }
 +
 +    if (items.count() == 1 && GeneralSettings::renameInline()) {
 +        const int index = m_model->index(items.first());
 +        m_view->editRole(index, "text");
 +    } else {
 +        RenameDialog* dialog = new RenameDialog(this, items);
 +        dialog->setAttribute(Qt::WA_DeleteOnClose);
 +        dialog->show();
 +        dialog->raise();
 +        dialog->activateWindow();
 +    }
 +
 +    // Assure that the current index remains visible when KFileItemModel
 +    // will notify the view about changed items (which might result in
 +    // a changed sorting).
 +    m_assureVisibleCurrentIndex = true;
  }
  
  void DolphinView::trashSelectedItems()
@@@ -800,14 -799,6 +800,14 @@@ void DolphinView::slotItemsActivated(co
          items.append(m_model->fileItem(index));
      }
  
 +    if (items.count() > 5) {
 +        QString question = QString("Are you sure you want to open %1 items?").arg(items.count());
 +        const int answer = KMessageBox::warningYesNo(this, question);
 +        if (answer != KMessageBox::Yes) {
 +            return;
 +        }
 +    }
 +
      foreach (const KFileItem& item, items) {
          if (item.isDir()) {
              emit tabRequested(item.url());
@@@ -848,7 -839,7 +848,7 @@@ void DolphinView::slotHeaderContextMenu
      bool nepomukRunning = false;
      bool indexingEnabled = false;
  #ifdef HAVE_NEPOMUK
 -    nepomukRunning = (Nepomuk::ResourceManager::instance()->initialized());
 +    nepomukRunning = (Nepomuk2::ResourceManager::instance()->initialized());
      if (nepomukRunning) {
          KConfig config("nepomukserverrc");
          indexingEnabled = config.group("Service-nepomukfileindexer").readEntry("autostart", false);
@@@ -1236,11 -1227,14 +1236,14 @@@ void DolphinView::updateViewState(
  
          QSet<int> selectedItems = selectionManager->selectedItems();
  
-         for (QList<KUrl>::iterator it = m_selectedUrls.begin(); it != m_selectedUrls.end(); ++it) {
+         QList<KUrl>::iterator it = m_selectedUrls.begin();
+         while (it != m_selectedUrls.end()) {
              const int index = m_model->index(*it);
              if (index >= 0) {
                  selectedItems.insert(index);
-                 m_selectedUrls.erase(it);
+                 it = m_selectedUrls.erase(it);
+             } else {
+                  ++it;
              }
          }