From 2ce559458e5803dca8d98664d954b0108a72efbb Mon Sep 17 00:00:00 2001
From: Michele Calgaro <michele.calgaro@yahoo.it>
Date: Sat, 29 Nov 2025 18:51:54 +0900
Subject: kpdf: fix crash when requested to shutdown from the session manager
 or dcop. This resolves issue #139

Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
---
 kpdf/shell/shell.cpp | 14 ++++++++++++++
 kpdf/shell/shell.h   |  2 ++
 2 files changed, 16 insertions(+)

diff --git a/kpdf/shell/shell.cpp b/kpdf/shell/shell.cpp
index c0df6a4f..ed9403df 100644
--- a/kpdf/shell/shell.cpp
+++ b/kpdf/shell/shell.cpp
@@ -50,6 +50,7 @@ Shell::Shell()
   : DCOPObject("KPDFShellDCOPIface"), KParts::MainWindow(0, "KPDF::Shell"),
     m_menuBarWasShown(true),
     m_toolBarWasShown(true),
+    m_shuttingDown(false),
     m_showToolBarAction(nullptr),
     m_tabs(nullptr),
     m_tabsContextMenu(nullptr),
@@ -63,6 +64,7 @@ Shell::Shell(const KURL &url)
   : DCOPObject("KPDFShellDCOPIface"), KParts::MainWindow(0, "KPDF::Shell"),
     m_menuBarWasShown(true),
     m_toolBarWasShown(true),
+    m_shuttingDown(false),
     m_showToolBarAction(nullptr),
     m_tabs(nullptr),
     m_tabsContextMenu(nullptr),
@@ -101,6 +103,8 @@ void Shell::init()
           this, TQ_SLOT(createGUI(KParts::Part*)));
   connect(m_manager, TQ_SIGNAL(activePartChanged(KParts::Part*)),
           this, TQ_SLOT(slotChangeTab(KParts::Part*)));
+  connect(tdeApp, TQ_SIGNAL(shutDown()),
+          this, TQ_SLOT(slotShutDown()));
 
   setCentralWidget(m_tabs);
   setXMLFile("shell.rc");
@@ -433,8 +437,18 @@ void Shell::removeTab()
   m_workingTab = -1;
 }
 
+void Shell::slotShutDown()
+{
+  m_shuttingDown = true;
+}
+
 void Shell::slotChangeTab(KParts::Part *part)
 {
+  if (m_shuttingDown)
+  {
+    return;
+  }
+
   if (!part)
   {
     part = createTab();
diff --git a/kpdf/shell/shell.h b/kpdf/shell/shell.h
index d1ace108..87d9c93a 100644
--- a/kpdf/shell/shell.h
+++ b/kpdf/shell/shell.h
@@ -111,6 +111,7 @@ namespace KPDF
     void slotUpdateFullScreen();
     void slotShowMenubar();
     void delayedOpen();
+    void slotShutDown();
 
     void slotCloseTabRequest(TQWidget *w);
     void slotChangeTab(KParts::Part *part);
@@ -150,6 +151,7 @@ namespace KPDF
     TQToolButton *m_addTabButton, *m_removeTabButton;
     TQPopupMenu *m_tabsContextMenu;
     bool m_menuBarWasShown, m_toolBarWasShown;
+    bool m_shuttingDown;
     KURL m_openUrl; // delayed open
     int m_workingTab;
   };
-- 
cgit v1.2.3

