diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
index 0b364143f2..1cbb704e96 100644
--- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
+++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
@@ -2135,6 +2135,8 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_gui_basics/detail/juce_AlertWindowHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_ButtonAccessibilityHandler.h"
"../../../../../modules/juce_gui_basics/detail/juce_ComponentHelpers.h"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.cpp"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_CustomMouseCursorInfo.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusRestorer.h"
@@ -4741,6 +4743,8 @@ set_source_files_properties(
"../../../../../modules/juce_gui_basics/detail/juce_AlertWindowHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_ButtonAccessibilityHandler.h"
"../../../../../modules/juce_gui_basics/detail/juce_ComponentHelpers.h"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.cpp"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_CustomMouseCursorInfo.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusRestorer.h"
diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
index a665599474..499296c112 100644
--- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
@@ -2605,6 +2605,9 @@
true
+
+ true
+
true
@@ -4462,6 +4465,7 @@
+
diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
index 9aa3b8c567..0fb75231ab 100644
--- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
@@ -3382,6 +3382,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\drawables
@@ -7779,6 +7782,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\detail
diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
index 563756f528..b1ce3d1fc6 100644
--- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
@@ -2605,6 +2605,9 @@
true
+
+ true
+
true
@@ -4462,6 +4465,7 @@
+
diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
index 190dfdcba7..8851360193 100644
--- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
@@ -3382,6 +3382,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\drawables
@@ -7779,6 +7782,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\detail
diff --git a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
index e29532cfc7..cc322ba0dc 100644
--- a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
+++ b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
@@ -1897,6 +1897,8 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_gui_basics/detail/juce_AlertWindowHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_ButtonAccessibilityHandler.h"
"../../../../../modules/juce_gui_basics/detail/juce_ComponentHelpers.h"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.cpp"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_CustomMouseCursorInfo.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusRestorer.h"
@@ -4163,6 +4165,8 @@ set_source_files_properties(
"../../../../../modules/juce_gui_basics/detail/juce_AlertWindowHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_ButtonAccessibilityHandler.h"
"../../../../../modules/juce_gui_basics/detail/juce_ComponentHelpers.h"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.cpp"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_CustomMouseCursorInfo.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusRestorer.h"
diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
index f2b5bad5de..7c4344c289 100644
--- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
+++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
@@ -2298,6 +2298,9 @@
true
+
+ true
+
true
@@ -3917,6 +3920,7 @@
+
diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
index 663f7cc20f..5c1f3f3100 100644
--- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
+++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
@@ -2899,6 +2899,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\drawables
@@ -6789,6 +6792,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\detail
diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
index a3344a9f26..e1b2c92bc3 100644
--- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
+++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
@@ -2027,6 +2027,8 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_gui_basics/detail/juce_AlertWindowHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_ButtonAccessibilityHandler.h"
"../../../../../modules/juce_gui_basics/detail/juce_ComponentHelpers.h"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.cpp"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_CustomMouseCursorInfo.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusRestorer.h"
@@ -4446,6 +4448,8 @@ set_source_files_properties(
"../../../../../modules/juce_gui_basics/detail/juce_AlertWindowHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_ButtonAccessibilityHandler.h"
"../../../../../modules/juce_gui_basics/detail/juce_ComponentHelpers.h"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.cpp"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_CustomMouseCursorInfo.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusRestorer.h"
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
index 21b898e892..438085532c 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
@@ -2432,6 +2432,9 @@
true
+
+ true
+
true
@@ -4150,6 +4153,7 @@
+
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
index 8d5265970e..6b0a3c25d0 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
@@ -3106,6 +3106,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\drawables
@@ -7224,6 +7227,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\detail
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
index b427001eab..4c88e3f89f 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
@@ -2432,6 +2432,9 @@
true
+
+ true
+
true
@@ -4150,6 +4153,7 @@
+
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
index 4d5a052a12..e0abc080ed 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
@@ -3106,6 +3106,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\drawables
@@ -7224,6 +7227,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\detail
diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
index a5fd7e0851..e743e0a767 100644
--- a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
+++ b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
@@ -1916,6 +1916,8 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_gui_basics/detail/juce_AlertWindowHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_ButtonAccessibilityHandler.h"
"../../../../../modules/juce_gui_basics/detail/juce_ComponentHelpers.h"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.cpp"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_CustomMouseCursorInfo.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusRestorer.h"
@@ -4262,6 +4264,8 @@ set_source_files_properties(
"../../../../../modules/juce_gui_basics/detail/juce_AlertWindowHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_ButtonAccessibilityHandler.h"
"../../../../../modules/juce_gui_basics/detail/juce_ComponentHelpers.h"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.cpp"
+ "../../../../../modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_CustomMouseCursorInfo.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusHelpers.h"
"../../../../../modules/juce_gui_basics/detail/juce_FocusRestorer.h"
diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
index d1e8c3e786..993437686a 100644
--- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
+++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
@@ -2319,6 +2319,9 @@
true
+
+ true
+
true
@@ -4015,6 +4018,7 @@
+
diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
index db995759f9..43f7543ab1 100644
--- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
+++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
@@ -2953,6 +2953,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\drawables
@@ -6951,6 +6954,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\detail
diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
index 864493b659..4a0cdcf5e3 100644
--- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
@@ -1461,6 +1461,9 @@
true
+
+ true
+
true
@@ -2715,6 +2718,7 @@
+
diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
index b945c7a562..04cc52b656 100644
--- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
@@ -1792,6 +1792,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\drawables
@@ -4593,6 +4596,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\detail
diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
index f35568c1b0..36a1d29064 100644
--- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
@@ -1461,6 +1461,9 @@
true
+
+ true
+
true
@@ -2715,6 +2718,7 @@
+
diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
index f02d009a38..bd919d3745 100644
--- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
@@ -1792,6 +1792,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\drawables
@@ -4593,6 +4596,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\detail
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
index a72517aece..5537a0c849 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
@@ -2440,6 +2440,9 @@
true
+
+ true
+
true
@@ -4262,6 +4265,7 @@
+
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
index a711cd88d6..34eb2eac29 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -3154,6 +3154,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\drawables
@@ -7383,6 +7386,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\detail
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
index 3bb964978a..8d4b2af44e 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
@@ -2440,6 +2440,9 @@
true
+
+ true
+
true
@@ -4262,6 +4265,7 @@
+
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
index c25d3f3491..2ccbb18b5f 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -3154,6 +3154,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\drawables
@@ -7383,6 +7386,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\detail
diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj
index d84d407b09..e6eb829988 100644
--- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj
+++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj
@@ -2318,6 +2318,9 @@
true
+
+ true
+
true
@@ -3991,6 +3994,7 @@
+
diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters
index 8472645122..62abda9a53 100644
--- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters
+++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters
@@ -2950,6 +2950,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\drawables
@@ -6918,6 +6921,9 @@
JUCE Modules\juce_gui_basics\detail
+
+ JUCE Modules\juce_gui_basics\detail
+
JUCE Modules\juce_gui_basics\detail
diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm b/modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm
index 1f3a919380..5d70af4c07 100644
--- a/modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm
+++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm
@@ -75,6 +75,7 @@ JUCE_END_IGNORE_WARNINGS_GCC_LIKE
#include
#include
#include
+#include
#if JucePlugin_Enable_ARA
#include
@@ -1747,6 +1748,10 @@ public:
{
lastEventTime = eventTime;
+ if (auto* peer = getPeer())
+ if (detail::ComponentPeerHelpers::isInPerformKeyEquivalent (*peer))
+ return false;
+
auto* view = (NSView*) getWindowHandle();
auto* hostView = [view superview];
diff --git a/modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.cpp b/modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.cpp
new file mode 100644
index 0000000000..6a39f615a2
--- /dev/null
+++ b/modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.cpp
@@ -0,0 +1,48 @@
+/*
+ ==============================================================================
+
+ This file is part of the JUCE framework.
+ Copyright (c) Raw Material Software Limited
+
+ JUCE is an open source framework subject to commercial or open source
+ licensing.
+
+ By downloading, installing, or using the JUCE framework, or combining the
+ JUCE framework with any other source code, object code, content or any other
+ copyrightable work, you agree to the terms of the JUCE End User Licence
+ Agreement, and all incorporated terms including the JUCE Privacy Policy and
+ the JUCE Website Terms of Service, as applicable, which will bind you. If you
+ do not agree to the terms of these agreements, we will not license the JUCE
+ framework to you, and you must discontinue the installation or download
+ process and cease use of the JUCE framework.
+
+ JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
+ JUCE Privacy Policy: https://juce.com/juce-privacy-policy
+ JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
+
+ Or:
+
+ You may also use this code under the terms of the AGPLv3:
+ https://www.gnu.org/licenses/agpl-3.0.en.html
+
+ THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
+ WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
+
+ ==============================================================================
+*/
+
+#if JUCE_MAC
+
+namespace juce::detail
+{
+
+bool ComponentPeerHelpers::isInPerformKeyEquivalent (const ComponentPeer& peer)
+{
+ jassert (dynamic_cast (&peer) != nullptr);
+ return static_cast (&peer)->inPerformKeyEquivalent;
+}
+
+} // namespace juce::detail
+
+#endif
diff --git a/modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.h b/modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.h
new file mode 100644
index 0000000000..08e61912e3
--- /dev/null
+++ b/modules/juce_gui_basics/detail/juce_ComponentPeerHelpers.h
@@ -0,0 +1,49 @@
+/*
+ ==============================================================================
+
+ This file is part of the JUCE framework.
+ Copyright (c) Raw Material Software Limited
+
+ JUCE is an open source framework subject to commercial or open source
+ licensing.
+
+ By downloading, installing, or using the JUCE framework, or combining the
+ JUCE framework with any other source code, object code, content or any other
+ copyrightable work, you agree to the terms of the JUCE End User Licence
+ Agreement, and all incorporated terms including the JUCE Privacy Policy and
+ the JUCE Website Terms of Service, as applicable, which will bind you. If you
+ do not agree to the terms of these agreements, we will not license the JUCE
+ framework to you, and you must discontinue the installation or download
+ process and cease use of the JUCE framework.
+
+ JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
+ JUCE Privacy Policy: https://juce.com/juce-privacy-policy
+ JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
+
+ Or:
+
+ You may also use this code under the terms of the AGPLv3:
+ https://www.gnu.org/licenses/agpl-3.0.en.html
+
+ THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
+ WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
+
+ ==============================================================================
+*/
+
+#if JUCE_MAC
+
+namespace juce::detail
+{
+
+struct ComponentPeerHelpers
+{
+ ComponentPeerHelpers() = delete;
+
+ static bool isInPerformKeyEquivalent (const ComponentPeer& peer);
+};
+
+} // namespace juce::detail
+
+#endif
diff --git a/modules/juce_gui_basics/juce_gui_basics.cpp b/modules/juce_gui_basics/juce_gui_basics.cpp
index dc294ba8e5..e70d1a3401 100644
--- a/modules/juce_gui_basics/juce_gui_basics.cpp
+++ b/modules/juce_gui_basics/juce_gui_basics.cpp
@@ -190,6 +190,8 @@
#include "native/juce_NativeMessageBox_mac.mm"
#include "native/juce_MainMenu_mac.mm"
#include "native/juce_FileChooser_mac.mm"
+ #include "detail/juce_ComponentPeerHelpers.h"
+ #include "detail/juce_ComponentPeerHelpers.cpp"
#endif
#include "native/juce_MouseCursor_mac.mm"
diff --git a/modules/juce_gui_basics/native/juce_NSViewComponentPeer_mac.mm b/modules/juce_gui_basics/native/juce_NSViewComponentPeer_mac.mm
index 55df15b0f0..e23f36d04c 100644
--- a/modules/juce_gui_basics/native/juce_NSViewComponentPeer_mac.mm
+++ b/modules/juce_gui_basics/native/juce_NSViewComponentPeer_mac.mm
@@ -1731,6 +1731,7 @@ public:
bool isStretchingTop = false, isStretchingLeft = false, isStretchingBottom = false, isStretchingRight = false;
bool windowRepresentsFile = false;
bool isAlwaysOnTop = false, wasAlwaysOnTop = false, inBecomeKeyWindow = false;
+ bool inPerformKeyEquivalent = false;
String stringBeingComposed;
int startOfMarkedTextInTextInputTarget = 0;
@@ -2332,6 +2333,8 @@ struct JuceNSViewClass final : public NSViewComponentPeerWrapperinPerformKeyEquivalent, true };
+
const auto ref = owner->safeComponent;
if (owner->sendEventToInputContextOrComponent (ev))