1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-02-06 04:00:08 +00:00
Commit graph

1146 commits

Author SHA1 Message Date
reuk
d4d9740037
Android: Fix problems with accessible text navigation
Previously, when navigating in a text editor by words, the cursor would
get 'stuck' after moving a single word. This issue should now be
resolved.

Additionally, the cursor position was not updated properly when
adjusting a selection, and would instead be moved to the end of the
selected range. With this patch applied, the cursor should now be set to
the correct position when modifying selections. When extending a
selection backwards, the cursor will display at the beginning of the
selected range, rather than the end.

Finally, most Android apps announce the 'skipped' characters or words
whenever the cursor is moved, but this feature was broken in JUCE. This
patch enables this feature.
2022-06-13 11:36:51 +01:00
reuk
9c9d930760
Android: Fix a couple of accessibility-related crashes
These crashes could be seen in the DemoRunner when selecting items in
nested PopupMenu windows.
2022-06-13 11:36:51 +01:00
attila
c1a38b0cfc MacOS: Override and implement JuceNSViewClass::updateTrackingAreas()
This change fixes a bug where a fullscreen window would not receive
mouseMoved events until the cursor left and then reentered the
window's area.
2022-06-10 19:16:37 +02:00
attila
94dcad52d0 Slider: Add keyboard control even without accessibility 2022-06-10 18:19:49 +02:00
reuk
a91694108c Windows: Fix virtual keyboard hide/show on Windows 11
This change fixes an issue where the touch keyboard failed to show when
selecting a TextEditor.

On the current versions of Windows 10 and 11, the undocumented
ITipInvocation workaround no longer seems to be required, so it has been
removed.

The isTabletModeActivatedForWindow function is no longer needed, and has
been removed. This function also appears to return inconsistent results:
the window may be in 'desktop mode', but devices with touchscreens
should still display the keyboard when selecting a TextEditor by touch.
2022-06-08 19:51:11 +01:00
reuk
2fc7d12ae7 TextEditor: Add option to dismiss the virtual keyboard on touches outside
Previously, individual components had to ask the peer to hide and show
the keyboard, by calling textInputRequired() and
dismissPendingTextInput() respectively. When an onscreen keyboard (OSK)
was required, most Peer implementation would directly hide/show the OSK
inside these function. However, the iOS ComponentPeer implementation
instead listened to the application's global keyboard focus, and only
opened the OSK when the focused component was also a TextInputTarget
with active input.

The iOS scheme seems like a better design, as it enforces that the OSK
hiding and showing is synced with the keyboard focus of the application.
In the other implementations, it was possible for a Component to call
textInputRequired even when it didn't have the keyboard focus, putting
the application into an inconsistent state. The iOS scheme also makes
the TextInputTarget interface more useful, as it enforces that the OSK
will only display for components that implement TextInputTarget, and
return true from isTextInputActive().

This patch changes all Peer implementations to match the iOS
implementation, improving consistency. Each time the global keyboard
focus changes, refreshTextInputTarget is called automatically, and the
OSK is shown if the focused component is a TextInputTarget that returns
true from isTextInputActive, and hidden otherwise. Components can also
call refreshTextInputTarget manually. This should be done whenever the
component updates the return value of isTextInputActive(). Effectively,
the Peer is now responsible for keeping track of the focused
TextInputTarget, rather than allowing individual components to hide and
show the OSK at will.

Additionally, this patch adds an option to the TextEditor to
automatically dismiss the OSK when the mouse is clicked outside of the
editor. This should improve user experience on mobile platforms, where
touches on sibling components may cause a TextEditor to gain keyboard
focus and unnecessarily display the OSK.
2022-06-08 19:51:11 +01:00
reuk
fab6a072bc
InAppPurchases: Add support for Android BillingClient 5.0.0 2022-06-06 21:21:41 +01:00
reuk
b17806fbfc
AndroidDocument: Support file access to shared storage locations on Android 30+ 2022-05-23 12:19:38 +01:00
attila
8f99c084fe Linux: Adjust natively reported border size by the current scale factor 2022-05-18 18:41:14 +02:00
attila
751c4177a4 Linux: Fix sporadic positioning error after window creation 2022-05-18 18:41:06 +02:00
attila
31d4f9059d Android: Fix dismissing screen keyboard when interacting with TextEditor 2022-04-27 18:08:17 +02:00
Tom Poole
eda5c696e5 macOS/iOS: Fix unguarded availability warnings 2022-04-19 11:54:55 +01:00
Tom Poole
165d8b0ecd macOS: Make the behaviour of ComponentPeer::grabFocus match the other platforms
This partially reverts f43784dc: "macOS:  Propagate focus loss message when resigning key window status and only grab focus if window can become the key window"
2022-03-17 21:52:33 +00:00
reuk
55a8e10262
Mac Accessibility: Provide slightly more descriptive value states for checkable items 2022-03-07 11:03:55 +00:00
reuk
7b1fba4bae
Windows Accessibility: Fixed backspace character reporting under NVDA
The change introduced in 92f350e617 led to
a regression in the MoveEndpointByUnit function. In this case, a
backward movement by a single character *should* move the endpoint as
long as it remains within the text range.

