diff options
author | iain <iain.holmes@xamarin.com> | 2019-03-06 18:45:15 +0300 |
---|---|---|
committer | Alexander Köplinger <alex.koeplinger@outlook.com> | 2019-03-06 18:45:15 +0300 |
commit | 14535c270ea9f8d536efe6852700d8d1cb657c1f (patch) | |
tree | a2d4f2f65d9463b144a131ff99a6c36dda79f0a6 | |
parent | ff24d869bb24b272a8254731003238e819a2ad78 (diff) |
[Gdk] Prevent GdkQuartzWindow having its delegate replaced. (#90)
Replacing the GdkQuartzWindow delegate causes bad things to happen. This will
prevent it, and drop a message to console telling you not to.
-rw-r--r-- | packages/gtk+.py | 3 | ||||
-rw-r--r-- | packages/patches/gtk/0001-prevent-gdk-quartz-window-delegate-replacement.patch | 21 |
2 files changed, 23 insertions, 1 deletions
diff --git a/packages/gtk+.py b/packages/gtk+.py index b147651..6b584d8 100644 --- a/packages/gtk+.py +++ b/packages/gtk+.py @@ -218,7 +218,8 @@ class GtkPackage (GitHubPackage): # https://devdiv.visualstudio.com/DevDiv/_workitems/edit/737323 'patches/gtk/gtk-nsview-subview-focus-fixes.patch', 'patches/gtk/gtk-nsview-focus-tabbing.patch', - 'patches/gtk/popup-combo-box-with-arrows.patch' + 'patches/gtk/popup-combo-box-with-arrows.patch', + 'patches/gtk/0001-prevent-gdk-quartz-window-delegate-replacement.patch' ]) def prep(self): 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 new file mode 100644 index 0000000..46ae2dc --- /dev/null +++ b/packages/patches/gtk/0001-prevent-gdk-quartz-window-delegate-replacement.patch @@ -0,0 +1,21 @@ +diff --git a/gdk/quartz/GdkQuartzWindow.c b/gdk/quartz/GdkQuartzWindow.c +index e8e0de5c7..435c856be 100644 +--- a/gdk/quartz/GdkQuartzWindow.c ++++ b/gdk/quartz/GdkQuartzWindow.c +@@ -259,6 +259,16 @@ + return [super makeFirstResponder:responder]; + } + ++-(void)setDelegate:(id<NSWindowDelegate>)delegate ++{ ++ if ([super delegate] == nil) { ++ [super setDelegate:delegate]; ++ } else { ++ // If we allow the window delegate to be replaced, everything breaks. ++ g_critical ("Setting a delegate on GdkQuartzWindow is forbidden, because everything will break."); ++ } ++} ++ + -(id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag screen:(NSScreen *)screen + { + self = [super initWithContentRect:contentRect |