The embedded copy of libpng doesn't contain code for processor-specific
hardware optimizations, but it may still try to use them in some cases,
resulting in linker errors.
juce_PNGLoader.cpp already sets `PNG_ARM_NEON_OPT` to 0 to disable
optimizations on ARM, but this should be done for all architectures,
especially PowerPC, where builds currently fail.
On x86, this isn't strictly necessary, because libpng optimizations are
opt-in for x86, rather than opt-out as with all other architectures, but
for completeness and robustness it is also included here.
The macros to disable optimizations on other platforms come straight
from libpng's own build files; this is how it disables optimizations
when compiled without support for them. `PNG_ARM_NEON_OPT` is already
one of those macros; this commit simply adds the other three.
The old API only allowed cancelling property "get" inquiries and
subscription updates. However, there are use-cases for cancelling other
requests too. e.g. switching between views in a JUCE app might mean that
it's no longer necessary to subscribe to a particular property.
Cancelling subscriptions ends up being quite involved. Different
handling is needed depending on whether the subscription is cancelled
before or after the responder replies to the initial request.
In addition, the responder may ask the initiator to retry a subscription
begin request.
The new class hold a list of ChildProcesses and periodically checks
their return value until they report termination. On Linux this check
is necessary to avoid leaving zombie processes behind.
This fixes an edge case in which if listeners are both removed and added during a callback the added listener(s) may be called during the same iteration
viewDidDisappear may be called when a file is successfully selected.
presentationControllerDidDismiss is only called when the controller is
dismissed manually by the user, e.g. by tapping outside the sheet, or by
dragging it away.
Checking for sheet dismissal is necessary in iOS 15, but not in iOS 17.
In iOS 17, tapping outside the file chooser causes a callback to
documentPickerWasCancelled instead.
A Timer will only be created for the analysis task when necessary. This
ensures that the ScopedJuceInitialiser_GUI member inside the
DocumentController is initialised before a Timer instance is even
created.
While Google Drive seemingly isn't trying to access URI's that aren't an
exact match, without the presence of FLAG_GRANT_PREFIX_URI_PERMISSION,
sharing files with Google Drive will silently fail.
Prior to this change all <tspan> elements without x, and y attributes would
just inherit the parent elements such attributes and be placed in the same
location. This didn't respect whether these attributes were consumed already
by the parent.
Having multiple x and y elements, or having a different number of x and y
elements was also not handled in line with the rules for SVG.