fix(desktop): review fixes for navigation overhaul

- Fix right-click detection: use isSecondaryPressed (not button.index==2)
- Fix parseColumnType missing drafts/highlights/editor/article cases
- Fix param extraction for Editor.draftSlug and Article.addressTag
- Fix deleteWorkspace index correction logic

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
nrobi144
2026-04-17 13:47:17 +03:00
parent e528656ebd
commit 5b8ddf0a20
3 changed files with 20 additions and 9 deletions
@@ -78,6 +78,7 @@ import androidx.compose.ui.input.key.key
import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.input.key.type
import androidx.compose.ui.input.pointer.PointerEventType
import androidx.compose.ui.input.pointer.isSecondaryPressed
import androidx.compose.ui.input.pointer.onPointerEvent
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.delay
@@ -405,8 +406,9 @@ private fun DrawerScreenCard(
.clickable(onClick = onClick)
.onPointerEvent(PointerEventType.Enter) { onHover() }
.onPointerEvent(PointerEventType.Press) { event ->
// Right-click opens context menu
if (event.changes.any { it.pressed && event.button?.index == 2 }) {
if (event.buttons.isSecondaryPressed &&
event.changes.any { it.pressed && !it.previousPressed }
) {
showMenu = true
}
},
@@ -226,6 +226,8 @@ class DeckState(
is DeckColumnType.Profile -> col.type.pubKeyHex
is DeckColumnType.Thread -> col.type.noteId
is DeckColumnType.Hashtag -> col.type.tag
is DeckColumnType.Editor -> col.type.draftSlug
is DeckColumnType.Article -> col.type.addressTag
else -> null
},
)
@@ -299,6 +301,10 @@ class DeckState(
"my_profile" -> DeckColumnType.MyProfile
"chess" -> DeckColumnType.Chess
"settings" -> DeckColumnType.Settings
"drafts" -> DeckColumnType.Drafts
"highlights" -> DeckColumnType.MyHighlights
"editor" -> DeckColumnType.Editor(param)
"article" -> param?.let { DeckColumnType.Article(it) }
"profile" -> param?.let { DeckColumnType.Profile(it) }
"thread" -> param?.let { DeckColumnType.Thread(it) }
"hashtag" -> param?.let { DeckColumnType.Hashtag(it) }
@@ -68,6 +68,8 @@ class WorkspaceManager(
is DeckColumnType.Profile -> col.type.pubKeyHex
is DeckColumnType.Thread -> col.type.noteId
is DeckColumnType.Hashtag -> col.type.tag
is DeckColumnType.Editor -> col.type.draftSlug
is DeckColumnType.Article -> col.type.addressTag
else -> null
},
width = col.width,
@@ -97,14 +99,15 @@ class WorkspaceManager(
fun deleteWorkspace(id: String) {
if (_workspaces.value.size <= 1) return
val idx = _workspaces.value.indexOfFirst { it.id == id }
val deletedIdx = _workspaces.value.indexOfFirst { it.id == id }
if (deletedIdx < 0) return
_workspaces.update { it.filter { ws -> ws.id != id } }
if (_activeIndex.value >= _workspaces.value.size) {
_activeIndex.value = _workspaces.value.size - 1
}
if (idx == _activeIndex.value || _activeIndex.value >= _workspaces.value.size) {
_activeIndex.value = 0
}
_activeIndex.value =
when {
deletedIdx < _activeIndex.value -> _activeIndex.value - 1
deletedIdx == _activeIndex.value -> 0
else -> _activeIndex.value
}.coerceIn(_workspaces.value.indices)
scheduleSave()
}