I was closing ~60 opened tabs in my Studio, most of them untitled. I was moving between the right end of the tabs panel and the delete confirmation modal window. I was trying to do it as fast as I can and at some point, I believe, the mouse cursor could have gone too far and exited the Studio window area.
Environment
TypeDB version: 2.18
OS of TypeDB server: 12.6.6
Studio version: 2.18
OS of Studio: 12.6.6
Other environment details:
Reproducible Steps
Steps to create the smallest reproducible scenario:
Close many tabs one by one.
Slip the cursor outside the studio window at wrong moment of time
Expected Output
Nothing happens, you can return cursor back to the Studio window area and continue deleting tabs.
Actual Output
Crash:
Title: Cannot invoke "java.awt.PointerInfo.getLocation()" because the return value of "java.awt.MouseInfo.getPointerInfo()" is null
Trace: java.lang.NullPointerException: Cannot invoke "java.awt.PointerInfo.getLocation()" because the return value of "java.awt.MouseInfo.getPointerInfo()" is null
at com.vaticle.typedb.studio.framework.common.Util.mousePoint-3ABfNKs(Util.kt:58)
at com.vaticle.typedb.studio.framework.common.Util.isMouseHover-wH6b6FI(Util.kt:66)
at com.vaticle.typedb.studio.framework.material.Form.BoxButton_pzZJ40c$mayShowOnTargetHover$55(Form.kt:764)
at com.vaticle.typedb.studio.framework.material.Form.access$BoxButton_pzZJ40c$mayShowOnTargetHover$55(Form.kt:117)
at com.vaticle.typedb.studio.framework.material.Form$BoxButton$1$4.invoke(Form.kt:775)
at com.vaticle.typedb.studio.framework.material.Form$BoxButton$1$4.invoke(Form.kt:774)
at androidx.compose.ui.input.pointer.PointerMoveFilter_desktopKt$pointerMoveFilter$5.invoke(PointerMoveFilter.desktop.kt:52)
at androidx.compose.ui.input.pointer.PointerMoveFilter_desktopKt$pointerMoveFilter$5.invoke(PointerMoveFilter.desktop.kt:51)
at androidx.compose.ui.input.pointer.SuspendingPointerInputFilter_skikoKt$onPointerEvent$1$1$1.invokeSuspend(SuspendingPointerInputFilter.skiko.kt:47)
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:569)
at androidx.compose.ui.input.pointer.SuspendingPointerInputFilter.dispatchPointerEvent(SuspendingPointerInputFilter.kt:459)
at androidx.compose.ui.input.pointer.SuspendingPointerInputFilter.onPointerEvent-H0pRuoY(SuspendingPointerInputFilter.kt:472)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:285)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:272)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:272)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:272)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:272)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:272)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:272)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:272)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:272)
at androidx.compose.ui.input.pointer.NodeParent.dispatchMainEventPass(HitPathTracker.kt:152)
at androidx.compose.ui.input.pointer.HitPathTracker.dispatchChanges(HitPathTracker.kt:89)
at androidx.compose.ui.input.pointer.PointerInputEventProcessor.process-BIzXfog(PointerInputEventProcessor.kt:97)
at androidx.compose.ui.platform.SkiaBasedOwner.processPointerInput-gBdvCQM$ui(SkiaBasedOwner.skiko.kt:356)
at androidx.compose.ui.platform.SkiaBasedOwner.processPointerInput-gBdvCQM$ui$default(SkiaBasedOwner.skiko.kt:349)
at androidx.compose.ui.ComposeScene.processMove(ComposeScene.skiko.kt:551)
at androidx.compose.ui.ComposeScene.processPointerInput(ComposeScene.skiko.kt:499)
at androidx.compose.ui.ComposeScene.sendPointerEvent-BGSDPeU(ComposeScene.skiko.kt:482)
at androidx.compose.ui.ComposeScene.sendPointerEvent-BGSDPeU$default(ComposeScene.skiko.kt:451)
at androidx.compose.ui.awt.ComposeLayer_desktopKt.onMouseEvent(ComposeLayer.desktop.kt:470)
at androidx.compose.ui.awt.ComposeLayer_desktopKt.access$onMouseEvent(ComposeLayer.desktop.kt:1)
at androidx.compose.ui.awt.ComposeLayer$onMouseEvent$1.invoke(ComposeLayer.desktop.kt:398)
at androidx.compose.ui.awt.ComposeLayer$onMouseEvent$1.invoke(ComposeLayer.desktop.kt:391)
at androidx.compose.ui.awt.ComposeLayer.catchExceptions(ComposeLayer.desktop.kt:109)
at androidx.compose.ui.awt.ComposeLayer.onMouseEvent(ComposeLayer.desktop.kt:391)
at androidx.compose.ui.awt.ComposeLayer.access$onMouseEvent(ComposeLayer.desktop.kt:87)
at androidx.compose.ui.awt.ComposeLayer$5.mouseMoved(ComposeLayer.desktop.kt:378)
at java.desktop/java.awt.Component.processMouseMotionEvent(Unknown Source)
at java.desktop/java.awt.Component.processEvent(Unknown Source)
at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Description
I was closing ~60 opened tabs in my Studio, most of them untitled. I was moving between the right end of the tabs panel and the delete confirmation modal window. I was trying to do it as fast as I can and at some point, I believe, the mouse cursor could have gone too far and exited the Studio window area.
Environment
Reproducible Steps
Steps to create the smallest reproducible scenario:
Expected Output
Nothing happens, you can return cursor back to the Studio window area and continue deleting tabs.
Actual Output
Crash:
Additional information
I wasn't able to repeat the Crash.