diff --git a/kdelibs-4.1.3-kde#109181-kiodelete.patch b/kdelibs-4.1.3-kde#109181-kiodelete.patch new file mode 100644 index 0000000..25cec42 --- /dev/null +++ b/kdelibs-4.1.3-kde#109181-kiodelete.patch @@ -0,0 +1,111 @@ +Index: kio/kio/kdirlister.h +=================================================================== +--- kio/kio/kdirlister.h (revision 871258) ++++ kio/kio/kdirlister.h (revision 871259) +@@ -427,6 +427,18 @@ + KFileItemList itemsForDir( const KUrl& dir, + WhichItems which = FilteredItems ) const; + ++ /** ++ * Return the KFileItem for the given URL, if we listed it recently ++ * and it's still in the cache - which is always the case if a directory ++ * view is currently showing this item. If not, then it might be in the ++ * cache, or it might not, in which case you get a null KFileItem. ++ * If you really need a KFileItem for this URL in all cases, then use ++ * KIO::stat() instead. ++ * ++ * @since 4.2 ++ */ ++ static KFileItem cachedItemForUrl(const KUrl& url); ++ + Q_SIGNALS: + + /** +@@ -511,7 +523,7 @@ + * + * @param _fileItem the fileItem to delete + */ +- void deleteItem( const KFileItem &_fileItem ); // KDE5: remove, and port to deleteItems ++ void deleteItem( const KFileItem &_fileItem ); // KDE5: remove, and port to itemsDeleted + + /** + * Signal that items have been deleted +Index: kio/kio/kdirlister.cpp +=================================================================== +--- kio/kio/kdirlister.cpp (revision 871258) ++++ kio/kio/kdirlister.cpp (revision 871259) +@@ -717,7 +717,7 @@ + + // Maybe _u is a directory itself? (see KDirModelTest::testChmodDirectory) + DirItem* dirItem = dirItemForUrl(url); +- if (dirItem && dirItem->rootItem.url() == url) { ++ if (dirItem && !dirItem->rootItem.isNull() && dirItem->rootItem.url() == url) { + // If lister is set, check that it contains this dir + if (!lister || lister->d->lstDirs.contains(url)) + return &dirItem->rootItem; +@@ -1011,7 +1011,15 @@ + if ( name == "." ) + { + Q_ASSERT( dir->rootItem.isNull() ); +- dir->rootItem = KFileItem( *it, url, delayedMimeTypes, true ); ++ // Try to reuse an existing KFileItem (if we listed the parent dir) ++ // rather than creating a new one. There are many reasons: ++ // 1) renames and permission changes to the item would have to emit the signals ++ // twice, otherwise, so that both views manage to recognize the item. ++ // 2) with kio_ftp we can only know that something is a symlink when ++ // listing the parent, so prefer that item, which has more info. ++ dir->rootItem = itemForUrl(url); ++ if (dir->rootItem.isNull()) ++ dir->rootItem = KFileItem( *it, url, delayedMimeTypes, true ); + + foreach ( KDirLister *kdl, dirData.listersCurrentlyListing ) + if ( kdl->d->rootFileItem.isNull() && kdl->d->url == url ) +@@ -2515,5 +2523,10 @@ + } + } + ++KFileItem KDirLister::cachedItemForUrl(const KUrl& url) ++{ ++ return kDirListerCache->itemForUrl(url); ++} ++ + #include "kdirlister.moc" + #include "kdirlister_p.moc" +Index: kio/kio/deletejob.cpp +=================================================================== +--- kio/kio/deletejob.cpp (revision 871258) ++++ kio/kio/deletejob.cpp (revision 871259) +@@ -21,6 +21,7 @@ + + #include "deletejob.h" + ++#include "kdirlister.h" + #include "kmimetype.h" + #include "scheduler.h" + #include "kdirwatch.h" +@@ -218,6 +219,17 @@ + // Stat it + state = DELETEJOB_STATE_STATING; + ++ // Fast path for KFileItems in directory views ++ while(m_currentStat != m_srcList.end()) { ++ m_currentURL = (*m_currentStat); ++ KFileItem cachedItem = KDirLister::cachedItemForUrl(m_currentURL); ++ if (cachedItem.isNull()) ++ break; ++ //kDebug(7007) << "Found cached info about" << m_currentURL << "isDir=" << cachedItem.isDir() << "isLink=" << cachedItem.isLink(); ++ currentSourceStated(cachedItem.isDir(), cachedItem.isLink()); ++ ++m_currentStat; ++ } ++ + // Hook for unit test to disable the fast path. + extern bool kio_resolve_local_urls; // from copyjob.cpp, abused here to save a symbol. + if (!kio_resolve_local_urls) { +@@ -288,6 +300,7 @@ + } + } else + { // if remote - or if unlink() failed (we'll use the job's error handling in that case) ++ //kDebug(7007) << "calling file_delete on" << *it; + job = KIO::file_delete( *it, KIO::HideProgressInfo ); + Scheduler::scheduleJob(job); + m_currentURL=(*it); diff --git a/kdelibs-4.1.3-kde#172042-windowsize.patch b/kdelibs-4.1.3-kde#172042-windowsize.patch new file mode 100644 index 0000000..1f3e7e9 --- /dev/null +++ b/kdelibs-4.1.3-kde#172042-windowsize.patch @@ -0,0 +1,55 @@ +Index: kdeui/widgets/kmainwindow_p.h +=================================================================== +--- kdeui/widgets/kmainwindow_p.h (revision 871464) ++++ kdeui/widgets/kmainwindow_p.h (revision 871465) +@@ -44,6 +44,7 @@ + bool settingsDirty:1; + bool autoSaveWindowSize:1; + bool care_about_geometry:1; ++ bool sizeApplied:1; + bool shuttingDown:1; + KConfigGroup autoSaveGroup; + QTimer* settingsTimer; +Index: kdeui/widgets/kmainwindow.cpp +=================================================================== +--- kdeui/widgets/kmainwindow.cpp (revision 871464) ++++ kdeui/widgets/kmainwindow.cpp (revision 871465) +@@ -284,6 +284,8 @@ + + dockResizeListener = new DockResizeListener(_q); + letDirtySettings = true; ++ ++ sizeApplied = false; + } + + static bool endsWithHashNumber( const QString& s ) +@@ -677,6 +679,8 @@ + + bool KMainWindow::readPropertiesInternal( KConfig *config, int number ) + { ++ K_D(KMainWindow); ++ + if ( number == 1 ) + readGlobalProperties( config ); + +@@ -691,6 +695,8 @@ + if ( cg.hasKey(QLatin1String("ObjectName" )) ) + setObjectName( cg.readEntry("ObjectName").toLatin1()); // latin1 is right here + ++ d->sizeApplied = false; // since we are changing config file, reload the size of the window ++ // if necessary. Do it before the call to applyMainWindowSettings. + applyMainWindowSettings(cg); // Menubar, statusbar and toolbar settings. + + s.setNum(number); +@@ -708,7 +714,10 @@ + + d->letDirtySettings = false; + +- restoreWindowSize(cg); ++ if (!d->sizeApplied) { ++ restoreWindowSize(cg); ++ d->sizeApplied = true; ++ } + + QStatusBar* sb = internalStatusBar(this); + if (sb) { diff --git a/kdelibs.spec b/kdelibs.spec index 2fa3ab1..ab580dd 100644 --- a/kdelibs.spec +++ b/kdelibs.spec @@ -2,7 +2,7 @@ Summary: K Desktop Environment 4 - Libraries Version: 4.1.2 -Release: 4%{?dist} +Release: 5%{?dist} %if 0%{?fedora} > 8 Name: kdelibs @@ -80,6 +80,8 @@ Patch20: kdelibs-4.1.1-cmake.patch ## upstream patches Patch100: kdelibs-4.1.2-googlemaps.patch Patch101: kdelibs-4.1.2-kde#171870-kded-crash.patch +Patch102: kdelibs-4.1.3-kde#172042-windowsize.patch +Patch103: kdelibs-4.1.3-kde#109181-kiodelete.patch BuildRequires: qt4-devel >= 4.4.0 Requires: qt4 >= %{_qt4_version} @@ -207,6 +209,8 @@ sed -i -e "s|@@VERSION_RELEASE@@|%{version}-%{release}|" kio/kio/kprotocolmanage ## upstream patches %patch100 -p0 -b .googlemaps %patch101 -p0 -b .kde#171870-kded-crash +%patch102 -p0 -b .kde#172042-windowsize +%patch103 -p0 -b .kde#109181-kiodelete %build @@ -367,6 +371,11 @@ rm -rf %{buildroot} %changelog +* Wed Oct 15 2008 Lukáš Tinkl 4.1.2-5 +- backport fix for faulty window resizing (kdebug:172042) +- backport fix for Konqueror deleting symlinks on directories + recursively (kdebug:109181) + * Mon Oct 13 2008 Than Ngo 4.1.2-4 - backport patch to fix crash kded startup crash