diff options
Diffstat (limited to 'libre/kdebase-konqueror-libre')
-rwxr-xr-x | libre/kdebase-konqueror-libre/PKGBUILD | 11 | ||||
-rw-r--r-- | libre/kdebase-konqueror-libre/kde-baseapps-4.9.4-fix-bugs-311206-311246.diff | 232 |
2 files changed, 239 insertions, 4 deletions
diff --git a/libre/kdebase-konqueror-libre/PKGBUILD b/libre/kdebase-konqueror-libre/PKGBUILD index f47b71243..ba585e10c 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,13 @@ 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 + cd ../ # Don't recommend nonfree software or Google. patch -Np1 -i "${srcdir}/konq-about-fsdg.diff" - cd ${srcdir} 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; + } + } + |