summaryrefslogtreecommitdiffstats
path: root/packaging/macos/modulesets/patches/gtk-3.24.33-quartz-window-transient-for.patch
blob: 39435df32a3d8dcb553f437014e3ba181f5be76e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
From f42f7adc531da47b5c34a05da84ac873618f55ed Mon Sep 17 00:00:00 2001
From: John Ralls <jralls@ceridwen.us>
Date: Mon, 28 Mar 2022 11:26:41 -0700
Subject: [PATCH] [quartz-window]Always ensure that transient_for isn't
 destroyed before using it.

Fixes crash when destroying a dialog whose transient_for parent is
already destroyed.
---
 gdk/quartz/gdkwindow-quartz.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
index aa85318e0b..15cde981a0 100644
--- a/gdk/quartz/gdkwindow-quartz.c
+++ b/gdk/quartz/gdkwindow-quartz.c
@@ -788,7 +788,7 @@ _gdk_quartz_window_did_become_main (GdkWindow *window)
   if (window->window_type != GDK_WINDOW_TEMP)
     main_window_stack = g_slist_prepend (main_window_stack, window);
 
-  if (impl->transient_for)
+  if (impl->transient_for && !GDK_WINDOW_DESTROYED (impl->transient_for))
     raise_transient (impl);
 
   clear_toplevel_order ();
@@ -1176,6 +1176,8 @@ _gdk_quartz_window_detach_from_parent (GdkWindow *window)
       parent_impl = GDK_WINDOW_IMPL_QUARTZ (impl->transient_for->impl);
       [parent_impl->toplevel removeChildWindow:impl->toplevel];
       clear_toplevel_order ();
+      g_object_unref (impl->transient_for);
+      impl->transient_for = NULL;
     }
 }
 
@@ -1557,7 +1559,7 @@ gdk_window_quartz_raise (GdkWindow *window)
 
       impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
 
-      if (impl->transient_for)
+      if (impl->transient_for && !GDK_WINDOW_DESTROYED (impl->transient_for))
         raise_transient (impl);
       else
         [impl->toplevel orderFront:impl->toplevel];
-- 
2.32.0 (Apple Git-132)