JetBrains / compose-multiplatform

Compose Multiplatform, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.
https://jetbrains.com/lp/compose-multiplatform
Apache License 2.0
15.95k stars 1.16k forks source link

Compose Desktop: Exception on right click on TextField #1774

Open hondogo opened 2 years ago

hondogo commented 2 years ago

Compose Desktop version: 1.1.0-alpha1-dev559

Consider code:

`Scaffold(

    drawerContent = {} // if this is commented out then exception will not be raised on right click on TextField

) {

    var value by remember { "".toMutableState2() }

    TextField(value, onValueChange = { value = it })

}`

If right click on TextField exception occurs:

`Exception in thread "AWT-EventQueue-0 @coroutine#40" java.lang.NullPointerException

at androidx.compose.foundation.gestures.DragGestureDetectorKt.awaitHorizontalPointerSlopOrCancellation-gDDlDlE(DragGestureDetector.kt:1133)

at androidx.compose.foundation.gestures.DragGestureDetectorKt$awaitHorizontalPointerSlopOrCancellation$1.invokeSuspend(DragGestureDetector.kt)

at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)

at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:178)

at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:166)

at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:397)

at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:431)

at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:420)

at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:328)

at androidx.compose.ui.input.pointer.SuspendingPointerInputFilter$PointerEventHandlerCoroutine.offerPointerEvent(SuspendingPointerInputFilter.kt:511)

at androidx.compose.ui.input.pointer.SuspendingPointerInputFilter.dispatchPointerEvent(SuspendingPointerInputFilter.kt:406)

at androidx.compose.ui.input.pointer.SuspendingPointerInputFilter.onPointerEvent-H0pRuoY(SuspendingPointerInputFilter.kt:419)

at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:310)

at androidx.compose.ui.input.pointer.NodeParent.dispatchMainEventPass(HitPathTracker.kt:179)

at androidx.compose.ui.input.pointer.HitPathTracker.dispatchChanges(HitPathTracker.kt:98)

at androidx.compose.ui.input.pointer.PointerInputEventProcessor.process-BIzXfog(PointerInputEventProcessor.kt:80)

at androidx.compose.ui.platform.SkiaBasedOwner.doProcessPointerInput-8iAsVTc(SkiaBasedOwner.skiko.kt:383)

at androidx.compose.ui.platform.SkiaBasedOwner.processPointerInput-8iAsVTc$ui(SkiaBasedOwner.skiko.kt:379)

at androidx.compose.ui.ComposeScene.sendPointerEvent-aC5X19Y(ComposeScene.skiko.kt:385)

at androidx.compose.ui.ComposeScene.sendPointerEvent-aC5X19Y$default(ComposeScene.skiko.kt:354)

at androidx.compose.ui.awt.ComposeLayer_desktopKt.onMouseEvent(ComposeLayer.desktop.kt:254)

at androidx.compose.ui.awt.ComposeLayer_desktopKt.access$onMouseEvent(ComposeLayer.desktop.kt:1)

at androidx.compose.ui.awt.ComposeLayer$4$mouseMoved$1.invoke(ComposeLayer.desktop.kt:178)

at androidx.compose.ui.awt.ComposeLayer$4$mouseMoved$1.invoke(ComposeLayer.desktop.kt:177)

at androidx.compose.ui.awt.AWTDebounceEventQueue$job$1.invokeSuspend(AWTDebounceEventQueue.desktop.kt:59)

at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)

at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)

at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)

at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)

at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)

at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)

at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)

at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)

at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)

at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)

at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)

at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)

at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)

at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)`
igordmn commented 2 years ago

Is issue reproduced in 1.1.0-alpha2?

1.1.0-alpha1 doesn't have a lot of fixes

hondogo commented 2 years ago

In version 1.1.0-alpha02 it is fixed. Thanks!

hondogo commented 2 years ago

In version 1.2.0-alpha01-dev604 this problem appears again. (At the moment of writing this is the latest version)

okushnikov commented 2 months ago

Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.