Hello community, here is the log from the commit of package kdebase4 for openSUSE:Factory checked in at 2013-06-11 06:12:33 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kdebase4 (Old) and /work/SRC/openSUSE:Factory/.kdebase4.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kdebase4" Changes: -------- --- /work/SRC/openSUSE:Factory/kdebase4/kdebase4.changes 2013-05-16 16:48:49.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.kdebase4.new/kdebase4.changes 2013-06-11 09:31:08.000000000 +0200 @@ -1,0 +2,8 @@ +Sat Jun 1 09:21:12 UTC 2013 - [email protected] + +- Update to 4.10.4 + * Bugfix release + * See http://www.kde.org/announcements/announce-4.10.4.php + * resolves bnc#8122760 + +------------------------------------------------------------------- Old: ---- kde-baseapps-4.10.3.tar.xz New: ---- kde-baseapps-4.10.4.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kdebase4.spec ++++++ --- /var/tmp/diff_new_pack.0YsMKo/_old 2013-06-11 09:31:09.000000000 +0200 +++ /var/tmp/diff_new_pack.0YsMKo/_new 2013-06-11 09:31:09.000000000 +0200 @@ -17,7 +17,7 @@ Name: kdebase4 -Version: 4.10.3 +Version: 4.10.4 Release: 0 Summary: The Base KDE Apps License: GPL-2.0+ ++++++ kde-baseapps-4.10.3.tar.xz -> kde-baseapps-4.10.4.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/CMakeLists.txt new/kde-baseapps-4.10.4/CMakeLists.txt --- old/kde-baseapps-4.10.3/CMakeLists.txt 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/CMakeLists.txt 2013-05-28 20:41:36.000000000 +0200 @@ -7,7 +7,7 @@ include(CTestConfig.cmake) #search packages used by KDE -set(KDE_MIN_VERSION "4.9.80") +set(KDE_MIN_VERSION "4.10.2") set(SOPRANO_MIN_VERSION "2.7.56") find_package(KDE4 4.8.0 REQUIRED) find_package(Strigi REQUIRED) Files old/kde-baseapps-4.10.3/doc/dolphin/index.cache.bz2 and new/kde-baseapps-4.10.4/doc/dolphin/index.cache.bz2 differ Files old/kde-baseapps-4.10.3/doc/kdepasswd/index.cache.bz2 and new/kde-baseapps-4.10.4/doc/kdepasswd/index.cache.bz2 differ Files old/kde-baseapps-4.10.3/doc/kfind/index.cache.bz2 and new/kde-baseapps-4.10.4/doc/kfind/index.cache.bz2 differ Files old/kde-baseapps-4.10.3/doc/konqueror/index.cache.bz2 and new/kde-baseapps-4.10.4/doc/konqueror/index.cache.bz2 differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/dolphin/src/kitemviews/kfileitemmodel.cpp new/kde-baseapps-4.10.4/dolphin/src/kitemviews/kfileitemmodel.cpp --- old/kde-baseapps-4.10.3/dolphin/src/kitemviews/kfileitemmodel.cpp 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/dolphin/src/kitemviews/kfileitemmodel.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -1333,10 +1333,6 @@ data.insert("path", path); } - if (m_requestRole[IsExpandedRole]) { - data.insert("isExpanded", false); - } - if (m_requestRole[IsExpandableRole]) { data.insert("isExpandable", item.isDir() && item.url() == item.targetUrl()); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/dolphin/src/kitemviews/kfileitemmodelrolesupdater.cpp new/kde-baseapps-4.10.4/dolphin/src/kitemviews/kfileitemmodelrolesupdater.cpp --- old/kde-baseapps-4.10.3/dolphin/src/kitemviews/kfileitemmodelrolesupdater.cpp 2013-05-03 06:36:32.000000000 +0200 +++ new/kde-baseapps-4.10.4/dolphin/src/kitemviews/kfileitemmodelrolesupdater.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -630,6 +630,13 @@ if (getSizeRole || getIsExpandableRole) { const int index = m_model->index(KUrl(path)); if (index >= 0) { + if (!m_model->fileItem(index).isDir()) { + // If INotify is used, KDirWatch issues the dirty() signal + // also for changed files inside the directory, even if we + // don't enable this behavior explicitly (see bug 309740). + return; + } + QHash<QByteArray, QVariant> data; const int count = subItemsCount(path); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/dolphin/src/kitemviews/kstandarditemmodel.cpp new/kde-baseapps-4.10.4/dolphin/src/kitemviews/kstandarditemmodel.cpp --- old/kde-baseapps-4.10.3/dolphin/src/kitemviews/kstandarditemmodel.cpp 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/dolphin/src/kitemviews/kstandarditemmodel.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -122,6 +122,15 @@ } } +void KStandardItemModel::clear() +{ + int size = m_items.size(); + m_items.clear(); + m_indexesForItems.clear(); + + emit itemsRemoved(KItemRangeList() << KItemRange(0, size)); +} + KStandardItem* KStandardItemModel::item(int index) const { if (index < 0 || index >= m_items.count()) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/dolphin/src/kitemviews/kstandarditemmodel.h new/kde-baseapps-4.10.4/dolphin/src/kitemviews/kstandarditemmodel.h --- old/kde-baseapps-4.10.3/dolphin/src/kitemviews/kstandarditemmodel.h 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/dolphin/src/kitemviews/kstandarditemmodel.h 2013-05-28 20:41:36.000000000 +0200 @@ -78,6 +78,7 @@ virtual QString roleDescription(const QByteArray& role) const; virtual QList<QPair<int, QVariant> > groups() const; + virtual void clear(); protected: /** * Is invoked after an item has been inserted and before the signal diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/dolphin/src/panels/places/placesitemmodel.cpp new/kde-baseapps-4.10.4/dolphin/src/panels/places/placesitemmodel.cpp --- old/kde-baseapps-4.10.3/dolphin/src/panels/places/placesitemmodel.cpp 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/dolphin/src/panels/places/placesitemmodel.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -88,7 +88,11 @@ m_storageSetupInProgress() { #ifdef HAVE_NEPOMUK - if (Nepomuk2::ResourceManager::instance()->initialized()) { + Nepomuk2::ResourceManager* rm = Nepomuk2::ResourceManager::instance(); + connect(rm, SIGNAL(nepomukSystemStarted()), this, SLOT(slotNepomukStarted())); + connect(rm, SIGNAL(nepomukSystemStopped()), this, SLOT(slotNepomukStopped())); + + if (rm->initialized()) { KConfig config("nepomukserverrc"); m_fileIndexingEnabled = config.group("Service-nepomukfileindexer").readEntry("autostart", true); } @@ -949,6 +953,40 @@ } } +void PlacesItemModel::clear() { + m_bookmarkedItems.clear(); + KStandardItemModel::clear(); +} + +void PlacesItemModel::slotNepomukStarted() +{ + KConfig config("nepomukserverrc"); + m_fileIndexingEnabled = config.group("Service-nepomukfileindexer").readEntry("autostart", true); + if (m_fileIndexingEnabled) { + m_systemBookmarks.clear(); + m_systemBookmarksIndexes.clear(); + createSystemBookmarks(); + + clear(); + loadBookmarks(); + } +} + +void PlacesItemModel::slotNepomukStopped() +{ + if (m_fileIndexingEnabled) { + m_fileIndexingEnabled = false; + + m_systemBookmarks.clear(); + m_systemBookmarksIndexes.clear(); + createSystemBookmarks(); + + clear(); + loadBookmarks(); + } +} + + void PlacesItemModel::initializeAvailableDevices() { QString predicate("[[[[ StorageVolume.ignored == false AND [ StorageVolume.usage == 'FileSystem' OR StorageVolume.usage == 'Encrypted' ]]" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/dolphin/src/panels/places/placesitemmodel.h new/kde-baseapps-4.10.4/dolphin/src/panels/places/placesitemmodel.h --- old/kde-baseapps-4.10.3/dolphin/src/panels/places/placesitemmodel.h 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/dolphin/src/panels/places/placesitemmodel.h 2013-05-28 20:41:36.000000000 +0200 @@ -133,6 +133,7 @@ */ static KUrl convertedUrl(const KUrl& url); + virtual void clear(); signals: void errorMessage(const QString& message); void storageSetupDone(int index, bool success); @@ -163,6 +164,8 @@ */ void saveBookmarks(); + void slotNepomukStarted(); + void slotNepomukStopped(); private: struct SystemBookmarkData; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/dolphin/src/search/dolphinsearchbox.cpp new/kde-baseapps-4.10.4/dolphin/src/search/dolphinsearchbox.cpp --- old/kde-baseapps-4.10.3/dolphin/src/search/dolphinsearchbox.cpp 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/dolphin/src/search/dolphinsearchbox.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -159,7 +159,7 @@ void DolphinSearchBox::setReadOnly(bool readOnly, const KUrl& query) { - if (m_readOnly != readOnly) { + if (m_readOnly != readOnly || m_readOnlyQuery != query) { m_readOnly = readOnly; m_readOnlyQuery = query; applyReadOnlyState(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/dolphin/src/tests/CMakeLists.txt new/kde-baseapps-4.10.4/dolphin/src/tests/CMakeLists.txt --- old/kde-baseapps-4.10.3/dolphin/src/tests/CMakeLists.txt 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/dolphin/src/tests/CMakeLists.txt 2013-05-28 20:41:36.000000000 +0200 @@ -18,9 +18,14 @@ testdir.cpp ../kitemviews/kfileitemmodel.cpp ../kitemviews/kfileitemlistview.cpp + ../kitemviews/kfileitemlistwidget.cpp ../kitemviews/kitemmodelbase.cpp ../kitemviews/kitemlistview.cpp + ../kitemviews/kitemlistcontainer.cpp + ../kitemviews/kitemlistwidget.cpp ../kitemviews/kitemlistviewaccessible.cpp + ../kitemviews/kstandarditemlistview.cpp + ../kitemviews/kstandarditemlistwidget.cpp ) kde4_add_unit_test(kitemlistcontrollertest TEST ${kitemlistcontrollertest_SRCS}) target_link_libraries(kitemlistcontrollertest dolphinprivate ${KDE4_KIO_LIBS} ${QT_QTTEST_LIBRARY}) @@ -34,6 +39,10 @@ ../kitemviews/kitemmodelbase.cpp ../kitemviews/kitemlistview.cpp ../kitemviews/kitemlistviewaccessible.cpp + ../kitemviews/kitemlistcontainer.cpp + ../kitemviews/kitemlistwidget.cpp + ../kitemviews/kstandarditemlistview.cpp + ../kitemviews/kstandarditemlistwidget.cpp ) kde4_add_unit_test(kfileitemlistviewtest TEST ${kfileitemlistviewtest_SRCS}) target_link_libraries(kfileitemlistviewtest dolphinprivate ${KDE4_KIO_LIBS} ${QT_QTTEST_LIBRARY}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/dolphin/src/tests/kfileitemmodeltest.cpp new/kde-baseapps-4.10.4/dolphin/src/tests/kfileitemmodeltest.cpp --- old/kde-baseapps-4.10.3/dolphin/src/tests/kfileitemmodeltest.cpp 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/dolphin/src/tests/kfileitemmodeltest.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -75,6 +75,7 @@ void testIndexForKeyboardSearch(); void testNameFilter(); void testEmptyPath(); + void testRefreshExpandedItem(); void testRemoveHiddenItems(); void collapseParentOfHiddenItems(); void removeParentOfHiddenItems(); @@ -802,6 +803,39 @@ } /** + * Verifies that the 'isExpanded' state of folders does not change when the + * 'refreshItems' signal is received, see https://bugs.kde.org/show_bug.cgi?id=299675. + */ +void KFileItemModelTest::testRefreshExpandedItem() +{ + QSet<QByteArray> modelRoles = m_model->roles(); + modelRoles << "isExpanded" << "isExpandable" << "expandedParentsCount"; + m_model->setRoles(modelRoles); + + QStringList files; + files << "a/1" << "a/2" << "3" << "4"; + m_testDir->createFiles(files); + + m_model->loadDirectory(m_testDir->url()); + QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout)); + QCOMPARE(m_model->count(), 3); // "a/", "3", "4" + + m_model->setExpanded(0, true); + QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout)); + QCOMPARE(m_model->count(), 5); // "a/", "a/1", "a/2", "3", "4" + QVERIFY(m_model->isExpanded(0)); + + QSignalSpy spyItemsChanged(m_model, SIGNAL(itemsChanged(KItemRangeList,QSet<QByteArray>))); + + const KFileItem item = m_model->fileItem(0); + m_model->slotRefreshItems(QList<QPair<KFileItem, KFileItem> >() << qMakePair(item, item)); + QVERIFY(!spyItemsChanged.isEmpty()); + + QCOMPARE(m_model->count(), 5); // "a/", "a/1", "a/2", "3", "4" + QVERIFY(m_model->isExpanded(0)); +} + +/** * Verify that removing hidden files and folders from the model does not * result in a crash, see https://bugs.kde.org/show_bug.cgi?id=314046 */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/dolphin/src/views/dolphinviewactionhandler.cpp new/kde-baseapps-4.10.4/dolphin/src/views/dolphinviewactionhandler.cpp --- old/kde-baseapps-4.10.3/dolphin/src/views/dolphinviewactionhandler.cpp 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/dolphin/src/views/dolphinviewactionhandler.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -528,8 +528,10 @@ if (action) { action->setChecked(true); - QAction* sortByMenu = m_actionCollection->action("sort"); - sortByMenu->setIcon(KIcon(action->icon())); + if (!action->icon().isNull()) { + QAction* sortByMenu = m_actionCollection->action("sort"); + sortByMenu->setIcon(KIcon(action->icon())); + } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/keditbookmarks/kbookmarkmodel/model.cpp new/kde-baseapps-4.10.4/keditbookmarks/kbookmarkmodel/model.cpp --- old/kde-baseapps-4.10.3/keditbookmarks/kbookmarkmodel/model.cpp 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/keditbookmarks/kbookmarkmodel/model.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -370,10 +370,11 @@ if (data->hasFormat(s_mime_bookmark_addresses)) { KBookmark::List bookmarks; QList<QByteArray> addresses = data->data(s_mime_bookmark_addresses).split(';'); + qSort(addresses); Q_FOREACH(const QByteArray& address, addresses) { KBookmark bk = bookmarkManager()->findByAddress(QString::fromLatin1(address)); kDebug() << "Extracted bookmark:" << bk.address(); - bookmarks.push_back(bk); + bookmarks.prepend(bk); // reverse order, so that we don't invalidate addresses (#287038) } KEBMacroCommand * cmd = CmdGen::itemsMoved(this, bookmarks, addr, false); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/keditbookmarks/kbookmarkmodel/tests/kbookmarkmodeltest.cpp new/kde-baseapps-4.10.4/keditbookmarks/kbookmarkmodel/tests/kbookmarkmodeltest.cpp --- old/kde-baseapps-4.10.3/keditbookmarks/kbookmarkmodel/tests/kbookmarkmodeltest.cpp 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/keditbookmarks/kbookmarkmodel/tests/kbookmarkmodeltest.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -119,7 +119,7 @@ delete deleteCmd; } - void testCreateFolder() + void testCreateFolder() // and test moving stuff around { CreateCommand* folderCmd = new CreateCommand(m_model, "/0", "folder", "folder", true /*open*/); m_cmdHistory->addCommand(folderCmd); // calls redo @@ -160,6 +160,22 @@ QVERIFY(ok); QCOMPARE(BookmarkLister::urlList(m_bookmarkManager), QStringList() << first << kde); delete mimeData; + + // Create new folder, then move both bookmarks into it (#287038) + m_cmdHistory->addCommand(new CreateCommand(m_model, "/1", "folder2", "folder2", true)); + QCOMPARE(BookmarkLister::addressList(m_bookmarkManager), QStringList() << "/0/" << "/0/0" << "/0/1" << "/1/"); + QCOMPARE(m_model->rowCount(m_rootIndex), 2); + + QModelIndex firstIndex = m_model->indexForBookmark(m_bookmarkManager->findByAddress("/0/0")); + kdeIndex = m_model->indexForBookmark(m_bookmarkManager->findByAddress("/0/1")); + mimeData = m_model->mimeData(QModelIndexList() << firstIndex << kdeIndex); + QModelIndex folder2Index = m_model->indexForBookmark(m_bookmarkManager->findByAddress("/1")); + ok = m_model->dropMimeData(mimeData, Qt::MoveAction, -1, 0, folder2Index); + QVERIFY(ok); + QCOMPARE(BookmarkLister::addressList(m_bookmarkManager), QStringList() << "/0/" << "/1/" << "/1/0" << "/1/1"); + QCOMPARE(BookmarkLister::urlList(m_bookmarkManager), QStringList() << kde << first); + delete mimeData; + undoAll(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/konq-plugins/akregator/konqfeedicon.cpp new/kde-baseapps-4.10.4/konq-plugins/akregator/konqfeedicon.cpp --- old/kde-baseapps-4.10.3/konq-plugins/akregator/konqfeedicon.cpp 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/konq-plugins/akregator/konqfeedicon.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -79,6 +79,7 @@ m_part = part; connect(m_part, SIGNAL(completed()), this, SLOT(addFeedIcon())); connect(m_part, SIGNAL(completed(bool)), this, SLOT(addFeedIcon())); + connect(m_part, SIGNAL(started(KIO::Job*)), this, SLOT(removeFeedIcon())); } } } @@ -187,7 +188,7 @@ void KonqFeedIcon::removeFeedIcon() { m_feedList.clear(); - if(m_feedIcon) + if (m_feedIcon && m_statusBarEx) { m_statusBarEx->removeStatusBarItem(m_feedIcon); delete m_feedIcon; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/konq-plugins/fsview/scan.cpp new/kde-baseapps-4.10.4/konq-plugins/fsview/scan.cpp --- old/kde-baseapps-4.10.3/konq-plugins/fsview/scan.cpp 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/konq-plugins/fsview/scan.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -243,7 +243,8 @@ QStringList::ConstIterator it; for (it = fileList.constBegin(); it != fileList.constEnd(); ++it ) { - KDE::lstat( si->absPath + QLatin1Char('/') + (*it), &buff ); + if (KDE::lstat( si->absPath + QLatin1Char('/') + (*it), &buff ) != 0) + continue; _files.append( ScanFile(*it, buff.st_size) ); _fileSize += buff.st_size; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/konqueror/about/konq_aboutpage.desktop new/kde-baseapps-4.10.4/konqueror/about/konq_aboutpage.desktop --- old/kde-baseapps-4.10.3/konqueror/about/konq_aboutpage.desktop 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/konqueror/about/konq_aboutpage.desktop 2013-05-28 20:41:36.000000000 +0200 @@ -38,7 +38,7 @@ Name[hr]=O programu Konqueror Name[hsb]=Informaciska strona za Konqueror Name[hu]=A Konqueror névjegye -Name[ia]=Pagina de Circa per Konqueror +Name[ia]=Pagina de a proposito de Konqueror Name[id]=Halaman Tentang untuk Konqueror Name[is]=Upplýsingasíða Konqueror Name[it]=Pagina di informazioni di Konqueror diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/konqueror/konqbrowser.desktop new/kde-baseapps-4.10.4/konqueror/konqbrowser.desktop --- old/kde-baseapps-4.10.3/konqueror/konqbrowser.desktop 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/konqueror/konqbrowser.desktop 2013-05-28 20:41:36.000000000 +0200 @@ -122,7 +122,7 @@ GenericName[et]=Veebibrauser GenericName[eu]=Web arakatzailea GenericName[fa]=مرورگر وب -GenericName[fi]=WWW-selain +GenericName[fi]=Verkkoselain GenericName[fr]=Navigateur Web GenericName[fy]=Webblêder GenericName[ga]=Brabhsálaí Gréasáin diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/konqueror/profile_midnightcommander.desktop new/kde-baseapps-4.10.4/konqueror/profile_midnightcommander.desktop --- old/kde-baseapps-4.10.3/konqueror/profile_midnightcommander.desktop 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/konqueror/profile_midnightcommander.desktop 2013-05-28 20:41:36.000000000 +0200 @@ -1,11 +1,4 @@ [Profile] -Container0_Children=Container1,View2 -Container0_Orientation=Vertical -Container0_SplitterSizes=481,87 -Container1_Children=View3,View4 -Container1_Orientation=Horizontal -Container1_SplitterSizes=100,100 -Height=658 Name=Midnight Commander Name[af]=Midnight Commander Name[ar]=قائد منتصف الليل @@ -98,19 +91,30 @@ Name[zh_TW]=Midnight Commander XMLUIFile=konqueror.rc RootItem=Container0 +Container0_Children=Tabs1,View2 +Container0_Orientation=Vertical +Container0_SplitterSizes=481,87 +Tabs1_Children=ContainerT0 +ContainerT0_Children=View3,View4 +ContainerT0_Orientation=Horizontal +ContainerT0_SplitterSizes=100,100 View2_LinkedView=true View2_PassiveMode=false View2_ServiceName=konsolepart View2_ServiceType=Browser/View View2_ToggleView=true +View2_URL[$e]=file://$HOME View3_LinkedView=false View3_PassiveMode=false -View3_ServiceName=konq_detailedlistview +View3_ServiceName=dolphinpart View3_ServiceType=inode/directory View3_ToggleView=false +View3_URL[$e]=file://$HOME View4_LinkedView=false View4_PassiveMode=false -View4_ServiceName=konq_detailedlistview +View4_ServiceName=dolphinpart View4_ServiceType=inode/directory View4_ToggleView=false +View4_URL[$e]=file://$HOME Width=600 +Height=658 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/konqueror/profile_webbrowsing.desktop new/kde-baseapps-4.10.4/konqueror/profile_webbrowsing.desktop --- old/kde-baseapps-4.10.3/konqueror/profile_webbrowsing.desktop 2013-05-03 06:36:28.000000000 +0200 +++ new/kde-baseapps-4.10.4/konqueror/profile_webbrowsing.desktop 2013-05-28 20:41:36.000000000 +0200 @@ -25,7 +25,7 @@ Name[et]=Veebi lehitsemine Name[eu]=Webak arakatzea Name[fa]=مرورگر وب -Name[fi]=WWW-selailu +Name[fi]=Verkkoselaus Name[fr]=Navigation Web Name[fy]=Webblêdzje Name[ga]=Brabhsáil an Ghréasáin diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/konqueror/src/konqmainwindow.cpp new/kde-baseapps-4.10.4/konqueror/src/konqmainwindow.cpp --- old/kde-baseapps-4.10.3/konqueror/src/konqmainwindow.cpp 2013-05-03 06:36:29.000000000 +0200 +++ new/kde-baseapps-4.10.4/konqueror/src/konqmainwindow.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -1600,7 +1600,9 @@ if (!m_currentView) return; // Gather data from the action, since the action will be deleted by changePart - const QString modeName = action->objectName(); + QString modeName = action->objectName(); + Q_ASSERT(modeName.endsWith("-viewmode")); + modeName.chop(9); const QString internalViewMode = action->data().toString(); if ( m_currentView->service()->desktopEntryName() != modeName ) { @@ -5044,7 +5046,6 @@ // action, e.g. konsolepart added through ToggleViewGUIClient in the ctor will be // overwritten by the view mode konsolepart action added here. #266517. actionCollection()->addAction(desktopEntryName + QLatin1String("-viewmode"), action); - action->setObjectName(desktopEntryName); action->setActionGroup(m_viewModesGroup); m_viewModeMenu->menu()->addAction(action); @@ -5069,7 +5070,7 @@ const QString actionName = view->service()->desktopEntryName(); const QString actionData = view->internalViewMode(); Q_FOREACH(QAction* action, m_viewModesGroup->actions()) { - if (action->objectName() == actionName && + if (action->objectName() == actionName + QLatin1String("-viewmode") && action->data().toString() == actionData) { action->setChecked(true); break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/konqueror/src/tests/konqhtmltest.cpp new/kde-baseapps-4.10.4/konqueror/src/tests/konqhtmltest.cpp --- old/kde-baseapps-4.10.3/konqueror/src/tests/konqhtmltest.cpp 2013-05-03 06:36:29.000000000 +0200 +++ new/kde-baseapps-4.10.4/konqueror/src/tests/konqhtmltest.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -22,6 +22,7 @@ #include <kstandarddirs.h> #include <ktoolbar.h> #include <kdebug.h> +#include <ksycoca.h> #include <QScrollArea> #include <qtest_kde.h> #include <qtest_gui.h> @@ -41,6 +42,21 @@ { KonqSessionManager::self()->disableAutosave(); //qRegisterMetaType<KonqView *>("KonqView*"); + + // Ensure the tests use KHTML, not kwebkitpart + // This code is inspired by settings/konqhtml/generalopts.cpp + KSharedConfig::Ptr profile = KSharedConfig::openConfig("mimeapps.list", KConfig::NoGlobals, "xdgdata-apps"); + KConfigGroup addedServices(profile, "Added KDE Service Associations"); + Q_FOREACH(const QString& mimeType, QStringList() << "text/html" << "application/xhtml+xml" << "application/xml") { + QStringList services = addedServices.readXdgListEntry(mimeType); + services.removeAll("khtml.desktop"); + services.prepend("khtml.desktop"); // make it the preferred one + addedServices.writeXdgListEntry(mimeType, services); + } + profile->sync(); + + // kbuildsycoca is the one reading mimeapps.list, so we need to run it now + QProcess::execute(KGlobal::dirs()->findExe(KBUILDSYCOCA_EXENAME)); } void cleanupTestCase() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/konqueror/src/tests/konqviewmgrtest.cpp new/kde-baseapps-4.10.4/konqueror/src/tests/konqviewmgrtest.cpp --- old/kde-baseapps-4.10.3/konqueror/src/tests/konqviewmgrtest.cpp 2013-05-03 06:36:29.000000000 +0200 +++ new/kde-baseapps-4.10.4/konqueror/src/tests/konqviewmgrtest.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -21,6 +21,7 @@ #include <konqmisc.h> #include "../konqsettingsxt.h" #include <QToolBar> +#include <QLayout> #include <qtestmouse.h> #include <konqframe.h> @@ -34,7 +35,7 @@ #include <kconfiggroup.h> #include <ktempdir.h> #include <kio/job.h> -#include <QLayout> +#include <ksycoca.h> #include <khtml_part.h> #include <khtmlview.h> @@ -122,6 +123,21 @@ QCOMPARE(KGlobal::mainComponent().componentName(), QString("konqueror")); QCOMPARE(KonqSettings::mmbOpensTab(), true); QCOMPARE(KonqSettings::popupsWithinTabs(), false); + + // Ensure the tests use KHTML, not kwebkitpart + // This code is inspired by settings/konqhtml/generalopts.cpp + KSharedConfig::Ptr profile = KSharedConfig::openConfig("mimeapps.list", KConfig::NoGlobals, "xdgdata-apps"); + KConfigGroup addedServices(profile, "Added KDE Service Associations"); + Q_FOREACH(const QString& mimeType, QStringList() << "text/html" << "application/xhtml+xml" << "application/xml") { + QStringList services = addedServices.readXdgListEntry(mimeType); + services.removeAll("khtml.desktop"); + services.prepend("khtml.desktop"); // make it the preferred one + addedServices.writeXdgListEntry(mimeType, services); + } + profile->sync(); + + // kbuildsycoca is the one reading mimeapps.list, so we need to run it now + QProcess::execute(KGlobal::dirs()->findExe(KBUILDSYCOCA_EXENAME)); } void ViewMgrTest::testCreateFirstView() @@ -349,6 +365,7 @@ // "Click" on the link qDebug() << "ACTIVATING LINK"; KHTMLPart* part = qobject_cast<KHTMLPart *>(view->part()); + QVERIFY(part); DOM::HTMLAnchorElement anchor = part->htmlDocument().getElementsByTagName(DOM::DOMString("a")).item(0); QVERIFY(!anchor.isNull()); anchor.focus(); @@ -413,6 +430,7 @@ KonqView* view = mainWindow.currentView(); KHTMLPart* part = qobject_cast<KHTMLPart *>(view->part()); qDebug() << "CLICKING NOW"; + QVERIFY(part); QTest::mouseClick(part->view()->widget(), Qt::LeftButton, Qt::ControlModifier, QPoint(10, 10)); QTest::qWait(100); // Expected behavior for Ctrl+click: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/lib/konq/konq_operations.cpp new/kde-baseapps-4.10.4/lib/konq/konq_operations.cpp --- old/kde-baseapps-4.10.3/lib/konq/konq_operations.cpp 2013-05-03 06:36:29.000000000 +0200 +++ new/kde-baseapps-4.10.4/lib/konq/konq_operations.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -461,11 +461,13 @@ allItemsAreFromTrash = false; } - bool linkOnly = false; + bool linkOnly = false; // if true, we'll show a popup menu, but with only "link" in it (for confirmation) if (isDesktopFile && !KAuthorized::authorizeKAction("run_desktop_files") && - (m_destUrl.path( KUrl::AddTrailingSlash ) == KGlobalSettings::desktopPath()) ) - { - linkOnly = true; + (m_destUrl.path(KUrl::AddTrailingSlash) == KGlobalSettings::desktopPath()) ) { + linkOnly = true; + } else if ( allItemsAreFromTrash && lst.first().path() == "/" ) { + // Dropping a link to the trash: don't move the full contents, just make a link (#319660) + linkOnly = true; } if ( !mlst.isEmpty() && m_destUrl.protocol() == "trash" ) @@ -484,8 +486,7 @@ deleteLater(); return; } - } - else if ( allItemsAreFromTrash || m_destUrl.protocol() == "trash" ) { + } else if (!linkOnly && (allItemsAreFromTrash || m_destUrl.protocol() == "trash")) { // No point in asking copy/move/link when using dnd from or to the trash. action = Qt::MoveAction; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/plasma/applets/folderview/folderview.cpp new/kde-baseapps-4.10.4/plasma/applets/folderview/folderview.cpp --- old/kde-baseapps-4.10.3/plasma/applets/folderview/folderview.cpp 2013-05-03 06:36:29.000000000 +0200 +++ new/kde-baseapps-4.10.4/plasma/applets/folderview/folderview.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -321,7 +321,8 @@ : Plasma::Containment(parent, args), m_previewGenerator(0), m_placesModel(0), - m_itemActions(0), + m_itemActions(new KFileItemActions(this)), + m_openWithAction(0), m_iconView(0), m_listView(0), m_label(0), @@ -613,10 +614,6 @@ m_iconView->setIconPositionsData(m_iconView->iconPositionsData()); } - // So the KFileItemActions will be recreated for the new URL. - delete m_itemActions; - m_itemActions = 0; - setUrl(m_url); } } @@ -1686,18 +1683,23 @@ actions.append(m_actionCollection.action("refresh")); - // Add an action for opening the folder in the preferred application. - if (!m_itemActions) { - // Create a new KFileItem to prevent the target URL in the root item - // from being used. In this case we want the configured URL instead. - KFileItem item(rootItem.mode(), rootItem.permissions(), m_url); + // Create a new KFileItem to prevent the target URL in the root item + // from being used. In this case we want the configured URL instead. + KFileItem item(rootItem.mode(), rootItem.permissions(), m_url); + KFileItemListProperties itemList(KFileItemList() << item); + m_itemActions->setItemListProperties(itemList); + + // FIXME: The actions instanciated by KFileItemActions::preferredOpenWithAction() + // (see below) are eventually deleted in its constructor, but it would be better + // to find a way to not keep them around rather than just to hide them. + if (m_openWithAction) { + m_openWithAction->setVisible(false); + } - KFileItemListProperties itemList(KFileItemList() << item); + // Add an action for opening the folder in the preferred application. + m_openWithAction = m_itemActions->preferredOpenWithAction(QString()); + actions.append(m_openWithAction); - m_itemActions = new KFileItemActions(this); - m_itemActions->setItemListProperties(itemList); - } - actions.append(m_itemActions->preferredOpenWithAction(QString())); if (m_url.protocol() == "trash") { KConfig trashConfig("trashrc", KConfig::SimpleConfig); m_actionCollection.action("empty_trash")->setEnabled(!trashConfig.group("Status") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/plasma/applets/folderview/folderview.h new/kde-baseapps-4.10.4/plasma/applets/folderview/folderview.h --- old/kde-baseapps-4.10.3/plasma/applets/folderview/folderview.h 2013-05-03 06:36:29.000000000 +0200 +++ new/kde-baseapps-4.10.4/plasma/applets/folderview/folderview.h 2013-05-28 20:41:36.000000000 +0200 @@ -183,6 +183,7 @@ KDirModel *m_dirModel; KFilePlacesModel *m_placesModel; KFileItemActions *m_itemActions; + KAction *m_openWithAction; IconView *m_iconView; ListView *m_listView; Label *m_label; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/plasma/applets/folderview/iconview.cpp new/kde-baseapps-4.10.4/plasma/applets/folderview/iconview.cpp --- old/kde-baseapps-4.10.3/plasma/applets/folderview/iconview.cpp 2013-05-03 06:36:29.000000000 +0200 +++ new/kde-baseapps-4.10.4/plasma/applets/folderview/iconview.cpp 2013-05-28 20:41:36.000000000 +0200 @@ -326,11 +326,76 @@ setMinimumSize(minSize); } - // Schedule a full relayout - if (m_validRows > 0 && size != m_gridSize) { - m_validRows = 0; - m_delayedLayoutTimer.start(10, this); - emit busy(true); + if (size != m_gridSize) { + const Plasma::Containment *containment = qobject_cast<Plasma::Containment*>(parentWidget()); + + if (m_layoutBroken && containment && containment->isContainment()) { + const int margin = 10; + const int spacing = 10; + + if (m_alignToGrid) + { + int oldRowCount, oldColCount, newRowCount, newColCount; + const QRect oldCr = adjustedContentsRect(m_gridSize, &oldRowCount, &oldColCount); + const QRect newCr = adjustedContentsRect(size, &newRowCount, &newColCount); + const int lastRow = newRowCount - 1; + const int lastCol = newColCount - 1; + const QSize oldAdjustedGridSize = m_gridSize + QSize(spacing, spacing); + const QSize newAdjustedGridSize = size + QSize(spacing, spacing); + const int oldTopMargin = margin + oldCr.top(); + const int oldLeftMargin = margin + oldCr.left(); + const int newTopMargin = margin + newCr.top(); + const int newLeftMargin = margin + newCr.left(); + + for (int i = 0; i < m_items.size(); i++) { + const QPoint topLeft = m_items[i].rect.topLeft() - QPoint(oldLeftMargin, oldTopMargin); + const int row = qBound(0, topLeft.y() / oldAdjustedGridSize.height(), lastRow); + int col = topLeft.x() / oldAdjustedGridSize.width(); + + if (m_flow == RightToLeft || m_flow == TopToBottomRightToLeft) { + col = lastCol - ((oldColCount - 1) - col); + } + + col = qBound(0, col, lastCol); + + m_items[i].rect = QRect(QPoint(newLeftMargin + col * newAdjustedGridSize.width(), + newTopMargin + row * newAdjustedGridSize.height()), size); + m_items[i].needSizeAdjust = true; + } + } else { + const QRect cr = contentsRect().toRect(); + const int leftMargin = margin + cr.left(); + const int topMargin = margin + cr.top(); + const qreal scaleX = qreal(size.width()) / qreal(m_gridSize.width()); + const qreal scaleY = qreal(size.height()) / qreal(m_gridSize.height()); + + for (int i = 0; i < m_items.size(); i++) { + const QPoint topLeft = m_items[i].rect.topLeft(); + const int y = qBound(topMargin, qRound(scaleY * topLeft.y()), + cr.bottom() - size.height() - margin); + int x = topLeft.x(); + + if (m_flow == RightToLeft || m_flow == TopToBottomRightToLeft) { + x = cr.right() - qRound(scaleX * (cr.right() - x)); + } else { + x = scaleX * x; + } + + x = qBound(leftMargin, x, cr.right() - size.width() - margin); + + m_items[i].rect = QRect(QPoint(x, y), size); + m_items[i].needSizeAdjust = true; + } + } + + doLayoutSanityCheck(); + m_regionCache.clear(); + markAreaDirty(visibleArea()); + } else if (m_validRows > 0) { + m_validRows = 0; + m_delayedLayoutTimer.start(10, this); + emit busy(true); + } } m_gridSize = size; @@ -761,11 +826,11 @@ // Returns the contents rect with the width and height snapped to the grid // and aligned according to the direction of the flow. -QRect IconView::adjustedContentsRect(int *rowCount, int *colCount) const +QRect IconView::adjustedContentsRect(const QSize &gridSize, int *rowCount, int *colCount) const { QRect r = contentsRect().toRect(); - const QSize size = gridSize() + QSize(10, 10); + const QSize size = gridSize + QSize(10, 10); *colCount = qMax(1, (r.width() - 10) / size.width()); *rowCount = qMax(1, (r.height() - 10) / size.height()); int dx = r.width() - (*colCount * size.width() + 10); @@ -784,7 +849,7 @@ void IconView::alignIconsToGrid() { int rowCount, colCount; - const QRect cr = adjustedContentsRect(&rowCount, &colCount); + const QRect cr = adjustedContentsRect(gridSize(), &rowCount, &colCount); int lastRow = rowCount - 1; int lastCol = colCount - 1; @@ -1051,20 +1116,19 @@ // Draw the icon // ============= - const QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole)); + QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole)); const QRect ir = QStyle::alignedRect(option.direction, Qt::AlignTop | Qt::AlignHCenter, option.decorationSize, r); - if (selected) { const QColor color = option.palette.brush(QPalette::Normal, QPalette::Highlight).color(); QImage image = icon.pixmap(ir.size()).toImage(); KIconEffect::colorize(image, color, 0.8f); - painter->drawPixmap(ir, QPixmap::fromImage(image)); - } else { - icon.paint(painter, ir); + icon = QIcon(QPixmap::fromImage(image)); } + icon.paint(painter, ir); + const QRect tr = r.adjusted(0, ir.bottom() - r.top() + 2, 0, 0); QFont font = option.font; @@ -2343,7 +2407,7 @@ } int rowCount, colCount; - const QRect cr = m_alignToGrid ? adjustedContentsRect(&rowCount, &colCount) + const QRect cr = m_alignToGrid ? adjustedContentsRect(gridSize(), &rowCount, &colCount) : contentsRect().toRect(); boundingRect.adjust(-10, -10, 10, 10); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kde-baseapps-4.10.3/plasma/applets/folderview/iconview.h new/kde-baseapps-4.10.4/plasma/applets/folderview/iconview.h --- old/kde-baseapps-4.10.3/plasma/applets/folderview/iconview.h 2013-05-03 06:36:29.000000000 +0200 +++ new/kde-baseapps-4.10.4/plasma/applets/folderview/iconview.h 2013-05-28 20:41:36.000000000 +0200 @@ -214,7 +214,7 @@ void layoutItems(); void alignIconsToGrid(); QRect itemsBoundingRect() const; - QRect adjustedContentsRect(int *rowCount, int *colCount) const; + QRect adjustedContentsRect(const QSize &gridSize, int *rowCount, int *colCount) const; bool doLayoutSanityCheck(); void saveIconPositions() const; void loadIconPositions(); -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
