[gtk-osx] Update gtk+-3.0 to gtk-3.24.7 and patch the quartz bits to the latest commits.



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]