Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/bockbuild.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriain <iaholmes@microsoft.com>2019-07-11 17:05:03 +0300
committerAlexander Köplinger <alex.koeplinger@outlook.com>2019-07-11 17:05:03 +0300
commitb83885fb5b0783348fa787e7e9dea08b343b0e97 (patch)
tree0cfd887c9696fd7e3d43ed1fd24eb29f8cab24a5
parent2a05159231cd8defe43b55c72bfaf83279ae0ed3 (diff)
[Gtk] Allow Cocoa to unset the delegate when deallocating the wi… (#105)
Cocoa unsets delegates when deallocating the window object, so we need to allow that and not throw a critical message at that point Fixes VSTS #935204 Fixes VSTS #935386
-rw-r--r--packages/patches/gtk/0001-prevent-gdk-quartz-window-delegate-replacement.patch32
1 files changed, 29 insertions, 3 deletions
diff --git a/packages/patches/gtk/0001-prevent-gdk-quartz-window-delegate-replacement.patch b/packages/patches/gtk/0001-prevent-gdk-quartz-window-delegate-replacement.patch
index 46ae2dc..666036e 100644
--- a/packages/patches/gtk/0001-prevent-gdk-quartz-window-delegate-replacement.patch
+++ b/packages/patches/gtk/0001-prevent-gdk-quartz-window-delegate-replacement.patch
@@ -1,14 +1,32 @@
diff --git a/gdk/quartz/GdkQuartzWindow.c b/gdk/quartz/GdkQuartzWindow.c
-index e8e0de5c7..435c856be 100644
+index e8e0de5c7..63f3402f8 100644
--- a/gdk/quartz/GdkQuartzWindow.c
+++ b/gdk/quartz/GdkQuartzWindow.c
-@@ -259,6 +259,16 @@
+@@ -22,7 +22,16 @@
+ #include "gdkwindow-quartz.h"
+ #include "gdkprivate-quartz.h"
+
+-@implementation GdkQuartzWindow
++@implementation GdkQuartzWindow {
++ BOOL _allowDelegateToBeSetToNil;
++}
++
++-(void)dealloc
++{
++ // During deallocation, Cocoa resets the delegate to nil
++ // We need to track that so that we don't throw an error
++ _allowDelegateToBeSetToNil = YES;
++}
+
+ -(BOOL)windowShouldClose:(id)sender
+ {
+@@ -259,6 +268,16 @@
return [super makeFirstResponder:responder];
}
+-(void)setDelegate:(id<NSWindowDelegate>)delegate
+{
-+ if ([super delegate] == nil) {
++ if ([super delegate] == nil || (_allowDelegateToBeSetToNil && delegate == nil)) {
+ [super setDelegate:delegate];
+ } else {
+ // If we allow the window delegate to be replaced, everything breaks.
@@ -19,3 +37,11 @@ index e8e0de5c7..435c856be 100644
-(id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag screen:(NSScreen *)screen
{
self = [super initWithContentRect:contentRect
+@@ -271,6 +290,7 @@
+ [self setDelegate:self];
+ [self setReleasedWhenClosed:YES];
+
++ _allowDelegateToBeSetToNil = NO;
+ return self;
+ }
+