@@ -14,6 +14,7 @@ import androidx.compose.runtime.remember
1414import androidx.compose.runtime.staticCompositionLocalOf
1515import androidx.compose.ui.Alignment
1616import androidx.compose.ui.Modifier
17+ import androidx.compose.ui.focus.focusProperties
1718import androidx.compose.ui.graphics.Brush
1819import androidx.compose.ui.graphics.Color
1920import androidx.compose.ui.graphics.SolidColor
@@ -40,6 +41,7 @@ import androidx.compose.ui.unit.Density
4041import androidx.compose.ui.unit.Dp
4142import androidx.compose.ui.unit.LayoutDirection
4243import androidx.compose.ui.unit.offset
44+ import io.github.kdroidfilter.nucleus.core.runtime.Platform
4345import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle
4446import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle
4547import kotlinx.coroutines.currentCoroutineContext
@@ -100,7 +102,17 @@ fun GenericTitleBarImpl(
100102 modifier =
101103 modifier
102104 .background(backgroundBrush)
103- .layoutId(TITLE_BAR_LAYOUT_ID )
105+ .then(
106+ // Block focus on Windows/Linux so Tab navigation cannot enter the Compose-driven
107+ // title bar drag area. On macOS the traffic-light buttons are native (outside the
108+ // Compose hit-test area), and focus must remain enabled so TextField/TextArea
109+ // children in the title bar can receive keyboard input (issue #206 / PR #208).
110+ if (Platform .Current == Platform .MacOS ) {
111+ Modifier
112+ } else {
113+ Modifier .focusProperties { canFocus = false }
114+ },
115+ ).layoutId(TITLE_BAR_LAYOUT_ID )
104116 .height(style.metrics.height)
105117 .onSizeChanged { with (density) { applyTitleBar(it.height.toDp(), state) } }
106118 .fillMaxWidth(),
0 commit comments