From 52b10e51563939db8a19bb9336e3280f198b771e Mon Sep 17 00:00:00 2001
From: Tobias Markmann <tm@ayena.de>
Date: Fri, 9 Dec 2016 09:07:40 +0100
Subject: Do not emit windowClosing signal in QtTabbable dtor

Instead, handle the QCloseEvent and emit the windowClosing
signal there. This is an attempt to fix a crash I am unable
to reproduce but which crash stack includes the signal emit
in ~QtTabbable.

Test-Information:

Builds on macOS 10.12.1 with clang master. All unit and
integration tests pass. Manual login and close of Swift worked
without a crash.

Change-Id: I470f3c5362fd0f502c542560854424e87fc0727e

diff --git a/Swift/QtUI/QtTabbable.cpp b/Swift/QtUI/QtTabbable.cpp
index ed0963b..df2cbfe 100644
--- a/Swift/QtUI/QtTabbable.cpp
+++ b/Swift/QtUI/QtTabbable.cpp
@@ -22,7 +22,7 @@ QtTabbable::QtTabbable() : QWidget() {
 }
 
 QtTabbable::~QtTabbable() {
-    emit windowClosing();
+
 }
 
 bool QtTabbable::isWidgetSelected() {
@@ -65,4 +65,9 @@ bool QtTabbable::event(QEvent* event) {
     return QWidget::event(event);
 }
 
+void QtTabbable::closeEvent(QCloseEvent* event) {
+    emit windowClosing();
+    event->accept();
+}
+
 }
diff --git a/Swift/QtUI/QtTabbable.h b/Swift/QtUI/QtTabbable.h
index 4073ab4..5837702 100644
--- a/Swift/QtUI/QtTabbable.h
+++ b/Swift/QtUI/QtTabbable.h
@@ -16,6 +16,7 @@ namespace Swift {
         public:
             enum AlertType {NoActivity, WaitingActivity, ImpendingActivity};
             virtual ~QtTabbable();
+
             bool isWidgetSelected();
             virtual AlertType getWidgetAlertState() {return NoActivity;}
             virtual int getCount() {return 0;}
@@ -24,7 +25,8 @@ namespace Swift {
 
         protected:
             QtTabbable();
-            bool event(QEvent* event);
+            virtual bool event(QEvent* event);
+            virtual void closeEvent(QCloseEvent* event);
 
         signals:
             void titleUpdated();
-- 
cgit v0.10.2-6-g49f6