From: Frank Reininghaus Date: Fri, 7 Dec 2012 21:31:24 +0000 (+0100) Subject: Merge remote-tracking branch 'origin/KDE/4.9' X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/b2a580c2b9b85a5a5b91e2eb3f218cea3b7b98c3?hp=-c Merge remote-tracking branch 'origin/KDE/4.9' --- b2a580c2b9b85a5a5b91e2eb3f218cea3b7b98c3 diff --combined src/kitemviews/kstandarditemlistwidget.cpp index 4d1031943,af1695465..e1f0f9df1 --- a/src/kitemviews/kstandarditemlistwidget.cpp +++ b/src/kitemviews/kstandarditemlistwidget.cpp @@@ -42,7 -42,6 +42,7 @@@ #include #include #include +#include // #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)); @@@ -610,13 -611,16 +612,16 @@@ 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 2a6538e35,6dd2b1e74..e46c53a91 --- a/src/main.cpp +++ b/src/main.cpp @@@ -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"), @@@ -82,11 -82,13 +82,13 @@@ 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; } diff --combined src/views/dolphinview.cpp index 035d3dc55,0e97c5a2b..54c0faa8d --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@@ -73,7 -73,7 +73,7 @@@ #include "zoomlevelinfo.h" #ifdef HAVE_NEPOMUK - #include + #include #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)), @@@ -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 selectedItems = selectionManager->selectedItems(); - for (QList::iterator it = m_selectedUrls.begin(); it != m_selectedUrls.end(); ++it) { + QList::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; } }