The issue addressed by the faulty commit is better fixed by
special-casing the 'character' unit case in the ExpandToEnclosingUnit
function.
2022-03-07 11:03:54 +00:00
attila
54ea55325f Windows Accessibility: Only call UiaDisconnectAllProviders in
standalone apps

This change fixes a crash in Reaper when closing a plugin window
with ALT + F4.
2022-02-24 14:07:04 +01:00
reuk
4cf18f0e2c
X11: Avoid leaking result of XGetAtomName 2022-02-23 10:56:12 +00:00
reuk
eb6e579f0a
ComponentPeer: Correctly scale drag and drop coordinates to account for global scale 2022-02-23 10:56:12 +00:00
reuk
9bd52d59af
NSViewComponentPeer: Avoid making temporary windows (dropdowns, callouts) full-screen when in full-screen mode
eabcfbad26 incorrectly set the collection
behaviour NSWindowCollectionBehaviorFullScreenPrimary on all top-level
components, which would cause popup menus and callouts to appear in
their own space when launched from an app running in full-screen mode.
2022-02-23 10:56:11 +00:00
reuk
c9997bd613
Windows: Correctly dispose of hook
This fixes an issue where REAPER was unable to completely unload VST3
plugins.
2022-02-23 10:56:11 +00:00
reuk
0223e44ae7
Image: Keep track of contiguous buffer size to avoid heap buffer overflows
In CoreGraphicsPixelData::createImage, image data was copied from a
BitmapData created from the Image passed into the function.

The BitmapData instance didn't keep track of the size of the buffer it
pointed to, so the buffer size was computed by multiplying the
BitmapData height by its line stride. However, if the BitmapData pointed
to a subsection of an image, the `data` pointer might be offset from
the allocated region, and `data + lineStride * height` would point past
the end of the allocated region. Trying to read/copy this range would
cause a heap buffer overflow at the end of the range.

This change adjusts BitmapData so that it keeps track of the size of the
allocated region. Taking a subsection of an image should subtract the
data pointer offset from the size of the allocated region.
2022-02-23 10:56:09 +00:00
reuk
d9f8ea74e9
NativeMessageBox: Use associatedComponent on macOS 2022-02-18 16:43:26 +00:00
reuk
0a34e7fa71
Mac MessageBox: Fix result code conversion 2022-02-18 16:43:26 +00:00
reuk
92f350e617
Windows Accessibility: Fix single-character range/boundary calculation
Narrator on Windows seems to call ExpandToEnclosingUnit to find the
character immediately following the current cursor position. When
expanding a degenerate range with position `input` (used to represent
the cursor position) to a single-character range, the returned range
should start at `input` and end at `input+1`. Previously,
findTextBoundary() would always return the position before
currentPosition when searching backwards by character, so the result of
ExpandToEnclosingUnit would be off-by-one when expanding to the closest
character.
2022-02-18 16:43:26 +00:00
reuk
bd0ca90952
Linux: Release X lock when unregistering file descriptor in order to avoid deadlocks 2022-02-18 16:43:25 +00:00
reuk
e4a7978621
Windowing: Output error text when window creation fails 2022-02-18 16:43:25 +00:00
Attila Szarvas
101a886821 MouseInputSource: Eliminate superfluous drag events caused by pressure change
The bug was triggered on Monterey where a pressure of 1 is reported
while a mouse button is being held down. This caused an extra drag
event being triggered between mouse down and up events, even if no
movement occurred.
2022-02-15 10:53:32 +00:00
reuk
cdba8eb8e9 NSViewComponentPeer: Fix NSTrackingArea leak 2022-02-07 14:24:11 +00:00
reuk
eabcfbad26 NSViewComponentPeer: Add support for true-full-screen with non-native titlebars 2022-02-07 14:24:11 +00:00
reuk
19536fc7a7 NSViewComponentPeer: Allow restoring previous size when zooming a non-native window 2022-02-07 14:24:11 +00:00
reuk
53600d2d9e iOS Accessibility: Allow navigating tables by rows 2022-02-07 14:24:11 +00:00
reuk
88853f7eda AlertWindow: Show AlertWindows as modal sheets on macOS when associated component is present 2022-02-07 14:24:11 +00:00
attila
6575d24a81 ComponentPeer: Deprecate getFrameSize() 2022-02-03 21:46:36 +01:00
attila
a7811661c5 Linux: Fix restoreWindowFromStateString() when the peer already exists 2022-02-02 19:53:31 +01:00
reuk
ea92834845
Accessibility: Explicitly implement protocols
This change is intended to resolve an issue where iOS apps failed
automated review due to use of non-public selectors. Explicitly adopting
the relevant protocols allowed an app to pass automated review during
testing.
2022-02-01 11:07:34 +00:00
reuk
9b96442022
NSViewComponentPeer: Only send modal input attempts when modal window is not key 2022-01-28 16:09:59 +00:00
reuk
e210b295ce
Windows: Fix issue where windows could be given incorrect size for their current scale
This issue affected windows with JUCE titlebars. When dragging the
window back and forth between two displays with different DPI settings,
the window could sometimes end up with the wrong size.

