@@ -52,7 +52,7 @@ private var lastCheck: Long = 0
5252private const val MIN_TIME_BETWEEN_POPUPS_IN_MS = 20
5353
5454@Composable
55- fun ContextMenu (enabled : Boolean = true,items : () -> List <ContextMenuElement >, function : @Composable () -> Unit ) {
55+ fun ContextMenu (enabled : Boolean = true, items : () -> List <ContextMenuElement >, function : @Composable () -> Unit ) {
5656 Box (modifier = Modifier .contextMenu(enabled, items), propagateMinConstraints = true ) {
5757 function()
5858 }
@@ -69,17 +69,17 @@ fun DropdownMenu(items: () -> List<ContextMenuElement>, function: @Composable ()
6969@OptIn(ExperimentalComposeUiApi ::class )
7070@Composable
7171private fun Modifier.contextMenu (enabled : Boolean , items : () -> List <ContextMenuElement >): Modifier {
72- val (contentMenuData, setContentMenuData ) = remember { mutableStateOf<ContextMenuData ?>(null ) }
72+ val (mouseEvent, setMouseEvent ) = remember { mutableStateOf<MouseEvent ?>(null ) }
7373
7474 val modifier = this .pointerInput(enabled) {
7575 awaitPointerEventScope {
7676 while (true ) {
77- val lastMouseEvent = awaitFirstDownEvent()
78- val mouseEvent = lastMouseEvent .awtEventOrNull
77+ val lastPointerEvent = awaitFirstDownEvent()
78+ val lastMouseEvent = lastPointerEvent .awtEventOrNull
7979
80- if (mouseEvent != null && enabled) {
81- if (lastMouseEvent .button.isSecondary) {
82- lastMouseEvent .changes.forEach {
80+ if (lastMouseEvent != null && enabled) {
81+ if (lastPointerEvent .button.isSecondary) {
82+ lastPointerEvent .changes.forEach {
8383 it.consume()
8484 }
8585
@@ -89,33 +89,31 @@ private fun Modifier.contextMenu(enabled: Boolean, items: () -> List<ContextMenu
8989 } else {
9090 lastCheck = currentCheck
9191
92- setContentMenuData( ContextMenuData (items(), mouseEvent) )
92+ setMouseEvent(lastMouseEvent )
9393 }
9494 }
9595 }
9696 }
9797 }
9898 }
9999
100- if (contentMenuData != null && contentMenuData.items.isNotEmpty()) {
101- DisableSelection {
102- showPopup(
103- contentMenuData.mouseEvent.x,
104- contentMenuData.mouseEvent.y,
105- contentMenuData.items,
106- onDismissRequest = { setContentMenuData(null ) }
107- )
100+ if (mouseEvent != null ) {
101+ val contextMenuElements = items()
102+ if (contextMenuElements.isNotEmpty()) {
103+ DisableSelection {
104+ showPopup(
105+ mouseEvent.x,
106+ mouseEvent.y,
107+ contextMenuElements,
108+ onDismissRequest = { setMouseEvent(null ) }
109+ )
110+ }
108111 }
109112 }
110113
111114 return modifier
112115}
113116
114- class ContextMenuData (
115- val items : List <ContextMenuElement >,
116- val mouseEvent : MouseEvent ,
117- )
118-
119117@Composable
120118private fun Modifier.dropdownMenu (items : () -> List <ContextMenuElement >): Modifier {
121119 val (isClicked, setIsClicked) = remember { mutableStateOf(false ) }
0 commit comments