mirror of
https://github.com/python/cpython
synced 2026-09-29 12:10:30 +03: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
7 changed files with 206 additions and 2 deletions
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.
|
||||
*
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue