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 <iain.holmes@xamarin.com>2019-03-06 18:45:15 +0300
committerAlexander Köplinger <alex.koeplinger@outlook.com>2019-03-06 18:45:15 +0300
commit14535c270ea9f8d536efe6852700d8d1cb657c1f (patch)
treea2d4f2f65d9463b144a131ff99a6c36dda79f0a6
parentff24d869bb24b272a8254731003238e819a2ad78 (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+.py3
-rw-r--r--packages/patches/gtk/0001-prevent-gdk-quartz-window-delegate-replacement.patch21
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