Disable horizontal pager scrolling in widget edit mode

This commit is contained in:
MM20 2023-07-11 23:03:16 +02:00
parent f8b48e9788
commit d1218e8d2e
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -465,6 +465,7 @@ fun PagerScaffold(
pagerState, pagerState,
widgetsScrollState, widgetsScrollState,
reversePager = reverse, reversePager = reverse,
disablePager = isWidgetEditMode,
) )
.verticalScroll(widgetsScrollState, enabled = false) .verticalScroll(widgetsScrollState, enabled = false)
.windowInsetsPadding(WindowInsets.safeDrawing) .windowInsetsPadding(WindowInsets.safeDrawing)
@ -649,6 +650,7 @@ fun Modifier.pagerScaffoldScrollHandler(
scrollableState: ScrollableState, scrollableState: ScrollableState,
reversePager: Boolean = false, reversePager: Boolean = false,
reverseScroll: Boolean = false, reverseScroll: Boolean = false,
disablePager: Boolean = false,
) = composed { ) = composed {
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()
val flingBehavior = ScrollableDefaults.flingBehavior() val flingBehavior = ScrollableDefaults.flingBehavior()
@ -656,7 +658,7 @@ fun Modifier.pagerScaffoldScrollHandler(
val touchSlopSq = LocalViewConfiguration.current.touchSlop.pow(2) val touchSlopSq = LocalViewConfiguration.current.touchSlop.pow(2)
this this
.nestedScroll(DefaultNestedScrollConnection, nestedScrollDispatcher) .nestedScroll(DefaultNestedScrollConnection, nestedScrollDispatcher)
.pointerInput(scrollableState, pagerState, reversePager, reverseScroll) { .pointerInput(scrollableState, pagerState, reversePager, reverseScroll, disablePager) {
val velocityTracker = VelocityTracker() val velocityTracker = VelocityTracker()
val lockScrollThreshold = 200.dp.toPx() val lockScrollThreshold = 200.dp.toPx()
val pagerMultiplier = if (reversePager) 1f else -1f val pagerMultiplier = if (reversePager) 1f else -1f
@ -665,7 +667,7 @@ fun Modifier.pagerScaffoldScrollHandler(
awaitEachGesture { awaitEachGesture {
var overSlop = false var overSlop = false
var lockedInScroll = false var lockedInScroll = disablePager
val initialDown = awaitFirstDown(requireUnconsumed = false, pass = PointerEventPass.Initial) val initialDown = awaitFirstDown(requireUnconsumed = false, pass = PointerEventPass.Initial)
val down = if (scrollableState.isScrollInProgress || pagerState.isScrollInProgress) { val down = if (scrollableState.isScrollInProgress || pagerState.isScrollInProgress) {
overSlop = true overSlop = true