summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2012-12-11 04:12:22 -0500
committerLuke Shumaker <LukeShu@sbcglobal.net>2012-12-11 04:12:22 -0500
commitc344581443759d7377c4b5ae4980e1a5901ab231 (patch)
tree7cd17bf852d035382b3b8ef30e1970640f68736e
parent09d0d90ce30496d53cdcc954d4f6042d6b409af0 (diff)
parenta6bc83c4664f2b3b3ca5a160e661e579333c1669 (diff)
downloadabslibre-c344581443759d7377c4b5ae4980e1a5901ab231.tar.gz
abslibre-c344581443759d7377c4b5ae4980e1a5901ab231.tar.bz2
abslibre-c344581443759d7377c4b5ae4980e1a5901ab231.zip
Merge branch 'master' of ssh://parabolagnulinux.org:1863/srv/git/abslibre
-rwxr-xr-xlibre/kdebase-konqueror-libre/PKGBUILD12
-rw-r--r--libre/kdebase-konqueror-libre/kde-baseapps-4.9.4-fix-bugs-311206-311246.diff232
2 files changed, 240 insertions, 4 deletions
diff --git a/libre/kdebase-konqueror-libre/PKGBUILD b/libre/kdebase-konqueror-libre/PKGBUILD
index f47b71243..26b14ff86 100755
--- a/libre/kdebase-konqueror-libre/PKGBUILD
+++ b/libre/kdebase-konqueror-libre/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 172214 2012-12-02 07:43:07Z andrea $
+# $Id: PKGBUILD 172988 2012-12-08 05:56:10Z andrea $
# Maintainer: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Pierre Schmitz <pierre@archlinux.de>
# Maintainer (Parabola): Michał Masłowski <mtjm@mtjm.eu>
@@ -7,15 +7,17 @@
_pkgname='kdebase-konqueror'
pkgname='kdebase-konqueror-libre'
pkgver=4.9.4
-pkgrel=1
+pkgrel=2
arch=('i686' 'x86_64' 'mips64el')
url="http://kde.org/applications/internet/konqueror/"
license=('GPL' 'LGPL' 'FDL')
groups=('kde' 'kdebase')
makedepends=('kdelibs' 'cmake' 'automoc4' 'tidyhtml')
source=("http://download.kde.org/stable/${pkgver}/src/kde-baseapps-${pkgver}.tar.xz"
+ 'kde-baseapps-4.9.4-fix-bugs-311206-311246.diff'
"konq-about-fsdg.diff")
sha1sums=('b68e76766331272a45b1d897adf4c1928a11e747'
+ '998f1db2309744dd2c054aec3462a717bc107c2e'
'd6cbb53c04179b8180f9439eca156b7ff2e76b3a')
pkgdesc='KDE File Manager & Web Browser (without Google and nonfree software recommendation)'
depends=('kdebase-dolphin' 'kdebase-keditbookmarks')
@@ -26,12 +28,14 @@ replaces=('kdebase-nsplugins' 'kdebase-konqueror')
provides=("kdebase-konqueror=$pkgver")
build() {
- cd "${srcdir}"/kde-baseapps-${pkgver}
+ cd kde-baseapps-${pkgver}
+ patch -p1 -i "${srcdir}"/kde-baseapps-4.9.4-fix-bugs-311206-311246.diff
# Don't recommend nonfree software or Google.
patch -Np1 -i "${srcdir}/konq-about-fsdg.diff"
- cd ${srcdir}
+ cd ../
+
mkdir build
cd build
cmake ../kde-baseapps-${pkgver} \
diff --git a/libre/kdebase-konqueror-libre/kde-baseapps-4.9.4-fix-bugs-311206-311246.diff b/libre/kdebase-konqueror-libre/kde-baseapps-4.9.4-fix-bugs-311206-311246.diff
new file mode 100644
index 000000000..9f328ec60
--- /dev/null
+++ b/libre/kdebase-konqueror-libre/kde-baseapps-4.9.4-fix-bugs-311206-311246.diff
@@ -0,0 +1,232 @@
+diff --git a/dolphin/src/kitemviews/kstandarditemlistwidget.cpp b/dolphin/src/kitemviews/kstandarditemlistwidget.cpp
+index f92cab5..af16954 100644
+--- a/dolphin/src/kitemviews/kstandarditemlistwidget.cpp
++++ b/dolphin/src/kitemviews/kstandarditemlistwidget.cpp
+@@ -193,7 +193,8 @@ KStandardItemListWidget::KStandardItemListWidget(KItemListWidgetInformant* infor
+ m_additionalInfoTextColor(),
+ m_overlay(),
+ m_rating(),
+- m_roleEditor(0)
++ m_roleEditor(0),
++ m_oldRoleEditor(0)
+ {
+ }
+
+@@ -203,6 +204,7 @@ KStandardItemListWidget::~KStandardItemListWidget()
+ m_textInfo.clear();
+
+ delete m_roleEditor;
++ delete m_oldRoleEditor;
+ }
+
+ void KStandardItemListWidget::setLayout(Layout layout)
+@@ -609,13 +611,16 @@ void KStandardItemListWidget::editedRoleChanged(const QByteArray& current, const
+ 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);
+@@ -1267,21 +1272,19 @@ QRectF KStandardItemListWidget::roleEditingRect(const QByteArray& role) const
+
+ 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;
+ }
+
+diff --git a/dolphin/src/kitemviews/kstandarditemlistwidget.h b/dolphin/src/kitemviews/kstandarditemlistwidget.h
+index 787722d..386f60e 100644
+--- a/dolphin/src/kitemviews/kstandarditemlistwidget.h
++++ b/dolphin/src/kitemviews/kstandarditemlistwidget.h
+@@ -241,6 +241,7 @@ private:
+ QPixmap m_rating;
+
+ KItemListRoleEditor* m_roleEditor;
++ KItemListRoleEditor* m_oldRoleEditor;
+
+ friend class KStandardItemListWidgetInformant; // Accesses private static methods to be able to
+ // share a common layout calculation
+diff --git a/dolphin/src/kitemviews/private/kitemlistroleeditor.cpp b/dolphin/src/kitemviews/private/kitemlistroleeditor.cpp
+index 78dbfe9..1e4b5fd 100644
+--- a/dolphin/src/kitemviews/private/kitemlistroleeditor.cpp
++++ b/dolphin/src/kitemviews/private/kitemlistroleeditor.cpp
+@@ -26,9 +26,7 @@ KItemListRoleEditor::KItemListRoleEditor(QWidget *parent) :
+ KTextEdit(parent),
+ m_index(0),
+ m_role(),
+- m_blockFinishedSignal(false),
+- m_eventHandlingLevel(0),
+- m_deleteAfterEventHandling(false)
++ m_blockFinishedSignal(false)
+ {
+ setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+@@ -66,20 +64,6 @@ QByteArray KItemListRoleEditor::role() const
+ return m_role;
+ }
+
+-void KItemListRoleEditor::deleteWhenIdle()
+-{
+- if (m_eventHandlingLevel > 0) {
+- // We are handling an event at the moment. It could be that we
+- // are in a nested event loop run by contextMenuEvent() or a
+- // call of mousePressEvent() which results in drag&drop.
+- // -> do not call deleteLater() to prevent a crash when we
+- // return from the nested event loop.
+- m_deleteAfterEventHandling = true;
+- } else {
+- deleteLater();
+- }
+-}
+-
+ bool KItemListRoleEditor::eventFilter(QObject* watched, QEvent* event)
+ {
+ if (watched == parentWidget() && event->type() == QEvent::Resize) {
+@@ -91,42 +75,13 @@ bool KItemListRoleEditor::eventFilter(QObject* watched, QEvent* event)
+
+ bool KItemListRoleEditor::event(QEvent* event)
+ {
+- ++m_eventHandlingLevel;
+-
+ if (event->type() == QEvent::FocusOut) {
+ QFocusEvent* focusEvent = static_cast<QFocusEvent*>(event);
+ if (focusEvent->reason() != Qt::PopupFocusReason) {
+ emitRoleEditingFinished();
+ }
+ }
+-
+- const int result = KTextEdit::event(event);
+- --m_eventHandlingLevel;
+-
+- if (m_deleteAfterEventHandling && m_eventHandlingLevel == 0) {
+- // Schedule this object for deletion and make sure that we do not try
+- // to deleteLater() again when the DeferredDelete event is received.
+- deleteLater();
+- m_deleteAfterEventHandling = false;
+- }
+-
+- return result;
+-}
+-
+-bool KItemListRoleEditor::viewportEvent(QEvent* event)
+-{
+- ++m_eventHandlingLevel;
+- const bool result = KTextEdit::viewportEvent(event);
+- --m_eventHandlingLevel;
+-
+- if (m_deleteAfterEventHandling && m_eventHandlingLevel == 0) {
+- // Schedule this object for deletion and make sure that we do not try
+- // to deleteLater() again when the DeferredDelete event is received.
+- deleteLater();
+- m_deleteAfterEventHandling = false;
+- }
+-
+- return result;
++ return KTextEdit::event(event);
+ }
+
+ void KItemListRoleEditor::keyPressEvent(QKeyEvent* event)
+@@ -144,8 +99,7 @@ void KItemListRoleEditor::keyPressEvent(QKeyEvent* event)
+ return;
+ case Qt::Key_Enter:
+ case Qt::Key_Return:
+- // TODO: find a better way to fix the bug 309760
+- clearFocus(); // emitRoleEditingFinished(); results in a crash
++ emitRoleEditingFinished();
+ event->accept();
+ return;
+ default:
+diff --git a/dolphin/src/kitemviews/private/kitemlistroleeditor.h b/dolphin/src/kitemviews/private/kitemlistroleeditor.h
+index a2f7058..aa2c977 100644
+--- a/dolphin/src/kitemviews/private/kitemlistroleeditor.h
++++ b/dolphin/src/kitemviews/private/kitemlistroleeditor.h
+@@ -47,15 +47,6 @@ public:
+ void setRole(const QByteArray& role);
+ QByteArray role() const;
+
+- /**
+- * Calls deleteLater() if no event is being handled at the moment.
+- * Otherwise, the deletion is deferred until the event handling is
+- * finished. This prevents that the deletion happens inside a nested
+- * event loop which might be run in contextMenuEvent() or
+- * mouseMoveEvent() because this would probably cause a crash.
+- */
+- void deleteWhenIdle();
+-
+ virtual bool eventFilter(QObject* watched, QEvent* event);
+
+ signals:
+@@ -64,7 +55,6 @@ signals:
+
+ protected:
+ virtual bool event(QEvent* event);
+- virtual bool viewportEvent(QEvent* event);
+ virtual void keyPressEvent(QKeyEvent* event);
+
+ private slots:
+@@ -85,8 +75,6 @@ private:
+ int m_index;
+ QByteArray m_role;
+ bool m_blockFinishedSignal;
+- int m_eventHandlingLevel;
+- bool m_deleteAfterEventHandling;
+ };
+
+ #endif
+diff --git a/dolphin/src/views/dolphinview.cpp b/dolphin/src/views/dolphinview.cpp
+index 70a7394..0e97c5a 100644
+--- a/dolphin/src/views/dolphinview.cpp
++++ b/dolphin/src/views/dolphinview.cpp
+@@ -1227,11 +1227,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;
+ }
+ }
+