Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
skiko
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liuqiang
skiko
Commits
ed8ee560
Unverified
Commit
ed8ee560
authored
Feb 18, 2022
by
Aleksandr Veselov
Committed by
GitHub
Feb 18, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Support focus management for accessibility (#501)
Required by androidx#200
parent
e6c1570a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
25 additions
and
4 deletions
+25
-4
HardwareLayer.kt
...o/src/awtMain/kotlin/org/jetbrains/skiko/HardwareLayer.kt
+21
-4
SkiaLayer.awt.kt
...o/src/awtMain/kotlin/org/jetbrains/skiko/SkiaLayer.awt.kt
+4
-0
No files found.
skiko/src/awtMain/kotlin/org/jetbrains/skiko/HardwareLayer.kt
View file @
ed8ee560
...
...
@@ -4,12 +4,12 @@ import kotlinx.coroutines.CoroutineScope
import
kotlinx.coroutines.channels.Channel
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.launch
import
java.awt.Canvas
import
java.awt.Component
import
java.awt.Graphics
import
java.awt.*
import
java.awt.event.InputMethodEvent
import
java.beans.PropertyChangeEvent
import
javax.accessibility.Accessible
import
javax.accessibility.AccessibleContext
import
javax.swing.Timer
import
kotlin.time.ExperimentalTime
internal
open
class
HardwareLayer
(
...
...
@@ -82,10 +82,27 @@ internal open class HardwareLayer(
private
external
fun
getWindowHandle
(
platformInfo
:
Long
):
Long
private
val
_externalAccessible
=
externalAccessibleFactory
?.
invoke
(
this
)
private
var
_focusedAccessible
:
Accessible
?
=
null
override
fun
getAccessibleContext
():
AccessibleContext
{
val
res
=
_externalAccessible
?.
accessibleContext
val
res
=
(
_focusedAccessible
?:
_externalAccessible
)
?.
accessibleContext
return
res
?:
super
.
getAccessibleContext
()
}
val
resetFocusAccessibleTimer
:
Timer
=
Timer
(
100
)
{
_focusedAccessible
=
null
}
fun
requestNativeFocusOnAccessible
(
accessible
:
Accessible
?)
{
_focusedAccessible
=
accessible
val
focusManager
=
KeyboardFocusManager
.
getCurrentKeyboardFocusManager
()
val
listeners
=
focusManager
.
getPropertyChangeListeners
(
"focusOwner"
)
val
event
=
PropertyChangeEvent
(
focusManager
,
"focusOwner"
,
null
,
accessible
)
listeners
.
forEach
{
it
.
propertyChange
(
event
)
}
// Listener spawns asynchronous notification post procedure, reading current focus owner
// and its accessibility context. This timer is used to deal with concurrency
// TODO Find more reliable procedure
resetFocusAccessibleTimer
.
restart
()
}
}
/**
...
...
skiko/src/awtMain/kotlin/org/jetbrains/skiko/SkiaLayer.awt.kt
View file @
ed8ee560
...
...
@@ -528,6 +528,10 @@ actual open class SkiaLayer internal constructor(
}
return
rounded
.
toInt
()
}
fun
requestNativeFocusOnAccessible
(
accessible
:
Accessible
?)
{
backedLayer
.
requestNativeFocusOnAccessible
(
accessible
)
}
}
/**
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment