Blame 0001-Stop-crashing-on-exit-when-being-used-solely-as-a-KP.patch

Rex Dieter 74d7b3
From cd8ad2761d41d1ec0a18cff7f4d166b53c899fc2 Mon Sep 17 00:00:00 2001
Rex Dieter 74d7b3
From: Raphael Kubo da Costa <rakuco@FreeBSD.org>
Rex Dieter 74d7b3
Date: Mon, 24 Nov 2014 01:37:06 +0200
Rex Dieter 74d7b3
Subject: [PATCH] Stop crashing on exit when being used solely as a KPart.
Rex Dieter 74d7b3
Rex Dieter 74d7b3
This change fixes a crash introduced by commit 3b981ca ("Remove Part
Rex Dieter 74d7b3
from KXMLGUIFactory on exit").
Rex Dieter 74d7b3
Rex Dieter 74d7b3
Part::~Part() is the wrong place to call KXMLGUIFactory::removeClient(),
Rex Dieter 74d7b3
as it assumes addClient() had been called in the first place.
Rex Dieter 74d7b3
Rex Dieter 74d7b3
This is only true if Ark is called as a standalone program, since that
Rex Dieter 74d7b3
is done in MainWindow::loadPart()'s call to KXMLGuiWindow::createGUI().
Rex Dieter 74d7b3
Rex Dieter 74d7b3
Conversely, if the Ark KPart is being used as an embedded viewer in,
Rex Dieter 74d7b3
say, Konqueror or to preview an archive inside an archive (ie. Ark
Rex Dieter 74d7b3
inside Ark) that does not hold true and we try to access a
Rex Dieter 74d7b3
KXMLGUIFactory that does not exist.
Rex Dieter 74d7b3
Rex Dieter 74d7b3
Instead, call KXMLGuiWindow::removeClient() in MainWindow's destructor,
Rex Dieter 74d7b3
since in this case we are certain that addClient() was been called
Rex Dieter 74d7b3
before.
Rex Dieter 74d7b3
Rex Dieter 74d7b3
CCBUG:      341187
Rex Dieter 74d7b3
Rex Dieter 74d7b3
(cherry picked from commit 9c30f30b38c36a31e6fcb3aa047a0247ac5a22fb)
Rex Dieter 74d7b3
This was committed for completeness, as there will be no additional
Rex Dieter 74d7b3
releases from the KDE/4.14 branch.
Rex Dieter 74d7b3
Rex Dieter 74d7b3
Conflicts:
Rex Dieter 74d7b3
	part/part.cpp
Rex Dieter 74d7b3
---
Rex Dieter 74d7b3
 app/mainwindow.cpp | 3 +++
Rex Dieter 74d7b3
 part/part.cpp      | 3 ---
Rex Dieter 74d7b3
 2 files changed, 3 insertions(+), 3 deletions(-)
Rex Dieter 74d7b3
Rex Dieter 74d7b3
diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp
Rex Dieter 74d7b3
index aee8231..181fe76 100644
Rex Dieter 74d7b3
--- a/app/mainwindow.cpp
Rex Dieter 74d7b3
+++ b/app/mainwindow.cpp
Rex Dieter 74d7b3
@@ -38,6 +38,7 @@
Rex Dieter 74d7b3
 #include <KDebug>
Rex Dieter 74d7b3
 #include <KEditToolBar>
Rex Dieter 74d7b3
 #include <KShortcutsDialog>
Rex Dieter 74d7b3
+#include <KXMLGUIFactory>
Rex Dieter 74d7b3
 
Rex Dieter 74d7b3
 #include <QDragEnterEvent>
Rex Dieter 74d7b3
 #include <QDragMoveEvent>
Rex Dieter 74d7b3
@@ -69,6 +70,8 @@ MainWindow::~MainWindow()
Rex Dieter 74d7b3
     if (m_recentFilesAction) {
Rex Dieter 74d7b3
         m_recentFilesAction->saveEntries(KGlobal::config()->group("Recent Files"));
Rex Dieter 74d7b3
     }
Rex Dieter 74d7b3
+
Rex Dieter 74d7b3
+    guiFactory()->removeClient(m_part);
Rex Dieter 74d7b3
     delete m_part;
Rex Dieter 74d7b3
     m_part = 0;
Rex Dieter 74d7b3
 }
Rex Dieter 74d7b3
diff --git a/part/part.cpp b/part/part.cpp
Rex Dieter 74d7b3
index bae4882..09fe1cb 100644
Rex Dieter 74d7b3
--- a/part/part.cpp
Rex Dieter 74d7b3
+++ b/part/part.cpp
Rex Dieter 74d7b3
@@ -53,7 +53,6 @@
Rex Dieter 74d7b3
 #include <KStandardGuiItem>
Rex Dieter 74d7b3
 #include <KTempDir>
Rex Dieter 74d7b3
 #include <KToggleAction>
Rex Dieter 74d7b3
-#include <KXMLGUIFactory>
Rex Dieter 74d7b3
 
Rex Dieter 74d7b3
 #include <QAction>
Rex Dieter 74d7b3
 #include <QCursor>
Rex Dieter 74d7b3
@@ -138,8 +137,6 @@ Part::Part(QWidget *parentWidget, QObject *parent, const QVariantList& args)
Rex Dieter 74d7b3
 
Rex Dieter 74d7b3
 Part::~Part()
Rex Dieter 74d7b3
 {
Rex Dieter 74d7b3
-    factory()->removeClient(this);
Rex Dieter 74d7b3
-
Rex Dieter 74d7b3
     saveSplitterSizes();
Rex Dieter 74d7b3
 
Rex Dieter 74d7b3
     m_extractFilesAction->menu()->deleteLater();
Rex Dieter 74d7b3
-- 
Rex Dieter 74d7b3
1.9.3
Rex Dieter 74d7b3