backport 2 more critical fixes
This commit is contained in:
parent
b2df829fb8
commit
41b1ad8ea2
|
@ -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);
|
|
@ -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) {
|
11
kdelibs.spec
11
kdelibs.spec
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
Summary: K Desktop Environment 4 - Libraries
|
Summary: K Desktop Environment 4 - Libraries
|
||||||
Version: 4.1.2
|
Version: 4.1.2
|
||||||
Release: 4%{?dist}
|
Release: 5%{?dist}
|
||||||
|
|
||||||
%if 0%{?fedora} > 8
|
%if 0%{?fedora} > 8
|
||||||
Name: kdelibs
|
Name: kdelibs
|
||||||
|
@ -80,6 +80,8 @@ Patch20: kdelibs-4.1.1-cmake.patch
|
||||||
## upstream patches
|
## upstream patches
|
||||||
Patch100: kdelibs-4.1.2-googlemaps.patch
|
Patch100: kdelibs-4.1.2-googlemaps.patch
|
||||||
Patch101: kdelibs-4.1.2-kde#171870-kded-crash.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
|
BuildRequires: qt4-devel >= 4.4.0
|
||||||
Requires: qt4 >= %{_qt4_version}
|
Requires: qt4 >= %{_qt4_version}
|
||||||
|
@ -207,6 +209,8 @@ sed -i -e "s|@@VERSION_RELEASE@@|%{version}-%{release}|" kio/kio/kprotocolmanage
|
||||||
## upstream patches
|
## upstream patches
|
||||||
%patch100 -p0 -b .googlemaps
|
%patch100 -p0 -b .googlemaps
|
||||||
%patch101 -p0 -b .kde#171870-kded-crash
|
%patch101 -p0 -b .kde#171870-kded-crash
|
||||||
|
%patch102 -p0 -b .kde#172042-windowsize
|
||||||
|
%patch103 -p0 -b .kde#109181-kiodelete
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
|
||||||
|
@ -367,6 +371,11 @@ rm -rf %{buildroot}
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Oct 15 2008 Lukáš Tinkl <ltinkl@redhat.com> 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 <than@redhat.com> 4.1.2-4
|
* Mon Oct 13 2008 Than Ngo <than@redhat.com> 4.1.2-4
|
||||||
- backport patch to fix crash kded startup crash
|
- backport patch to fix crash kded startup crash
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue