Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -741,6 +741,8 @@ E.g. <b>META</b> for <i>META key</i>, \n
<string name="session_task_affinity_title">Processor Affinity</string>
<string name="session_task_affinity_all_cores">All cores</string>
<string name="session_task_new_task">New Task</string>
<string name="session_task_bring_to_front">Bring to Front</string>
<string name="session_task_custom_value">Custom Value</string>
<string name="session_task_processes">Processes</string>
<string name="session_task_cpu_usage_format">CPU (%1$d%%)</string>
<string name="session_task_per_core_usage">Per-core usage</string>
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/runtime/display/XServerDisplayActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -4079,6 +4079,12 @@ public void onTaskManagerEndProcess(String name) {
if (winHandler != null) winHandler.killProcess(name);
}

@Override
public void onTaskManagerBringToFront(String name) {
if (winHandler != null) winHandler.bringToFront(name);
closeDrawerMenu();
}

@Override
public void onTaskManagerSetAffinity(int pid, int affinityMask) {
if (winHandler != null) {
Expand Down
37 changes: 30 additions & 7 deletions app/src/main/runtime/display/XServerDisplayHost.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import androidx.compose.animation.core.tween
import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.offset
Expand All @@ -31,6 +32,7 @@ import androidx.compose.ui.input.pointer.positionChange
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.platform.LocalViewConfiguration
Expand All @@ -52,7 +54,7 @@ const val XSERVER_DRAWER_OPEN_TRIGGER_DP = 32
// Open only on a clearly rightward swipe: dx must exceed this * |dy| (~27deg of horizontal).
const val XSERVER_DRAWER_OPEN_HORIZONTAL_RATIO = 2f

private val DrawerWidth = 340.dp
private val DrawerWidth = 312.dp
private val DrawerStartPadding = 6.dp
private val DrawerVerticalPadding = 6.dp
private const val DrawerSettleAnimationMs = 200
Expand Down Expand Up @@ -103,14 +105,24 @@ private fun XServerDisplayHost(
) {
val animationScope = rememberCoroutineScope()
val density = LocalDensity.current
val context = LocalContext.current
// systemBars insets are zeroed on this view, so read the real status-bar height.
val statusBarHeight =
remember(context, density) {
val res = context.resources
val id = res.getIdentifier("status_bar_height", "dimen", "android")
val px = if (id > 0) res.getDimensionPixelSize(id) else 0
with(density) { px.toDp() }.coerceIn(24.dp, 56.dp)
}
val viewConfiguration = LocalViewConfiguration.current
var drawerOffsetPx by remember { mutableFloatStateOf(0f) }
val closedFallbackPx = with(density) { -(DrawerWidth + DrawerStartPadding).toPx() }
var drawerOffsetPx by remember { mutableFloatStateOf(closedFallbackPx) }
var drawerWidthPx by remember { mutableFloatStateOf(0f) }
val drawerClosedOffset =
if (drawerWidthPx > 0f) {
-drawerWidthPx - with(density) { DrawerStartPadding.toPx() }
} else {
0f
closedFallbackPx
}
val drawerOpenOffset = 0f
// The sheet is "engaged" whenever it is on (or sliding onto) the screen. Used
Expand All @@ -128,7 +140,7 @@ private fun XServerDisplayHost(
}

LaunchedEffect(drawerWidthPx) {
if (drawerWidthPx > 0f && drawerOffsetPx == 0f && !stateHolder.isDrawerOpen) {
if (drawerWidthPx > 0f && drawerOffsetPx < 0f && !stateHolder.isDrawerOpen) {
drawerOffsetPx = drawerClosedOffset
}
}
Expand Down Expand Up @@ -159,7 +171,7 @@ private fun XServerDisplayHost(
}

WinNativeTheme {
Box(
BoxWithConstraints(
modifier =
Modifier
.fillMaxSize()
Expand Down Expand Up @@ -265,6 +277,17 @@ private fun XServerDisplayHost(
}
},
) {
val drawerTopInset = statusBarHeight + 2.dp
val originalHeight = maxHeight - DrawerVerticalPadding * 2
val drawerHeight = maxHeight - drawerTopInset - DrawerVerticalPadding
val evenScale =
if (originalHeight > 0.dp) {
(drawerHeight / originalHeight).coerceIn(0.6f, 1f)
} else {
1f
}
val scaledDrawerWidth = DrawerWidth * evenScale

CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Ltr) {
AndroidView(
factory = { displayFrame },
Expand All @@ -285,9 +308,9 @@ private fun XServerDisplayHost(
modifier =
Modifier
.zIndex(2f)
.padding(start = DrawerStartPadding, top = DrawerVerticalPadding, bottom = DrawerVerticalPadding)
.padding(start = DrawerStartPadding, top = drawerTopInset, bottom = DrawerVerticalPadding)
.fillMaxHeight()
.width(DrawerWidth)
.width(scaledDrawerWidth)
.onSizeChanged { size ->
drawerWidthPx = size.width.toFloat()
}
Expand Down
Loading