]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.11] gh-110950: add upstream Tk fixes to macOS installer. (GH-111041) (#112293)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 21 Nov 2023 08:29:34 +0000 (09:29 +0100)
committerGitHub <noreply@github.com>
Tue, 21 Nov 2023 08:29:34 +0000 (08:29 +0000)
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)

(cherry picked from commit d67f947c72af8a215db2fd285e5de9b1e671fde1)

Co-authored-by: Christopher Chavez <chrischavez@gmx.us>
Co-authored-by: Ned Deily <nad@python.org>
Mac/BuildScript/backport_gh110950_fix.patch [new file with mode: 0644]
Mac/BuildScript/backport_gh71383_fix.patch [new file with mode: 0644]
Mac/BuildScript/backport_gh92603_fix.patch [new file with mode: 0644]
Mac/BuildScript/build-installer.py
Misc/NEWS.d/next/macOS/2023-08-30-16-33-57.gh-issue-92603.ATkKVO.rst [new file with mode: 0644]
Misc/NEWS.d/next/macOS/2023-09-02-08-49-57.gh-issue-71383.Ttkchg.rst [new file with mode: 0644]
Misc/NEWS.d/next/macOS/2023-10-18-17-26-36.gh-issue-110950.sonoma.rst [new file with mode: 0644]

diff --git a/Mac/BuildScript/backport_gh110950_fix.patch b/Mac/BuildScript/backport_gh110950_fix.patch
new file mode 100644 (file)
index 0000000..793f5a7
--- /dev/null
@@ -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 (file)
index 0000000..d77b104
--- /dev/null
@@ -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 (file)
index 0000000..9a37b02
--- /dev/null
@@ -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];
index f3728e3259e514fe1e7000653594d65025c9a4d3..69bbde2cf1336b223d230e924f17600f463c4ee0 100755 (executable)
@@ -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']
 
 
         result.extend([
diff --git a/Misc/NEWS.d/next/macOS/2023-08-30-16-33-57.gh-issue-92603.ATkKVO.rst b/Misc/NEWS.d/next/macOS/2023-08-30-16-33-57.gh-issue-92603.ATkKVO.rst
new file mode 100644 (file)
index 0000000..477463c
--- /dev/null
@@ -0,0 +1,3 @@
+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.
diff --git a/Misc/NEWS.d/next/macOS/2023-09-02-08-49-57.gh-issue-71383.Ttkchg.rst b/Misc/NEWS.d/next/macOS/2023-09-02-08-49-57.gh-issue-71383.Ttkchg.rst
new file mode 100644 (file)
index 0000000..d8f3e42
--- /dev/null
@@ -0,0 +1,2 @@
+Update macOS installer to include an upstream Tcl/Tk fix
+for the ``ttk::ThemeChanged`` error encountered in Tkinter.
diff --git a/Misc/NEWS.d/next/macOS/2023-10-18-17-26-36.gh-issue-110950.sonoma.rst b/Misc/NEWS.d/next/macOS/2023-10-18-17-26-36.gh-issue-110950.sonoma.rst
new file mode 100644 (file)
index 0000000..c678c09
--- /dev/null
@@ -0,0 +1,3 @@
+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.