summaryrefslogtreecommitdiffstats
path: root/Mac
diff options
context:
space:
mode:
authorChristopher Chavez <chrischavez@gmx.us>2023-11-21 08:12:19 (GMT)
committerGitHub <noreply@github.com>2023-11-21 08:12:19 (GMT)
commitd67f947c72af8a215db2fd285e5de9b1e671fde1 (patch)
tree2446c8c26146cf22a9e46f80dd70f5de3fd20e89 /Mac
parentde2715f086bc799b20e420a82b76180338352565 (diff)
downloadcpython-d67f947c72af8a215db2fd285e5de9b1e671fde1.zip
cpython-d67f947c72af8a215db2fd285e5de9b1e671fde1.tar.gz
cpython-d67f947c72af8a215db2fd285e5de9b1e671fde1.tar.bz2
gh-110950: add upstream Tk fixes to macOS installer. (GH-111041)
Add upstream Tk patches for three problems affecting tkinter users: - Update macOS installer to include a fix accepted by upstream Tcl/Tk for a crash encountered after the first :meth:`tkinter.Tk` instance is destroyed. (gh-92603) - Update macOS installer to include an upstream Tcl/Tk fix for the ``ttk::ThemeChanged`` error encountered in Tkinter. (gh-71383) - Update macOS installer to include an upstream Tcl/Tk fix for the ``Secure coding is not enabled for restorable state!`` warning encountered in Tkinter on macOS 14 Sonoma. (gh-110950) Co-authored-by: Ned Deily <nad@python.org>
Diffstat (limited to 'Mac')
-rw-r--r--Mac/BuildScript/backport_gh110950_fix.patch25
-rw-r--r--Mac/BuildScript/backport_gh71383_fix.patch89
-rw-r--r--Mac/BuildScript/backport_gh92603_fix.patch82
-rwxr-xr-xMac/BuildScript/build-installer.py4
4 files changed, 198 insertions, 2 deletions
diff --git a/Mac/BuildScript/backport_gh110950_fix.patch b/Mac/BuildScript/backport_gh110950_fix.patch
new file mode 100644
index 0000000..793f5a7
--- /dev/null
+++ b/Mac/BuildScript/backport_gh110950_fix.patch
@@ -0,0 +1,25 @@
+From https://core.tcl-lang.org/tk/info/ed7cfbac8db11aa0
+
+Note: the diff here is hand-tweaked so that it applies cleanly to both Tk 8.6.8 and 8.6.13.
+
+diff --git a/macosx/tkMacOSXInit.c b/macosx/tkMacOSXInit.c
+index 71d7c3385..e6a68356c 100644
+--- a/macosx/tkMacOSXInit.c
++++ b/macosx/tkMacOSXInit.c
+@@ -128,6 +128,16 @@ static int TkMacOSXGetAppPathCmd(ClientData cd, Tcl_Interp *ip,
+ observe(NSApplicationDidChangeScreenParametersNotification, displayChanged:);
+ observe(NSTextInputContextKeyboardSelectionDidChangeNotification, keyboardChanged:);
+ #undef observe
++}
++
++
++/*
++ * Fix for 10b38a7a7c.
++ */
++
++- (BOOL)applicationSupportsSecureRestorableState:(NSApplication *)app
++{
++ return YES;
+ }
+
+ -(void)applicationWillFinishLaunching:(NSNotification *)aNotification
diff --git a/Mac/BuildScript/backport_gh71383_fix.patch b/Mac/BuildScript/backport_gh71383_fix.patch
new file mode 100644
index 0000000..d77b104
--- /dev/null
+++ b/Mac/BuildScript/backport_gh71383_fix.patch
@@ -0,0 +1,89 @@
+Adapted from https://core.tcl-lang.org/tk/info/b1876b9ebc4b
+
+Index: generic/tkInt.h
+==================================================================
+--- a/generic/tkInt.h.orig
++++ b/generic/tkInt.h
+@@ -1094,10 +1094,11 @@
+ /*
+ * Themed widget set init function:
+ */
+
+ MODULE_SCOPE int Ttk_Init(Tcl_Interp *interp);
++MODULE_SCOPE void Ttk_TkDestroyedHandler(Tcl_Interp *interp);
+
+ /*
+ * Internal functions shared among Tk modules but not exported to the outside
+ * world:
+ */
+
+Index: generic/tkWindow.c
+==================================================================
+--- a/generic/tkWindow.c.orig
++++ b/generic/tkWindow.c
+@@ -1619,10 +1619,11 @@
+ TkBindFree(winPtr->mainPtr);
+ TkDeleteAllImages(winPtr->mainPtr);
+ TkFontPkgFree(winPtr->mainPtr);
+ TkFocusFree(winPtr->mainPtr);
+ TkStylePkgFree(winPtr->mainPtr);
++ Ttk_TkDestroyedHandler(winPtr->mainPtr->interp);
+
+ /*
+ * When embedding Tk into other applications, make sure that all
+ * destroy events reach the server. Otherwise the embedding
+ * application may also attempt to destroy the windows, resulting
+
+Index: generic/ttk/ttkTheme.c
+==================================================================
+--- a/generic/ttk/ttkTheme.c.orig
++++ b/generic/ttk/ttkTheme.c
+@@ -415,17 +415,10 @@
+ StylePackageData *pkgPtr = (StylePackageData *)clientData;
+ Tcl_HashSearch search;
+ Tcl_HashEntry *entryPtr;
+ Cleanup *cleanup;
+
+- /*
+- * Cancel any pending ThemeChanged calls:
+- */
+- if (pkgPtr->themeChangePending) {
+- Tcl_CancelIdleCall(ThemeChangedProc, pkgPtr);
+- }
+-
+ /*
+ * Free themes.
+ */
+ entryPtr = Tcl_FirstHashEntry(&pkgPtr->themeTable, &search);
+ while (entryPtr != NULL) {
+@@ -528,10 +521,29 @@
+ if (!pkgPtr->themeChangePending) {
+ Tcl_DoWhenIdle(ThemeChangedProc, pkgPtr);
+ pkgPtr->themeChangePending = 1;
+ }
+ }
++
++/* Ttk_TkDestroyedHandler --
++ * See bug [310c74ecf440]: idle calls to ThemeChangedProc()
++ * need to be canceled when Tk is destroyed, since the interp
++ * may still be active afterward; canceling them from
++ * Ttk_StylePkgFree() would be too late.
++ */
++void Ttk_TkDestroyedHandler(
++ Tcl_Interp* interp)
++{
++ StylePackageData* pkgPtr = GetStylePackageData(interp);
++
++ /*
++ * Cancel any pending ThemeChanged calls:
++ */
++ if (pkgPtr->themeChangePending) {
++ Tcl_CancelIdleCall(ThemeChangedProc, pkgPtr);
++ }
++}
+
+ /*
+ * Ttk_CreateTheme --
+ * Create a new theme and register it in the global theme table.
+ *
+
diff --git a/Mac/BuildScript/backport_gh92603_fix.patch b/Mac/BuildScript/backport_gh92603_fix.patch
new file mode 100644
index 0000000..9a37b02
--- /dev/null
+++ b/Mac/BuildScript/backport_gh92603_fix.patch
@@ -0,0 +1,82 @@
+Accepted upstream for release in Tk 8.6.14:
+https://core.tcl-lang.org/tk/info/cf3830280b
+
+--- tk8.6.13/macosx/tkMacOSXWindowEvent.c.orig
++++ tk8.6.13-patched/macosx/tkMacOSXWindowEvent.c
+@@ -239,8 +239,8 @@ extern NSString *NSWindowDidOrderOffScreenNotification;
+ if (winPtr) {
+ TKContentView *view = [window contentView];
+
+-#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101500
+- if (@available(macOS 10.15, *)) {
++#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101400
++ if (@available(macOS 10.14, *)) {
+ [view viewDidChangeEffectiveAppearance];
+ }
+ #endif
+@@ -1237,29 +1237,8 @@ static const char *const accentNames[] = {
+ } else if (effectiveAppearanceName == NSAppearanceNameDarkAqua) {
+ TkSendVirtualEvent(tkwin, "DarkAqua", NULL);
+ }
+- if ([NSApp macOSVersion] < 101500) {
+-
+- /*
+- * Mojave cannot handle the KVO shenanigans that we need for the
+- * highlight and accent color notifications.
+- */
+-
+- return;
+- }
+ if (!defaultColor) {
+ defaultColor = [NSApp macOSVersion] < 110000 ? "Blue" : "Multicolor";
+- preferences = [[NSUserDefaults standardUserDefaults] retain];
+-
+- /*
+- * AppKit calls this method when the user changes the Accent Color
+- * but not when the user changes the Highlight Color. So we register
+- * to receive KVO notifications for Highlight Color as well.
+- */
+-
+- [preferences addObserver:self
+- forKeyPath:@"AppleHighlightColor"
+- options:NSKeyValueObservingOptionNew
+- context:NULL];
+ }
+ NSString *accent = [preferences stringForKey:@"AppleAccentColor"];
+ NSArray *words = [[preferences stringForKey:@"AppleHighlightColor"]
+--- tk8.6.13/macosx/tkMacOSXWm.c.orig
++++ tk8.6.13-patched/macosx/tkMacOSXWm.c
+@@ -1289,6 +1289,11 @@ TkWmDeadWindow(
+ [NSApp _setMainWindow:nil];
+ }
+ [deadNSWindow close];
++#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101400
++ NSUserDefaults *preferences = [NSUserDefaults standardUserDefaults];
++ [preferences removeObserver:deadNSWindow.contentView
++ forKeyPath:@"AppleHighlightColor"];
++#endif
+ [deadNSWindow release];
+
+ #if DEBUG_ZOMBIES > 1
+@@ -6763,6 +6768,21 @@ TkMacOSXMakeRealWindowExist(
+ }
+ TKContentView *contentView = [[TKContentView alloc]
+ initWithFrame:NSZeroRect];
++#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101400
++ NSUserDefaults *preferences = [NSUserDefaults standardUserDefaults];
++
++ /*
++ * AppKit calls the viewDidChangeEffectiveAppearance method when the
++ * user changes the Accent Color but not when the user changes the
++ * Highlight Color. So we register to receive KVO notifications for
++ * Highlight Color as well.
++ */
++
++ [preferences addObserver:contentView
++ forKeyPath:@"AppleHighlightColor"
++ options:NSKeyValueObservingOptionNew
++ context:NULL];
++#endif
+ [window setContentView:contentView];
+ [contentView release];
+ [window setDelegate:NSApp];
diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index a07d38a..84e1422 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -261,14 +261,14 @@ def library_recipes():
tcl_checksum='81656d3367af032e0ae6157eff134f89'
tk_checksum='5e0faecba458ee1386078fb228d008ba'
- tk_patches = ['tk868_on_10_8_10_9.patch']
+ tk_patches = ['backport_gh71383_fix.patch', 'tk868_on_10_8_10_9.patch', 'backport_gh110950_fix.patch']
else:
tcl_tk_ver='8.6.13'
tcl_checksum='43a1fae7412f61ff11de2cfd05d28cfc3a73762f354a417c62370a54e2caf066'
tk_checksum='2e65fa069a23365440a3c56c556b8673b5e32a283800d8d9b257e3f584ce0675'
- tk_patches = [ ]
+ tk_patches = ['backport_gh92603_fix.patch', 'backport_gh71383_fix.patch', 'backport_gh110950_fix.patch']
base_url = "https://prdownloads.sourceforge.net/tcl/{what}{version}-src.tar.gz"