summaryrefslogtreecommitdiff
path: root/archivers/ark-kde4/files/patch-git_cd8ad27
diff options
context:
space:
mode:
Diffstat (limited to 'archivers/ark-kde4/files/patch-git_cd8ad27')
-rw-r--r--archivers/ark-kde4/files/patch-git_cd8ad2771
1 files changed, 71 insertions, 0 deletions
diff --git a/archivers/ark-kde4/files/patch-git_cd8ad27 b/archivers/ark-kde4/files/patch-git_cd8ad27
new file mode 100644
index 000000000000..058d208c0c68
--- /dev/null
+++ b/archivers/ark-kde4/files/patch-git_cd8ad27
@@ -0,0 +1,71 @@
+commit cd8ad2761d41d1ec0a18cff7f4d166b53c899fc2
+Author: Raphael Kubo da Costa <rakuco@FreeBSD.org>
+Date: Mon Nov 24 01:37:06 2014 +0200
+
+ Stop crashing on exit when being used solely as a KPart.
+
+ This change fixes a crash introduced by commit 3b981ca ("Remove Part
+ from KXMLGUIFactory on exit").
+
+ Part::~Part() is the wrong place to call KXMLGUIFactory::removeClient(),
+ as it assumes addClient() had been called in the first place.
+
+ This is only true if Ark is called as a standalone program, since that
+ is done in MainWindow::loadPart()'s call to KXMLGuiWindow::createGUI().
+
+ Conversely, if the Ark KPart is being used as an embedded viewer in,
+ say, Konqueror or to preview an archive inside an archive (ie. Ark
+ inside Ark) that does not hold true and we try to access a
+ KXMLGUIFactory that does not exist.
+
+ Instead, call KXMLGuiWindow::removeClient() in MainWindow's destructor,
+ since in this case we are certain that addClient() was been called
+ before.
+
+ CCBUG: 341187
+
+ (cherry picked from commit 9c30f30b38c36a31e6fcb3aa047a0247ac5a22fb)
+ This was committed for completeness, as there will be no additional
+ releases from the KDE/4.14 branch.
+
+ Conflicts:
+ part/part.cpp
+
+--- app/mainwindow.cpp.orig 2014-10-25 12:53:24 UTC
++++ app/mainwindow.cpp
+@@ -38,6 +38,7 @@
+ #include <KDebug>
+ #include <KEditToolBar>
+ #include <KShortcutsDialog>
++#include <KXMLGUIFactory>
+
+ #include <QDragEnterEvent>
+ #include <QDragMoveEvent>
+@@ -69,6 +70,8 @@ MainWindow::~MainWindow()
+ if (m_recentFilesAction) {
+ m_recentFilesAction->saveEntries(KGlobal::config()->group("Recent Files"));
+ }
++
++ guiFactory()->removeClient(m_part);
+ delete m_part;
+ m_part = 0;
+ }
+--- part/part.cpp.orig 2014-10-25 12:53:24 UTC
++++ part/part.cpp
+@@ -53,7 +53,6 @@
+ #include <KStandardGuiItem>
+ #include <KTempDir>
+ #include <KToggleAction>
+-#include <KXMLGUIFactory>
+
+ #include <QAction>
+ #include <QCursor>
+@@ -138,8 +137,6 @@ Part::Part(QWidget *parentWidget, QObjec
+
+ Part::~Part()
+ {
+- factory()->removeClient(this);
+-
+ saveSplitterSizes();
+
+ m_extractFilesAction->menu()->deleteLater();