It looks like setting new window bounds inside the WM_WINDOWPOSCHANGED
message was occasionally causing the system to lose track of the correct
scale for the window.

As a byproduct of this change, JUCE should no longer receive reentrant
calls to handleDPIChanging.
2022-01-27 18:43:21 +00:00
Tom Poole
c072b1bc8e Fix some typos 2022-01-25 11:48:46 +00:00
Tom Poole
3366ad4ed4 Linux: Avoid sending the string terminator to the X11 clipboard 2022-01-25 11:27:54 +00:00
ed
461192b355 Add FocusOutline class for indicating Component keyboard focus 2022-01-20 15:46:53 +00:00
Tom Poole
06db7f074e Linux: Fix a out-of-bounds memory write when copying text to the clipboard 2022-01-20 12:40:38 +00:00
reuk
640194c878
MinGW: Improve compatibility
With this patch applied, the DemoRunner should build under MinGW, and be
(nearly) feature-complete compared to the MSVC build.

Specifically, when building with MinGW:
- Adds support for accessibility
- Fixes build issues in the juce_video module
- Fixes a link issue in the VST3 wrapper when VST3_CAN_REPLACE_VST2 is
  defined
- Adds support for the new-style native FileChooser
- Tidies up some other low-severity warnings

Known issues:
- Direct2D rendering is still not supported when building with MinGW due
  to ABI compatibilities.
2022-01-17 10:58:18 +00:00
reuk
b65803e8a3
Accessbility: Improve support for touch-to-explore on Android 2022-01-17 10:58:17 +00:00
reuk
1edb56df71
NSViewComponentPeer: Properly constrain zoomed window size onto current display 2022-01-17 10:58:17 +00:00
reuk
12b7a8f9d1
Accessibility: Prefer toggle action to press action for checkable items 2022-01-17 10:58:17 +00:00
reuk
f429647ae9
MinGW: Add uuid definitions for MinGW-w64 2022-01-17 10:58:17 +00:00
reuk
e730962921
NSViewComponentPeer: Avoid triggering NSBeeps on unhandled key presses 2022-01-17 10:58:17 +00:00
attila
1fc0de32c8 Windows: Ensure that NativeMessageBox stays in front of its owner 2022-01-12 15:55:23 +00:00
reuk
82df66100c
MouseCursor: Allow arbitrarily-sized cursors on Windows 2022-01-10 22:15:21 +00:00
reuk
8a2bde9fec
NSViewComponentPeer: Only allow full screen mode for resizable windows with maximise buttons
Effects of this change for windows with native titlebars:
- Resizable windows without maximise buttons will now only allow the
  'zoom' behaviour from the rightmost titlebar button (i.e. this button
  will not allow entering full-screen mode)
- Non-resizable windows will grey-out the rightmost titlebar button,
  whether or not the maximise button is enabled
2022-01-10 22:15:20 +00:00