mirror of
https://github.com/python/cpython
synced 2024-09-05 08:17:45 +00:00
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>
This commit is contained in:
parent
de2715f086
commit
d67f947c72
25
Mac/BuildScript/backport_gh110950_fix.patch
Normal file
25
Mac/BuildScript/backport_gh110950_fix.patch
Normal file
|
@ -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
|
89
Mac/BuildScript/backport_gh71383_fix.patch
Normal file
89
Mac/BuildScript/backport_gh71383_fix.patch
Normal file
|
@ -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.
|
||||
*
|
||||
|
82
Mac/BuildScript/backport_gh92603_fix.patch
Normal file
82
Mac/BuildScript/backport_gh92603_fix.patch
Normal file
|
@ -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];
|
|
@ -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"
|
||||
|
|
|
@ -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.
|
|
@ -0,0 +1,2 @@
|
|||
Update macOS installer to include an upstream Tcl/Tk fix
|
||||
for the ``ttk::ThemeChanged`` error encountered in Tkinter.
|
|
@ -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.
|
Loading…
Reference in a new issue