diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a356143..db772c3 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -9,7 +9,7 @@ jobs:
github.event_name == 'push' ||
github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
- runs-on: macos-13
+ runs-on: macos-14
steps:
- uses: actions/checkout@v4
with:
diff --git a/github-brotli.patch b/github-brotli.patch
index bd17af1..0c7a731 100644
--- a/github-brotli.patch
+++ b/github-brotli.patch
@@ -1,24 +1,24 @@
--- modulesets/gtk-osx.modules
+++ modulesets/gtk-osx.modules
-@@ -127,8 +127,9 @@
- then build harfbuzz without cairo because cairo requires
- harfbuzz.
+@@ -109,8 +109,9 @@
+ path so none of the libraries that depend on it can link. Require
+ the install name to be an absolute path.
-->
+
-+ cmakeargs="-DCMAKE_DISABLE_FIND_PACKAGE_HarfBuzz=TRUE -DCMAKE_DISABLE_FIND_PACKAGE_BZip2=TRUE -D BUILD_SHARED_LIBS=true -D CMAKE_BUILD_TYPE=Release -DCMAKE_DISABLE_FIND_PACKAGE_BrotliDec=TRUE">
-
-
++ cmakeargs='-DFT_DISABLE_HARFBUZZ=ON -DBUILD_SHARED_LIBS=true -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_NAME_DIR="${JHBUILD_PREFIX}/lib" -DCMAKE_DISABLE_FIND_PACKAGE_BrotliDec=TRUE'>
+
-
+
-+ cmakeargs="-DCMAKE_DISABLE_FIND_PACKAGE_BZip2=TRUE -D BUILD_SHARED_LIBS=true -D CMAKE_BUILD_TYPE=Release -DCMAKE_DISABLE_FIND_PACKAGE_BrotliDec=TRUE">
-
-
++ cmakeargs='-DFT_REQUIRE_HARFBUZZ=ON -DBUILD_SHARED_LIBS=true -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_NAME_DIR="${JHBUILD_PREFIX}/lib" -DCMAKE_DISABLE_FIND_PACKAGE_BrotliDec=TRUE'>
+
-
+
-
-
-
-
-
+
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
-
-
+
@@ -106,7 +85,6 @@
hash="sha256:63aede5c6d33b6d9b13511cd0be2cac046f2e70fd0a07aa9573a04a82783af96"
repo="ftp.gnu.org" />
-
@@ -119,53 +97,47 @@
-
-
-
-
-
-
-
-
-
+ mesonargs="-Dwith-system-libdir=/usr/lib -Dwith-system-includedir=/usr/include">
+
+
-
+
-
+
-
+
@@ -187,13 +157,11 @@
hash="sha256:e87aae032bf07c26f85ac0ed3250998c37621d95f8bd748b31f15b33c45ee995"
repo="github" />
-
+
@@ -202,7 +170,6 @@
hash="sha256:fcf497688a1d531b192301bd09c55adefda5a662729a58eb8a895166e38ef219"
repo="github" />
-
-
-
+
@@ -228,5 +194,4 @@
-
diff --git a/modulesets/gtk-osx-bootstrap.modules b/modulesets/gtk-osx-bootstrap.modules
index 49bd4be..252c1ee 100644
--- a/modulesets/gtk-osx-bootstrap.modules
+++ b/modulesets/gtk-osx-bootstrap.modules
@@ -2,11 +2,9 @@
-
+
-
-
-
-
-
+
+ hash="sha256:e525fa6fdc3df33cec6b499111f44afa78ce50bf260158580dcf014015a21ba9"
+ repo="github-tarball" >
+
-
-
-
+
+
-
-
-
+
@@ -76,19 +73,17 @@
-
-
+
-
+
-
@@ -97,5 +92,4 @@
-
diff --git a/modulesets/gtk-osx-gstreamer.modules b/modulesets/gtk-osx-gstreamer.modules
index 6e0ea8c..e84c772 100644
--- a/modulesets/gtk-osx-gstreamer.modules
+++ b/modulesets/gtk-osx-gstreamer.modules
@@ -2,11 +2,9 @@
-
+
-
-
-
+
-
-
-
-
+
-
-
+
-
-
-
-
+
-
-
+
-
-
+
-
-
-
+
+
-
-
+
+
+
-
+
-
-
+
@@ -115,18 +104,17 @@
-
-
+
+
-
@@ -138,5 +126,4 @@
-
diff --git a/modulesets/gtk-osx-gtkmm.modules b/modulesets/gtk-osx-gtkmm.modules
index dc234b2..2b12014 100644
--- a/modulesets/gtk-osx-gtkmm.modules
+++ b/modulesets/gtk-osx-gtkmm.modules
@@ -2,33 +2,24 @@
-
+
-
-
-
+
-
-
-
-
+
@@ -71,12 +59,12 @@
-
-
+ hash="sha256:1b24c92624ae1275ccb57758175d35f7c39ad3342d8c0b4ba60f0d9849d2d08a">
+
@@ -84,18 +72,16 @@
-
-
+
-
-
+
-
-
-
-
@@ -148,11 +130,10 @@
-
-
+
@@ -161,5 +142,4 @@
-
diff --git a/modulesets/gtk-osx-network.modules b/modulesets/gtk-osx-network.modules
index 7bea8b9..2ba8534 100644
--- a/modulesets/gtk-osx-network.modules
+++ b/modulesets/gtk-osx-network.modules
@@ -2,11 +2,9 @@
-
+
-
-
+ type="tarball" />
@@ -32,38 +27,33 @@
-
+
-
+
-
+
-
-
@@ -71,14 +61,13 @@
-
-
@@ -86,28 +75,26 @@
-
-
-
-
+
-
-
@@ -117,65 +104,58 @@
-
-
-
-
+
-
-
+
+
+
-
-
-
-
-
+
-
-
+
-
-
+
@@ -183,57 +163,50 @@
-
-
+
-
-
+
-
-
-
-
-
+
-
+ autogen-sh="configure">
-
-
-
+
-
-
+
@@ -274,39 +246,35 @@
-
-
-
+
-
+ cmakeargs='-DPORT=GTK -DENABLE_X11_TARGET=OFF -DENABLE_QUARTZ_TARGET=ON -DENABLE_MINIBROWSER=ON -DENABLE_INTROSPECTION=ON -DUSE_SYSTEMD=OFF -DENABLE_VIDEO=OFF -DENABLE_WEB_AUDIO=OFF -DENABLE_GEOLOCATION=OFF -DUSE_LIBNOTIFY=OFF -DUSE_LIBHYPHEN=OFF -DUSE_LIBSECRET=OFF -DENABLE_TOUCH_EVENTS=OFF -DUSE_OPENJPEG=OFF -DUSE_WOFF2=OFF -DUSE_WPE_RENDERER=OFF -DENABLE_GRAPHICS_CONTEXT_GL=OFF -DENABLE_GAMEPAD=OFF -DUSE_APPLE_ICU=NO -DCMAKE_CXX_FLAGS="-stdlib=libc++ -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-deprecated-copy -Wno-missing-template-arg-list-after-template-kw" -DCMAKE_MACOSX_RPATH=OFF -DCMAKE_INSTALL_NAME_DIR="${JHBUILD_PREFIX}/lib"'>
- -->
@@ -337,5 +304,4 @@
-
diff --git a/modulesets/gtk-osx-python.modules b/modulesets/gtk-osx-python.modules
index af5117a..23c4de3 100644
--- a/modulesets/gtk-osx-python.modules
+++ b/modulesets/gtk-osx-python.modules
@@ -2,35 +2,26 @@
-
+
-
-
-
-
+
@@ -39,30 +30,27 @@
-
-
-
-
+
+
+
-
+
-
-
@@ -70,11 +58,10 @@
-
-
+
@@ -82,33 +69,25 @@
-
-
-
-
+
-
-
-
-
+
+
-
-
+
diff --git a/modulesets/gtk-osx-random.modules b/modulesets/gtk-osx-random.modules
index fbaa2e7..4334568 100644
--- a/modulesets/gtk-osx-random.modules
+++ b/modulesets/gtk-osx-random.modules
@@ -2,11 +2,9 @@
-
+
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+ repo="itstool" />
-
-
-
-
+
-
-
+
-
-
-
+
+
-
-
-
+
- https://www.sqlite.org/
-
+ autogen-template="%(srcdir)s/%(autogen-sh)s --prefix=%(prefix)s">
+
+
+
+
+
+
+
+
-
+
-
+
-
-
-
@@ -228,7 +200,7 @@
-
+
@@ -246,51 +218,44 @@
-
+
+
+
+
+
+
+
+
+
+
-
+ repo="ftp.gnu.org" />
-
-
-
+
+ repo="iso-codes"
+ revision="v4.17.0" />
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -298,5 +263,4 @@
-
diff --git a/modulesets/gtk-osx.modules b/modulesets/gtk-osx.modules
index 25d58a9..80fba8a 100644
--- a/modulesets/gtk-osx.modules
+++ b/modulesets/gtk-osx.modules
@@ -3,11 +3,9 @@
-
+
-
-
-
-
@@ -41,42 +27,33 @@
type="tarball" />
-
+
-
+
-
@@ -87,83 +64,77 @@
-
-
-
-
-
-
-
-
+
+
-
-
+
+
-
-
-
+
-
-
-
+
@@ -171,52 +142,46 @@
-
-
-
+
-
-
-
+
-
-
-
-
-
+
+
@@ -225,26 +190,24 @@
-
-
+
-
+
-
-
@@ -252,39 +215,31 @@
-
-
-
- -->
-
-
-
-
+ mesonargs="-Dfontconfig=enabled -Dintrospection=enabled">
+
-
-
-
+
-
+
-
-
@@ -310,13 +263,11 @@
-
-
-
+
-
+
+
+
+
+
@@ -346,7 +299,6 @@
-
-
-
+ mesonargs="-Dx11-backend=false -Dmedia-gstreamer=disabled -Dintrospection=enabled">
+
@@ -372,48 +323,48 @@
-
-
-
-
+
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
-
+
-
+
-
diff --git a/modulesets/patches/WebKit2Gtk3-2.32.0-misc-fixes.patch b/modulesets/patches/WebKit2Gtk3-2.32.0-misc-fixes.patch
index ff03856..45dee94 100644
--- a/modulesets/patches/WebKit2Gtk3-2.32.0-misc-fixes.patch
+++ b/modulesets/patches/WebKit2Gtk3-2.32.0-misc-fixes.patch
@@ -45,3 +45,51 @@
}
#endif
+--- a/Source/WebCore/platform/LayoutUnit.h
++++ b/Source/WebCore/platform/LayoutUnit.h
+@@ -83,7 +83,7 @@
+ {
+ m_value = clampToInteger(value * kFixedPointDenominator);
+ }
+-
++ LayoutUnit(const LayoutUnit& other) = default;
+ LayoutUnit& operator=(const LayoutUnit& other) = default;
+ LayoutUnit& operator=(const float& other) { return *this = LayoutUnit(other); }
+
+
+--- a/Source/WebCore/xml/XSLStyleSheetLibxslt.cpp
++++ b/Source/WebCore/xml/XSLStyleSheetLibxslt.cpp
+@@ -139,7 +139,8 @@
+ if (frame && frame->page())
+ console = &frame->page()->console();
+
+- XMLDocumentParserScope scope(cachedResourceLoader(), XSLTProcessor::genericErrorFunc, XSLTProcessor::parseErrorFunc, console);
++ XMLDocumentParserScope scope(cachedResourceLoader(), XSLTProcessor::genericErrorFunc,
++ (xmlStructuredErrorFunc)XSLTProcessor::parseErrorFunc, console);
+
+ auto upconvertedCharacters = StringView(string).upconvertedCharacters();
+ const char* buffer = reinterpret_cast(upconvertedCharacters.get());
+
+--- a/Source/WebCore/xml/XSLTProcessorLibxslt.cpp
++++ b/Source/WebCore/xml/XSLTProcessorLibxslt.cpp
+@@ -130,7 +130,7 @@
+ Frame* frame = globalProcessor->xslStylesheet()->ownerDocument()->frame();
+ if (frame && frame->page())
+ console = &frame->page()->console();
+- xmlSetStructuredErrorFunc(console, XSLTProcessor::parseErrorFunc);
++ xmlSetStructuredErrorFunc(console, (xmlStructuredErrorFunc)XSLTProcessor::parseErrorFunc);
+ xmlSetGenericErrorFunc(console, XSLTProcessor::genericErrorFunc);
+
+ // We don't specify an encoding here. Neither Gecko nor WinIE respects
+
+--- a/Source/WTF/wtf/Platform.h
++++ b/Source/WTF/wtf/Platform.h
+@@ -115,6 +115,7 @@
+ /* ICU configuration. Some of these match ICU defaults on some platforms, but we would like them consistently set everywhere we build WebKit. */
+ #define U_HIDE_DEPRECATED_API 1
+ #define U_SHOW_CPLUSPLUS_API 0
++#define U_SHOW_CPLUSPLUS_HEADER_API 0
+ #ifdef __cplusplus
+ #define UCHAR_TYPE char16_t
+ #endif
+
diff --git a/modulesets/patches/glib-2.83.4-remove-osx-version-check.patch b/modulesets/patches/glib-2.83.4-remove-osx-version-check.patch
new file mode 100644
index 0000000..3376fe5
--- /dev/null
+++ b/modulesets/patches/glib-2.83.4-remove-osx-version-check.patch
@@ -0,0 +1,13 @@
+--- a/meson.build
++++ b/meson.build
+@@ -995,8 +995,8 @@
+ add_languages('objc', native: false, required: true)
+ objcc = meson.get_compiler('objc')
+ if not objcc.compiles('''#include
+ #if MAC_OS_X_VERSION_MIN_REQUIRED < 101300
+- #error message "GLib requires macOS 10.13 or later."
++ // #error message "GLib requires macOS 10.13 or later."
+ #endif''',
+ name : 'macOS 10.13 or later')
+ error('GLib requires macOS 10.13 or later.')
+
diff --git a/modulesets/patches/gnutls-gnulib.patch b/modulesets/patches/gnutls-gnulib.patch
index d464063..dcdb84c 100644
--- a/modulesets/patches/gnutls-gnulib.patch
+++ b/modulesets/patches/gnutls-gnulib.patch
@@ -1,12 +1,12 @@
--- a/src/gl/verify.h 2023-02-09 06:55:15.000000000 -0800
+++ b/src/gl/verify.h 2023-06-30 13:53:05.000000000 -0700
-@@ -213,7 +213,7 @@
+@@ -213,5 +213,5 @@
# define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC)
#else
- # define _GL_VERIFY(R, DIAGNOSTIC, ...) \
-- extern int (*_GL_GENSYM (_gl_verify_function) (void)) \
-+ int (*_GL_GENSYM (_gl_verify_function) (void)) \
- [_GL_VERIFY_TRUE (R, DIAGNOSTIC)]
- # if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
- # pragma GCC diagnostic ignored "-Wnested-externs"
+ # define _GL_VERIFY(R, DIAGNOSTIC, ...) \
+- extern int (*_GL_GENSYM (_gl_verify_function) (void)) \
++ int (*_GL_GENSYM (_gl_verify_function) (void)) \
+ [_GL_VERIFY_TRUE (R, DIAGNOSTIC)]
+# if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) && !defined __clang__
+# pragma GCC diagnostic ignored "-Wnested-externs"
diff --git a/modulesets/patches/gspell-1.14-enchant-resource-path.patch b/modulesets/patches/gspell-1.14-enchant-resource-path.patch
new file mode 100644
index 0000000..fdf5529
--- /dev/null
+++ b/modulesets/patches/gspell-1.14-enchant-resource-path.patch
@@ -0,0 +1,82 @@
+From 94528397ba2cff5006a37b79e7cc4b25bf38265f Mon Sep 17 00:00:00 2001
+From: John Ralls
+Date: Tue, 14 Jan 2025 15:48:56 -0800
+Subject: [PATCH] macOS: Set the bundle resource path for enchant.
+
+Otherwise it can't find its modules in an app bundle.
+---
+ gspell/gspell-language.c | 6 ++++++
+ gspell/gspell-osx.c | 20 ++++++++++++++++----
+ gspell/gspell-osx.h | 2 ++
+ 3 files changed, 24 insertions(+), 4 deletions(-)
+
+diff --git a/gspell/gspell-language.c b/gspell/gspell-language.c
+index 6754290..671e7fb 100644
+--- a/gspell/gspell-language.c
++++ b/gspell/gspell-language.c
+@@ -89,6 +89,12 @@ gspell_language_get_available (void)
+ static GList *available_languages = NULL;
+ EnchantBroker *broker;
+
++#ifdef __APPLE__
++ gchar* resource_path = _gspell_osx_get_resource_path ();
++ if (resource_path)
++ enchant_set_prefix_dir (resource_path);
++#endif
++
+ if (initialized)
+ {
+ return available_languages;
+diff --git a/gspell/gspell-osx.c b/gspell/gspell-osx.c
+index 7c791b0..87ccd21 100644
+--- a/gspell/gspell-osx.c
++++ b/gspell/gspell-osx.c
+@@ -7,12 +7,10 @@
+ #import
+
+ gchar *
+-_gspell_osx_get_preferred_spell_language ()
++_gspell_osx_get_preferred_spell_language (void)
+ {
+ gchar *ret = NULL;
+- NSAutoreleasePool *pool;
+-
+- pool = [[NSAutoreleasePool alloc] init];
++ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+ #if defined(MAC_OS_X_VERSION_10_5) && MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5
+ NSArray *langs;
+@@ -27,4 +25,18 @@ _gspell_osx_get_preferred_spell_language ()
+
+ [pool release];
+ return ret;
++
++}
++
++gchar *
++_gspell_osx_get_resource_path (void)
++{
++ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
++ gchar *str = NULL;
++ NSString *path = [[NSBundle mainBundle] resourcePath];
++ if (!path)
++ return NULL;
++ str = strdup ([path UTF8String]);
++ [pool release];
++ return str;
+ }
+diff --git a/gspell/gspell-osx.h b/gspell/gspell-osx.h
+index ddb40ea..17fd536 100644
+--- a/gspell/gspell-osx.h
++++ b/gspell/gspell-osx.h
+@@ -11,5 +11,7 @@ G_BEGIN_DECLS
+
+ G_GNUC_INTERNAL
+ gchar * _gspell_osx_get_preferred_spell_language (void);
++G_GNUC_INTERNAL
++gchar * _gspell_osx_get_resource_path (void);
+
+ G_END_DECLS
+--
+2.39.5 (Apple Git-154)
+
diff --git a/modulesets/patches/gst-plugins-bad-missing-enum.patch b/modulesets/patches/gst-plugins-bad-missing-enum.patch
new file mode 100644
index 0000000..78a0d62
--- /dev/null
+++ b/modulesets/patches/gst-plugins-bad-missing-enum.patch
@@ -0,0 +1,19 @@
+# https://code.videolan.org/videolan/vlc/-/merge_requests/1966/diffs
+# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7157
+--- a/sys/applemedia/vtdec.c 2024-12-29 18:02:51
++++ b/sys/applemedia/vtdec.c 2024-12-29 18:14:48
+@@ -76,6 +76,14 @@
+ VTDEC_FRAME_FLAG_ERROR = (1 << 12),
+ };
+
++// Error enum values introduced in macOS 12
++#if defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < 120000
++enum
++{
++ kVTVideoDecoderReferenceMissingErr = -17694
++};
++#endif
++
+ static void gst_vtdec_finalize (GObject * object);
+
+ static gboolean gst_vtdec_start (GstVideoDecoder * decoder);
diff --git a/modulesets/patches/gtk-3.24.48-GtkNotebook-drag-operation-failed.patch b/modulesets/patches/gtk-3.24.48-GtkNotebook-drag-operation-failed.patch
new file mode 100644
index 0000000..622e80f
--- /dev/null
+++ b/modulesets/patches/gtk-3.24.48-GtkNotebook-drag-operation-failed.patch
@@ -0,0 +1,27 @@
+From cfb2ec3410fc3c640688e9d873ea942f232b317a Mon Sep 17 00:00:00 2001
+From: John Ralls
+Date: Wed, 16 Apr 2025 11:25:35 -0400
+Subject: [PATCH 5/5] GtkNotebook: Set drag operation to None on drag_failed.
+
+Otherwise it's stuck on whatever the drag was and if that was
+DRAG_OPERATION_DETACHED it stops the current tab being drawn because
+of the test for that at the end of gtk_notebook_draw_tabs.
+---
+ gtk/gtknotebook.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
+index f51570e745..b90f689b6a 100644
+--- a/gtk/gtknotebook.c
++++ b/gtk/gtknotebook.c
+@@ -3765,6 +3765,7 @@ gtk_notebook_drag_failed (GtkWidget *widget,
+ GtkNotebookPrivate *priv = notebook->priv;
+
+ priv->rootwindow_drop = FALSE;
++ priv->operation = DRAG_OPERATION_NONE;
+
+ if (result == GTK_DRAG_RESULT_NO_TARGET)
+ {
+--
+2.39.5 (Apple Git-154)
+
diff --git a/modulesets/patches/gtk-3.24.48-check-all-dnd-windows.patch b/modulesets/patches/gtk-3.24.48-check-all-dnd-windows.patch
new file mode 100644
index 0000000..f1cbf11
--- /dev/null
+++ b/modulesets/patches/gtk-3.24.48-check-all-dnd-windows.patch
@@ -0,0 +1,30 @@
+From 0bf87214125519671545e92b2fd1845f0a10faa1 Mon Sep 17 00:00:00 2001
+From: John Ralls
+Date: Thu, 10 Apr 2025 12:05:37 -0400
+Subject: [PATCH] [quartz] Check all the windows not just the first one.
+
+---
+ gdk/quartz/GdkQuartzNSWindow.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/gdk/quartz/GdkQuartzNSWindow.c b/gdk/quartz/GdkQuartzNSWindow.c
+index b00175871f..eaefa76e09 100644
+--- a/gdk/quartz/GdkQuartzNSWindow.c
++++ b/gdk/quartz/GdkQuartzNSWindow.c
+@@ -790,9 +790,10 @@ update_context_from_dragging_info (id sender)
+ wh = gdk_window_get_height (win);
+
+ if (gx > wx && gy > wy && gx <= wx + ww && gy <= wy + wh)
+- event->dnd.context->dest_window = g_object_ref (win);
+- break;
+- }
++ {
++ event->dnd.context->dest_window = g_object_ref (win);
++ break;
++ }}
+ }
+
+ device = gdk_drag_context_get_device (_gdk_quartz_drag_source_context);
+--
+2.39.5 (Apple Git-154)
+
diff --git a/modulesets/patches/gtk-3.24.48-fix-context-menus-non-Retina.patch b/modulesets/patches/gtk-3.24.48-fix-context-menus-non-Retina.patch
new file mode 100644
index 0000000..edfb189
--- /dev/null
+++ b/modulesets/patches/gtk-3.24.48-fix-context-menus-non-Retina.patch
@@ -0,0 +1,34 @@
+From ae49ae3f657dc0086eca8873213cf9dcee953ab8 Mon Sep 17 00:00:00 2001
+From: John Ralls
+Date: Thu, 12 Jun 2025 16:06:02 -0700
+Subject: [PATCH] [Quartz] Set the view's frame in a move for temp windows.
+
+Temp windows (context menus mostly) are created at 0,0 then moved to the
+pointer location. When the move is from a Retina to a non-Retina monitor
+the view needs to be redrawn at the new scale, but macOS doesn't recognize
+that and the menu ends up truncated. Setting the frame on the view forces
+the redraw.
+
+Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/7598
+---
+ gdk/quartz/gdkwindow-quartz.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
+index 9a6aea9c6f..08e47dd089 100644
+--- a/gdk/quartz/gdkwindow-quartz.c
++++ b/gdk/quartz/gdkwindow-quartz.c
+@@ -1393,6 +1393,10 @@ move_resize_window_internal (GdkWindow *window,
+
+ frame_rect = [impl->toplevel frameRectForContentRect:content_rect];
+ [impl->toplevel setFrame:frame_rect display:YES];
++
++ if (window->window_type == GDK_WINDOW_TEMP)
++ [impl->view setFrame:content_rect];
++
+ impl->cairo_surface = gdk_quartz_ref_cairo_surface (window);
+ cairo_surface_destroy (impl->cairo_surface); // Remove the extra reference
+ }
+--
+2.39.5 (Apple Git-154)
+
diff --git a/modulesets/patches/gtk-3.24.48-fix-leaking-cairo-surface.patch b/modulesets/patches/gtk-3.24.48-fix-leaking-cairo-surface.patch
new file mode 100644
index 0000000..5395f60
--- /dev/null
+++ b/modulesets/patches/gtk-3.24.48-fix-leaking-cairo-surface.patch
@@ -0,0 +1,25 @@
+From 6906f010aa5ae3fb0cfb3b6bed47e7bd4fa37e1b Mon Sep 17 00:00:00 2001
+From: John Ralls
+Date: Mon, 17 Mar 2025 15:05:50 -0700
+Subject: [PATCH 2/5] [quartz] Fix leak of GdkWindowImplQuartz's cairo surface.
+
+---
+ gdk/quartz/gdkwindow-quartz.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
+index 68c1ebd971..6a7527599d 100644
+--- a/gdk/quartz/gdkwindow-quartz.c
++++ b/gdk/quartz/gdkwindow-quartz.c
+@@ -1126,6 +1126,8 @@ gdk_quartz_window_destroy (GdkWindow *window,
+ cairo_surface_finish (impl->cairo_surface);
+ cairo_surface_set_user_data (impl->cairo_surface, &gdk_quartz_cairo_key,
+ NULL, NULL);
++ if (cairo_surface_get_reference_count(impl->cairo_surface))
++ cairo_surface_destroy(impl->cairo_surface);
+ impl->cairo_surface = NULL;
+ }
+
+--
+2.39.5 (Apple Git-154)
+
diff --git a/modulesets/patches/gtk-3.24.48-remove-redundant-NSView-calls.patch b/modulesets/patches/gtk-3.24.48-remove-redundant-NSView-calls.patch
new file mode 100644
index 0000000..9f43053
--- /dev/null
+++ b/modulesets/patches/gtk-3.24.48-remove-redundant-NSView-calls.patch
@@ -0,0 +1,68 @@
+From 8fa5fccf15cae457fcbddf8f59602b44f06550e4 Mon Sep 17 00:00:00 2001
+From: John Ralls
+Date: Mon, 17 Mar 2025 13:24:47 -0700
+Subject: [PATCH 1/5] [quartz] Remove redundant NSView calls
+
+macOS calls NSView setFrame: and posts the FraneDidChange notification
+without being told, so these calls resulted in more than one
+notification/execution for a single event.
+
+Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/7329
+---
+ gdk/quartz/GdkQuartzNSWindow.c | 2 --
+ gdk/quartz/gdkwindow-quartz.c | 8 --------
+ 2 files changed, 10 deletions(-)
+
+diff --git a/gdk/quartz/GdkQuartzNSWindow.c b/gdk/quartz/GdkQuartzNSWindow.c
+index b00175871f..77185149d8 100644
+--- a/gdk/quartz/GdkQuartzNSWindow.c
++++ b/gdk/quartz/GdkQuartzNSWindow.c
+@@ -251,8 +251,6 @@ synthesize_configure_event(GdkWindow *window)
+ content_rect.origin.x = 0;
+ content_rect.origin.y = 0;
+
+- [[self contentView] setFrame:content_rect];
+-
+ /* Certain resize operations (e.g. going fullscreen), also move the
+ * origin of the window.
+ */
+diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
+index 5d6d522846..68c1ebd971 100644
+--- a/gdk/quartz/gdkwindow-quartz.c
++++ b/gdk/quartz/gdkwindow-quartz.c
+@@ -993,10 +993,6 @@ _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];
+ }
+ break;
+
+@@ -1390,7 +1386,6 @@ move_resize_window_internal (GdkWindow *window,
+ content_rect = NSMakeRect (gx, gy, window->width, window->height);
+
+ frame_rect = [impl->toplevel frameRectForContentRect:content_rect];
+- [impl->toplevel setFrame:frame_rect display:YES];
+ impl->cairo_surface = gdk_quartz_ref_cairo_surface (window);
+ cairo_surface_destroy (impl->cairo_surface); // Remove the extra reference
+ }
+@@ -1433,13 +1428,10 @@ move_resize_window_internal (GdkWindow *window,
+ by:delta];
+ }
+
+- [impl->view setFrame:nsrect];
+-
+ gdk_quartz_window_set_needs_display_in_region (window, expose_region);
+ }
+ else
+ {
+- [impl->view setFrame:nsrect];
+ [impl->view setNeedsDisplay:YES];
+ }
+
+--
+2.39.5 (Apple Git-154)
+
diff --git a/modulesets/patches/gtk-mac-integration-work-around-svg-locale-bug.patch b/modulesets/patches/gtk-mac-integration-work-around-svg-locale-bug.patch
deleted file mode 100644
index 9f0be23..0000000
--- a/modulesets/patches/gtk-mac-integration-work-around-svg-locale-bug.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 9774a706d1d89abaaf3dfbd9522b28934cc29138 Mon Sep 17 00:00:00 2001
-From: John Ralls
-Date: Sat, 18 Sep 2021 13:11:02 -0700
-Subject: [PATCH] Set C locale when creating a menu item.
-
-Works around macOS bug described in https://gitlab.gnome.org/GNOME/gtk-mac-integration/-/issues/14.
----
- src/GNSMenuItem.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/GNSMenuItem.c b/src/GNSMenuItem.c
-index 48ec0d1..81d2547 100644
---- a/src/GNSMenuItem.c
-+++ b/src/GNSMenuItem.c
-@@ -44,6 +44,7 @@ idle_call_activate (ClosureData *action)
-
- /* All menu items have the action "activate", which will be handled by this child class
- */
-+ const char* locale = setlocale(LC_NUMERIC, "C");
- self = [ super initWithTitle: title action: @selector (activate: ) keyEquivalent: @"" ];
-
- if (self)
-@@ -58,6 +59,7 @@ idle_call_activate (ClosureData *action)
- notUsed = NO;
- g_weak_ref_set (&menuItem, GTK_MENU_ITEM (gtkmenuitem));
- }
-+ setlocale(LC_NUMERIC, locale);
- return self;
- }
-
---
-2.30.1 (Apple Git-130)
-
diff --git a/modulesets/patches/librsvg-2.60.0-remove-osx-version-check.patch b/modulesets/patches/librsvg-2.60.0-remove-osx-version-check.patch
new file mode 100644
index 0000000..a7fe000
--- /dev/null
+++ b/modulesets/patches/librsvg-2.60.0-remove-osx-version-check.patch
@@ -0,0 +1,12 @@
+--- a/meson.build
++++ b/meson.build
+@@ -33,8 +33,8 @@
+ # https://github.com/rust-lang/rust/pull/116319
+ ret = cc.compiles('''#include
+ #include
+ #if !((TARGET_OS_OSX && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200L) || (TARGET_OS_IOS && __IPHONE_OS_VERSION_MIN_REQUIRED >= 100000L))
+-# error "https://gitlab.gnome.org/GNOME/librsvg/-/issues/1097"
++//# error "https://gitlab.gnome.org/GNOME/librsvg/-/issues/1097"
+ #endif''',
+ name: 'Targets at least macOS 10.12 or iOS 10',
+ )
diff --git a/modulesets/patches/librsvg-fix-symbol-link-argument.patch b/modulesets/patches/librsvg-fix-symbol-link-argument.patch
new file mode 100644
index 0000000..b98486c
--- /dev/null
+++ b/modulesets/patches/librsvg-fix-symbol-link-argument.patch
@@ -0,0 +1,44 @@
+From e18cadd81602fc7fc34fcc857cd8b610114260bd Mon Sep 17 00:00:00 2001
+From: "L. E. Segovia"
+Date: Thu, 3 Jul 2025 13:47:10 -0300
+Subject: [PATCH] meson: Fix symbol link argument missing in non-Windows builds
+
+I forgot to fix this upstream; on the Meson port for FFmpeg we had tried a
+similar approach, but it ended up being useless because link arguments will
+actually run against the provided objects, unlike compiler arguments. Meson's
+dummy executable will obviously lack the listed symbols.
+
+Fixes #1177
+
+Part-of:
+---
+ rsvg/meson.build | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/rsvg/meson.build b/rsvg/meson.build
+index f25912743..3de6fbed6 100644
+--- a/rsvg/meson.build
++++ b/rsvg/meson.build
+@@ -170,6 +170,8 @@ version_script = meson.current_build_dir() / '@0@.def'.format(librsvg_pc)
+
+ if host_system in ['darwin', 'ios']
+ vflag = '-Wl,-exported_symbols_list,@0@'.format(version_script)
++elif host_system in ['windows', 'cygwin']
++ vflag = []
+ else
+ vflag = '-Wl,--version-script,@0@'.format(version_script)
+ endif
+@@ -192,7 +194,9 @@ strip_link_args = cc.get_supported_link_arguments(
+ '-Wl,-Bsymbolic-functions',
+ )
+
+-link_args = cc.get_supported_link_arguments([vflag]) + strip_link_args
++# The symbol list argument cannot be tested, as the dummy
++# executable Meson uses will lack the necessary functions.
++link_args = strip_link_args + vflag
+
+ # Some systems, reportedly OpenBSD and macOS, refuse
+ # to create libraries without any object files. Compiling
+--
+2.45.2
+
diff --git a/modulesets/patches/librsvg-libpixbufloader-install-names.patch b/modulesets/patches/librsvg-libpixbufloader-install-names.patch
new file mode 100644
index 0000000..9acbad3
--- /dev/null
+++ b/modulesets/patches/librsvg-libpixbufloader-install-names.patch
@@ -0,0 +1,25 @@
+--- a/gdk-pixbuf-loader/meson_install.py 2024-10-29 16:44:51
++++ b/gdk-pixbuf-loader/meson_install.py 2025-04-03 15:10:45
+@@ -15,6 +16,22 @@
+
+ if __name__ == '__main__':
+ args = argparse.parse_args()
++ if sys.platform in ['darwin', 'ios']:
++ modulepath = Path(args.gdk_pixbuf_moduledir).resolve()
++ prefix = modulepath.parent.parent.parent
++ location = modulepath
++ if 'DESTDIR' in os.environ:
++ location = Path(os.environ['DESTDIR']) / modulepath.relative_to('/')
++ oldfilepath = location / 'libpixbufloader_svg.dylib'
++ newfilename = 'libpixbufloader-svg.so'
++ newfilepath = location / newfilename
++ installfilepath = modulepath / 'libpixbufloader-svg.so'
++ librsvgpath = prefix / 'librsvg-2.2.dylib'
++ os.rename(oldfilepath.as_posix(), newfilepath.as_posix())
++ subprocess.run(
++ ['install_name_tool', '-id', installfilepath.as_posix(), newfilepath.as_posix()])
++ subprocess.run(
++ ['install_name_tool', '-change', '@rpath/librsvg-2.2.dylib', librsvgpath.as_posix(), newfilepath.as_posix()])
+
+ cache_file: Path = args.gdk_pixbuf_cache_file
+
diff --git a/modulesets/patches/libtool-apple-sort.patch b/modulesets/patches/libtool-apple-sort.patch
index 8c880ef..20937bd 100644
--- a/modulesets/patches/libtool-apple-sort.patch
+++ b/modulesets/patches/libtool-apple-sort.patch
@@ -1,29 +1,31 @@
--- a/Makefile.am 2015-01-20 07:34:33.000000000 -0800
+++ b/Makefile.am 2021-11-12 10:18:23.000000000 -0800
-@@ -416,8 +416,8 @@
+@@ -418,8 +418,8 @@
# files created in the build tree, so instead we regenerate the
# manual pages if the sources for the build-tree files we want to
# run have changed.
-$(libtool_1): $(ltmain_sh)
-- $(AM_V_GEN)$(update_mans) --help-option=--help-all libtool
+- $(AM_V_GEN)$(update_mans) -n 'Provide generalized library-building support services' --help-option=--help-all libtool
+#$(libtool_1): $(ltmain_sh)
-+# $(AM_V_GEN)$(update_mans) --help-option=--help-all libtool
++# $(AM_V_GEN)$(update_mans) -n 'Provide generalized library-building support services' --help-option=--help-all libtool
$(libtoolize_1): $(libtoolize_in)
- $(AM_V_GEN)$(update_mans) libtoolize
+ $(AM_V_GEN)$(update_mans) -n 'Prepare a package to use libtool' libtoolize
+
--- s/Makefile.in 2015-02-15 08:14:14.000000000 -0800
+++ b/Makefile.in 2021-11-12 10:26:26.000000000 -0800
-@@ -2324,8 +2324,8 @@
+@@ -2427,8 +2427,8 @@
# files created in the build tree, so instead we regenerate the
# manual pages if the sources for the build-tree files we want to
# run have changed.
-$(libtool_1): $(ltmain_sh)
-- $(AM_V_GEN)$(update_mans) --help-option=--help-all libtool
+- $(AM_V_GEN)$(update_mans) -n 'Provide generalized library-building support services' --help-option=--help-all libtool
+#$(libtool_1): $(ltmain_sh)
-+# $(AM_V_GEN)$(update_mans) --help-option=--help-all libtool
++# $(AM_V_GEN)$(update_mans) -n 'Provide generalized library-building support services' --help-option=--help-all libtool
$(libtoolize_1): $(libtoolize_in)
- $(AM_V_GEN)$(update_mans) libtoolize
+ $(AM_V_GEN)$(update_mans) -n 'Prepare a package to use libtool' libtoolize
+
--- a/build-aux/ltmain.in 2015-02-06 04:57:56.000000000 -0800
+++ b/build-aux/ltmain.in 2021-11-08 14:58:33.000000000 -0800
@@ -3188,7 +3188,7 @@
diff --git a/modulesets/patches/nasm-dont-install-docs.patch b/modulesets/patches/nasm-dont-install-docs.patch
new file mode 100644
index 0000000..e9417e7
--- /dev/null
+++ b/modulesets/patches/nasm-dont-install-docs.patch
@@ -0,0 +1,14 @@
+--- a/Makefile.in 2024-04-17 09:48:27
++++ n/Makefile.in 2025-04-21 16:15:43
+@@ -394,9 +394,6 @@
+ install: $(PROGS)
+ $(MKDIR_P) $(DESTDIR)$(bindir)
+ $(INSTALL_PROGRAM) $(PROGS) $(DESTDIR)$(bindir)/
+- $(MKDIR_P) $(DESTDIR)$(mandir)/man1
+- $(INSTALL_DATA) $(srcdir)/nasm.1 $(DESTDIR)$(mandir)/man1/nasm.1
+- $(INSTALL_DATA) $(srcdir)/ndisasm.1 $(DESTDIR)$(mandir)/man1/ndisasm.1
+
+ clean:
+ for d in . $(SUBDIRS) $(XSUBDIRS); do \
+
+Diff finished. Mon Apr 21 16:15:55 2025
diff --git a/modulesets/patches/pango-ct-font-fallback.patch b/modulesets/patches/pango-ct-font-fallback.patch
deleted file mode 100644
index f0a872c..0000000
--- a/modulesets/patches/pango-ct-font-fallback.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-diff --git a/pango/pangocoretext-fontmap.c b/pango/pangocoretext-fontmap.c
-index 7eb00113..983e6fcb 100644
---- a/pango/pangocoretext-fontmap.c
-+++ b/pango/pangocoretext-fontmap.c
-@@ -1538,6 +1538,15 @@ pango_core_text_font_map_init (PangoCoreTextFontMap *ctfontmap)
- g_hash_table_insert (ctfontmap->families,
- g_utf8_casefold (family->family_name, -1), family);
- }
-+ /* Insert .AppleSystemUIFont because it isn't included in the result
-+ * set from CTFontCollectionCreateFromAvailableFonts. If it's not
-+ * included in the families fontset it can't be used to render text.
-+ */
-+ family = g_object_new (PANGO_TYPE_CORE_TEXT_FAMILY, NULL);
-+ family->family_name = g_strdup (".AppleSystemUIFont");
-+ g_hash_table_insert (ctfontmap->families,
-+ g_utf8_casefold (family->family_name, -1), family);
-+
- }
-
- static PangoFontFace *
---- a/pango/pangocoretext.c
-+++ b/pango/pangocoretext.c
-@@ -82,6 +82,7 @@ ct_font_descriptor_get_coverage (CTFontDescriptorRef desc)
- const UInt8 *ptr, *plane_ptr;
- const UInt32 plane_size = 8192;
- PangoCoverage *coverage;
-+ CFStringRef font_name;
-
- coverage = pango_coverage_new ();
-
-@@ -89,6 +90,13 @@ ct_font_descriptor_get_coverage (CTFontDescriptorRef desc)
- if (!charset)
- /* Return an empty coverage */
- return coverage;
-+ /* .AppleSymbols Fallback's CTFontDescriptor has a host of members
-+ * but the font appears to have no glyphs so return an empty
-+ * coverage.
-+ */
-+ font_name = (CFStringRef)CTFontDescriptorCopyAttribute(desc, kCTFontNameAttribute);
-+ if (CFStringCompare(font_name, CFSTR(".AppleSymbolsFB"), 0) == kCFCompareEqualTo)
-+ return coverage;
-
- bitmap = CFCharacterSetCreateBitmapRepresentation (kCFAllocatorDefault,
- charset);
diff --git a/modulesets/patches/sqlite3-install-name.patch b/modulesets/patches/sqlite3-install-name.patch
new file mode 100644
index 0000000..e46715d
--- /dev/null
+++ b/modulesets/patches/sqlite3-install-name.patch
@@ -0,0 +1,13 @@
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -148,7 +148,8 @@
+ $(libsqlite3.SO): sqlite3.o
+ $(CC) -o $@ sqlite3.o $(LDFLAGS.shlib) \
+ $(LDFLAGS) $(LDFLAGS.libsqlite3) \
+- $(LDFLAGS.libsqlite3.os-specific) $(LDFLAGS.libsqlite3.soname)
++ $(LDFLAGS.libsqlite3.os-specific) $(LDFLAGS.libsqlite3.soname) \
++ -install_name ${JHBUILD_PREFIX}/lib/$@
+ all: $(libsqlite3.SO)
+
+ $(libsqlite3.LIB): sqlite3.o
+
diff --git a/modulesets/upstream-ref b/modulesets/upstream-ref
index 492aea1..0ed1a87 100644
--- a/modulesets/upstream-ref
+++ b/modulesets/upstream-ref
@@ -1,5 +1,5 @@
-commit b0864c09e715b4964b6fb1f8228e9c939f3545d0
-Author: Fabian Wüthrich
-Date: Fri Jul 19 23:27:52 2024 +0000
+commit 6216956ef73365a026b9fa7771e3077f0ea7fee6
+Author: John Ralls
+Date: Mon Aug 4 12:24:37 2025 -0700
- Add install instructions to README
+ Update gcrypt, libgpg-error, and gnutls to the latest releases.
diff --git a/pins.sh b/pins.sh
index 706dec9..d208580 100644
--- a/pins.sh
+++ b/pins.sh
@@ -1,7 +1,7 @@
# https://gitlab.gnome.org/GNOME/gtk-osx/-/commits/master
-# use latest commit (2024-07-24)
-PIN_GTK_OSX_COMMIT='b0864c09'
+# use latest commit (2025-08-04)
+PIN_GTK_OSX_COMMIT='6216956e'
# https://gitlab.gnome.org/GNOME/gtk-mac-bundler/-/commits/master
-# use latest commit (2024-05-19)
-PIN_GTK_MAC_BUNDLER_COMMIT='90443a1d'
+# use latest commit (2025-03-20)
+PIN_GTK_MAC_BUNDLER_COMMIT='774b5eaa'