From f842ec12706b70f94ab5f634dc2aa025ba2cf3f2 Mon Sep 17 00:00:00 2001
From: Richard Moe Gustavsen <richard.gustavsen@nokia.com>
Date: Fri, 29 Jan 2010 10:49:14 +0100
Subject: Carbon: crash problem in QWidgetPrivate::hide_sys

The crash occurs because we at one point try to assign a widget that
is marked as 'about to be deleted' to a QPointer, after clearguards
has been called. The correct fix is to avoid such an assignment in
the first place.

Task-number: QTBUG-4227
Reviewed-by: Prasanth
---
 src/gui/kernel/qwidget_mac.mm | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm
index 5b5ab40..b942bdd 100644
--- a/src/gui/kernel/qwidget_mac.mm
+++ b/src/gui/kernel/qwidget_mac.mm
@@ -3579,6 +3579,8 @@ void QWidgetPrivate::hide_sys()
 
     if (!QWidget::mouseGrabber()){
         QWidget *enterWidget = QApplication::widgetAt(QCursor::pos());
+        if (enterWidget->data->in_destructor)
+            enterWidget = 0;
         QApplicationPrivate::dispatchEnterLeave(enterWidget, qt_mouseover);
         qt_mouseover = enterWidget;
     }
-- 
cgit v0.12


From ebf9c943b789bb4ce1e1222ed17cc37bd0b1f1fe Mon Sep 17 00:00:00 2001
From: Richard Moe Gustavsen <richard.gustavsen@nokia.com>
Date: Fri, 29 Jan 2010 11:47:02 +0100
Subject: Carbon: crash problem in QWidgetPrivate::hide_sys, v2

See change: f842ec12706. Needed some ekstra checks for
the cocoa port as well.

Task-number: QTBUG-4227
Reviewed-by: Prasanth
---
 src/gui/kernel/qcocoaview_mac.mm | 2 ++
 src/gui/kernel/qwidget_mac.mm    | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm
index b4bb8bf..8c5d166 100644
--- a/src/gui/kernel/qcocoaview_mac.mm
+++ b/src/gui/kernel/qcocoaview_mac.mm
@@ -602,6 +602,8 @@ extern "C" {
 
 - (void)mouseEntered:(NSEvent *)event
 {
+    if (qwidgetprivate->data.in_destructor)
+        return;
     QEvent enterEvent(QEvent::Enter);
     NSPoint windowPoint = [event locationInWindow];
     NSPoint globalPoint = [[event window] convertBaseToScreen:windowPoint];
diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm
index b942bdd..3ff46f5 100644
--- a/src/gui/kernel/qwidget_mac.mm
+++ b/src/gui/kernel/qwidget_mac.mm
@@ -3579,7 +3579,7 @@ void QWidgetPrivate::hide_sys()
 
     if (!QWidget::mouseGrabber()){
         QWidget *enterWidget = QApplication::widgetAt(QCursor::pos());
-        if (enterWidget->data->in_destructor)
+        if (enterWidget && enterWidget->data->in_destructor)
             enterWidget = 0;
         QApplicationPrivate::dispatchEnterLeave(enterWidget, qt_mouseover);
         qt_mouseover = enterWidget;
-- 
cgit v0.12

