[gtk-osx] Update gtk+-3.0 to gtk-3.24.7 and patch the quartz bits to the latest commits.
- From: John Ralls <jralls src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk-osx] Update gtk+-3.0 to gtk-3.24.7 and patch the quartz bits to the latest commits.
- Date: Sun, 24 Mar 2019 16:24:33 +0000 (UTC)
commit 57e2de6dfb7e4dd199cf3a92e267e346bb8edb07
Author: John Ralls <jralls ceridwen us>
Date: Thu Mar 21 18:13:43 2019 -0700
Update gtk+-3.0 to gtk-3.24.7 and patch the quartz bits to the latest commits.
modulesets-stable/gtk-osx.modules | 7 +-
patches/IMQuartz-GdkWindow.patch | 47 -------
patches/gtk3-quartz-3-24-2-fixes.patch | 216 -------------------------------
patches/gtk3-quartz-3-24-7-fixes.patch | 230 +++++++++++++++++++++++++++++++++
4 files changed, 233 insertions(+), 267 deletions(-)
---
diff --git a/modulesets-stable/gtk-osx.modules b/modulesets-stable/gtk-osx.modules
index 92f20db..31599ad 100644
--- a/modulesets-stable/gtk-osx.modules
+++ b/modulesets-stable/gtk-osx.modules
@@ -230,10 +230,9 @@
<autotools id="gtk+-3.0" autogen-sh="autogen.sh"
autogenargs="--enable-quartz-backend --enable-quartz-relocation">
- <branch module="gtk+/3.24/gtk+-3.24.7.tar.xz" version="3.24.2"
- hash="sha256:5b3b05e427cc928d103561ed2e91b2b2881fe88b1f167b0b1c9990da6aac8892">
- <patch
file="https://gitlab.gnome.org/GNOME/gtk-osx/raw/master//patches/gtk3-quartz-3-24-2-fixes.patch" strip="1"/>
- <patch file="https://gitlab.gnome.org/GNOME/gtk-osx/raw/master/patches/IMQuartz-GdkWindow.patch"
strip="1"/>
+ <branch module="gtk+/3.24/gtk+-3.24.7.tar.xz" version="3.24.7"
+ hash="sha256:52121144a2df4babed75eb5f34de130a46420101fde3ae216d3142df8a481520">
+ <patch
file="https://gitlab.gnome.org/GNOME/gtk-osx/raw/master//patches/gtk3-quartz-3-24-7-fixes.patch" strip="1"/>
</branch>
<dependencies>
<dep package="glib"/>
diff --git a/patches/gtk3-quartz-3-24-7-fixes.patch b/patches/gtk3-quartz-3-24-7-fixes.patch
new file mode 100644
index 0000000..4c32580
--- /dev/null
+++ b/patches/gtk3-quartz-3-24-7-fixes.patch
@@ -0,0 +1,230 @@
+diff --git a/gtk/gtkclipboard-quartz.c b/gtk/gtkclipboard-quartz.c
+index 75699cc..c01a9cd 100644
+--- a/gtk/gtkclipboard-quartz.c
++++ b/gtk/gtkclipboard-quartz.c
+@@ -370,7 +370,6 @@ gtk_clipboard_set_contents (GtkClipboard *clipboard,
+ gpointer user_data,
+ gboolean have_owner)
+ {
+- GtkClipboardOwner *owner;
+ NSSet *types;
+ NSAutoreleasePool *pool;
+
+@@ -406,26 +405,35 @@ gtk_clipboard_set_contents (GtkClipboard *clipboard,
+ */
+ if (user_data && user_data == clipboard->user_data)
+ {
+- owner = [clipboard->owner retain];
+-
+- owner->setting_same_owner = TRUE;
++ clipboard->owner->setting_same_owner = TRUE;
+ clipboard->change_count = [clipboard->pasteboard declareTypes: [types allObjects]
+- owner: owner];
+- owner->setting_same_owner = FALSE;
++ owner: clipboard->owner];
++ clipboard->owner->setting_same_owner = FALSE;
+ }
+ else
+ {
+- owner = [[GtkClipboardOwner alloc] initWithClipboard:clipboard];
++ GtkClipboardOwner *new_owner;
+
++ /* We do not set the new owner on clipboard->owner immediately,
++ * because declareTypes could (but not always does -- see also the
++ * comment at pasteboardChangedOwner above) cause clipboard_unset
++ * to be called, which releases clipboard->owner.
++ */
++ new_owner = [[GtkClipboardOwner alloc] initWithClipboard:clipboard];
+ clipboard->change_count = [clipboard->pasteboard declareTypes: [types allObjects]
+- owner: owner];
++ owner: new_owner];
++
++ /* In case pasteboardChangedOwner was not triggered, check to see
++ * whether the previous owner still needs to be released.
++ */
++ if (clipboard->owner)
++ [clipboard->owner release];
++ clipboard->owner = new_owner;
+ }
+
+- [owner release];
+ [types release];
+ [pool release];
+
+- clipboard->owner = owner;
+ clipboard->user_data = user_data;
+ clipboard->have_owner = have_owner;
+ if (have_owner)
+@@ -538,6 +546,8 @@ clipboard_unset (GtkClipboard *clipboard)
+ g_free (clipboard->storable_targets);
+ clipboard->storable_targets = NULL;
+
++ if (clipboard->owner)
++ [clipboard->owner release];
+ clipboard->owner = NULL;
+ clipboard->get_func = NULL;
+ clipboard->clear_func = NULL;
+@@ -564,8 +574,16 @@ void
+ gtk_clipboard_clear (GtkClipboard *clipboard)
+ {
+ clipboard_unset (clipboard);
+-
+- [clipboard->pasteboard declareTypes:nil owner:nil];
++#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
++ if (gdk_quartz_osx_version() >= GDK_OSX_SNOW_LEOPARD)
++ [clipboard->pasteboard clearContents];
++#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
++ else
++#endif
++#endif
++#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
++ [clipboard->pasteboard declareTypes:nil owner:nil];
++#endif
+ }
+
+ static void
+@@ -851,7 +869,6 @@ gtk_clipboard_wait_for_contents (GtkClipboard *clipboard,
+ /**
+ * gtk_clipboard_wait_for_text:
+ * @clipboard:
+- * @target:
+ *
+ * Returns: (nullable):
+ */
+@@ -899,7 +916,7 @@ gtk_clipboard_wait_for_image (GtkClipboard *clipboard)
+ * gtk_clipboard_wait_for_uris:
+ * @clipboard:
+ *
+- * Returns: (nullable) (array zero-terminated=1):
++ * Returns: (nullable) (array zero-terminated=1) (transfer full) (element-type utf8):
+ */
+ gchar **
+ gtk_clipboard_wait_for_uris (GtkClipboard *clipboard)
+@@ -1276,6 +1293,8 @@ _gtk_clipboard_store_all (void)
+ * gtk_clipboard_get_selection:
+ * @clipboard:
+ *
++ * Returns: the selection
++ *
+ * Since: 3.22
+ */
+ GdkAtom
+diff --git a/gdk/quartz/GdkQuartzView.c b/gdk/quartz/GdkQuartzView.c
+index 72e305c..193fcc1 100644
+--- a/gdk/quartz/GdkQuartzView.c
++++ b/gdk/quartz/GdkQuartzView.c
+@@ -33,6 +33,7 @@
+ markedRange = NSMakeRange (NSNotFound, 0);
+ selectedRange = NSMakeRange (0, 0);
+ }
++ [self setValue: @(YES) forKey: @"postsFrameChangedNotifications"];
+
+ return self;
+ }
+diff --git a/gdk/quartz/gdkdisplay-quartz.c b/gdk/quartz/gdkdisplay-quartz.c
+index 30ba921..ed81f9c 100644
+--- a/gdk/quartz/gdkdisplay-quartz.c
++++ b/gdk/quartz/gdkdisplay-quartz.c
+@@ -469,7 +469,7 @@ gdk_quartz_display_get_monitor_at_window (GdkDisplay *display,
+ }
+ if (!monitor)
+ {
+- GdkRectangle rect = cgrect_to_gdkrect ([nswindow frame]);
++ GdkRectangle rect = cgrect_to_gdkrect (NSRectToCGRect ([nswindow frame]));
+ monitor = gdk_display_get_monitor_at_point (display,
+ rect.x + rect.width/2,
+ rect.y + rect.height /2);
+diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
+index 83c1232..efb6961 100644
+--- a/gdk/quartz/gdkevents-quartz.c
++++ b/gdk/quartz/gdkevents-quartz.c
+@@ -608,11 +608,16 @@ find_toplevel_under_pointer (GdkDisplay *display,
+
+ info = _gdk_display_get_pointer_info (display, gdk_seat_get_pointer (seat));
+ toplevel = info->toplevel_under_pointer;
+- if (toplevel && WINDOW_IS_TOPLEVEL (toplevel))
+- get_window_point_from_screen_point (toplevel, screen_point, x, y);
+-
++ if (!(toplevel && WINDOW_IS_TOPLEVEL (toplevel)))
++ {
++ gint gdk_x = 0, gdk_y = 0;
++ _gdk_quartz_window_nspoint_to_gdk_xy (screen_point, &gdk_x, &gdk_y);
++ toplevel = _gdk_quartz_window_find_child (_gdk_root, gdk_x, gdk_y, TRUE);
++ info->toplevel_under_pointer = g_object_ref (toplevel);
++ }
+ if (toplevel)
+ {
++ get_window_point_from_screen_point (toplevel, screen_point, x, y);
+ /* If the coordinates are out of window bounds, this toplevel is not
+ * under the pointer and we thus return NULL. This can occur when
+ * toplevel under pointer has not yet been updated due to a very recent
+diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
+index 66c4a14..3b0b565 100644
+--- a/gdk/quartz/gdkwindow-quartz.c
++++ b/gdk/quartz/gdkwindow-quartz.c
+@@ -208,6 +208,11 @@ gdk_window_impl_quartz_finalize (GObject *object)
+ if (impl->transient_for)
+ g_object_unref (impl->transient_for);
+
++ if (impl->view)
++ [[NSNotificationCenter defaultCenter] removeObserver: impl->toplevel
++ name: @"NSViewFrameDidChangeNotification"
++ object: impl->view];
++
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+ }
+
+@@ -909,6 +914,10 @@ _gdk_quartz_display_create_window_impl (GdkDisplay *display,
+ impl->view = [[GdkQuartzView alloc] initWithFrame:content_rect];
+ [impl->view setGdkWindow:window];
+ [impl->toplevel setContentView:impl->view];
++ [[NSNotificationCenter defaultCenter] addObserver: impl->toplevel
++ selector: @selector (windowDidResize:)
++ name: @"NSViewFrameDidChangeNotification"
++ object: impl->view];
+ [impl->view release];
+ }
+ break;
+@@ -2174,7 +2183,14 @@ _gdk_quartz_window_set_collection_behavior (NSWindow *nswindow,
+ GdkWindowTypeHint hint)
+ {
+ #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
+- if (gdk_quartz_osx_version() >= GDK_OSX_LION)
++#if MAC_OS_X_VERSION_MAX_ALLOWED >= 10110
++#define GDK_QUARTZ_ALLOWS_TILING NSWindowCollectionBehaviorFullScreenAllowsTiling
++#define GDK_QUARTZ_DISALLOWS_TILING NSWindowCollectionBehaviorFullScreenDisallowsTiling
++#else
++#define GDK_QUARTZ_ALLOWS_TILING 1 << 11
++#define GDK_QUARTZ_DISALLOWS_TILING 1 << 12
++#endif
++ if (gdk_quartz_osx_version() >= GDK_OSX_LION)
+ {
+ /* Fullscreen Collection Behavior */
+ NSWindowCollectionBehavior behavior = [nswindow collectionBehavior];
+@@ -2183,20 +2199,22 @@ _gdk_quartz_window_set_collection_behavior (NSWindow *nswindow,
+ case GDK_WINDOW_TYPE_HINT_NORMAL:
+ case GDK_WINDOW_TYPE_HINT_SPLASHSCREEN:
+ behavior &= ~(NSWindowCollectionBehaviorFullScreenAuxiliary &
+- NSWindowCollectionBehaviorFullScreenDisallowsTiling);
++ GDK_QUARTZ_DISALLOWS_TILING);
+ behavior |= (NSWindowCollectionBehaviorFullScreenPrimary |
+- NSWindowCollectionBehaviorFullScreenAllowsTiling);
++ GDK_QUARTZ_ALLOWS_TILING);
+
+ break;
+ default:
+ behavior &= ~(NSWindowCollectionBehaviorFullScreenPrimary &
+- NSWindowCollectionBehaviorFullScreenAllowsTiling);
++ GDK_QUARTZ_ALLOWS_TILING);
+ behavior |= (NSWindowCollectionBehaviorFullScreenAuxiliary |
+- NSWindowCollectionBehaviorFullScreenDisallowsTiling);
++ GDK_QUARTZ_DISALLOWS_TILING);
+ break;
+ }
+ [nswindow setCollectionBehavior:behavior];
+ }
++#undef GDK_QUARTZ_ALLOWS_TILING
++#undef GDK_QUARTZ_DISALLOWS_TILING
+ #endif
+ }
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]