Browse Source

single tap handler for tabs

Milan Jurkulak 3 tháng trước cách đây
mục cha
commit
5d9df8bc29

+ 9 - 18
shared/src/commonMain/kotlin/org/mjdev/desktop/components/controlcenter/ControlCenter.kt

@@ -36,10 +36,8 @@ import org.mjdev.desktop.components.sliding.base.VisibilityState.Companion.remem
 import org.mjdev.desktop.context.DesktopContextScope.Companion.withDesktopContext
 import org.mjdev.desktop.extensions.Compose.orElse
 import org.mjdev.desktop.extensions.Compose.preview
-import org.mjdev.desktop.extensions.Modifier.onLeftClick
 import org.mjdev.desktop.extensions.Modifier.onMouseEnter
 import org.mjdev.desktop.extensions.Modifier.onMousePress
-import org.mjdev.desktop.extensions.Modifier.onRightClick
 import org.mjdev.desktop.extensions.MutableStateExt.rememberCalculated
 import org.mjdev.desktop.extensions.MutableStateExt.rememberComputed
 import org.mjdev.desktop.extensions.MutableStateExt.rememberState
@@ -122,26 +120,19 @@ fun ControlCenter(
                                             .background(
                                                 color = if (pagerState.value == idx) iconsTintColor else borderColor,
                                                 shape = RoundedCornerShape(8.dp),
-                                            ).pointerInput(Unit) {
+                                            ).onMouseEnter {
+                                                onTooltip(page.name)
+                                            }.pointerInput(idx) {
+                                                // Single canonical tap detector. A second
+                                                // competing onMousePress handler here used to eat
+                                                // taps, so switching a tab took many clicks.
                                                 detectTapGestures(
-                                                    onTap = {
+                                                    onTap = { pagerState.value = idx },
+                                                    onLongPress = {
                                                         pagerState.value = idx
+                                                        onContextMenuClick()
                                                     },
                                                 )
-                                            }.onMouseEnter {
-                                                onTooltip(page.name)
-                                            }.onMousePress {
-                                                onLeftClick {
-                                                    runAsync {
-                                                        pagerState.value = idx
-                                                    }
-                                                }
-                                                onRightClick {
-                                                    runAsync {
-                                                        pagerState.value = idx
-                                                    }
-                                                    onContextMenuClick()
-                                                }
                                             },
                                     imageVector = page.icon,
                                     contentDescription = "",