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:
+4
-2
@@ -78,6 +78,7 @@ import androidx.compose.ui.input.key.key
|
|||||||
import androidx.compose.ui.input.key.onPreviewKeyEvent
|
import androidx.compose.ui.input.key.onPreviewKeyEvent
|
||||||
import androidx.compose.ui.input.key.type
|
import androidx.compose.ui.input.key.type
|
||||||
import androidx.compose.ui.input.pointer.PointerEventType
|
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.input.pointer.onPointerEvent
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
@@ -405,8 +406,9 @@ private fun DrawerScreenCard(
|
|||||||
.clickable(onClick = onClick)
|
.clickable(onClick = onClick)
|
||||||
.onPointerEvent(PointerEventType.Enter) { onHover() }
|
.onPointerEvent(PointerEventType.Enter) { onHover() }
|
||||||
.onPointerEvent(PointerEventType.Press) { event ->
|
.onPointerEvent(PointerEventType.Press) { event ->
|
||||||
// Right-click opens context menu
|
if (event.buttons.isSecondaryPressed &&
|
||||||
if (event.changes.any { it.pressed && event.button?.index == 2 }) {
|
event.changes.any { it.pressed && !it.previousPressed }
|
||||||
|
) {
|
||||||
showMenu = true
|
showMenu = true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -226,6 +226,8 @@ class DeckState(
|
|||||||
is DeckColumnType.Profile -> col.type.pubKeyHex
|
is DeckColumnType.Profile -> col.type.pubKeyHex
|
||||||
is DeckColumnType.Thread -> col.type.noteId
|
is DeckColumnType.Thread -> col.type.noteId
|
||||||
is DeckColumnType.Hashtag -> col.type.tag
|
is DeckColumnType.Hashtag -> col.type.tag
|
||||||
|
is DeckColumnType.Editor -> col.type.draftSlug
|
||||||
|
is DeckColumnType.Article -> col.type.addressTag
|
||||||
else -> null
|
else -> null
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@@ -299,6 +301,10 @@ class DeckState(
|
|||||||
"my_profile" -> DeckColumnType.MyProfile
|
"my_profile" -> DeckColumnType.MyProfile
|
||||||
"chess" -> DeckColumnType.Chess
|
"chess" -> DeckColumnType.Chess
|
||||||
"settings" -> DeckColumnType.Settings
|
"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) }
|
"profile" -> param?.let { DeckColumnType.Profile(it) }
|
||||||
"thread" -> param?.let { DeckColumnType.Thread(it) }
|
"thread" -> param?.let { DeckColumnType.Thread(it) }
|
||||||
"hashtag" -> param?.let { DeckColumnType.Hashtag(it) }
|
"hashtag" -> param?.let { DeckColumnType.Hashtag(it) }
|
||||||
|
|||||||
+10
-7
@@ -68,6 +68,8 @@ class WorkspaceManager(
|
|||||||
is DeckColumnType.Profile -> col.type.pubKeyHex
|
is DeckColumnType.Profile -> col.type.pubKeyHex
|
||||||
is DeckColumnType.Thread -> col.type.noteId
|
is DeckColumnType.Thread -> col.type.noteId
|
||||||
is DeckColumnType.Hashtag -> col.type.tag
|
is DeckColumnType.Hashtag -> col.type.tag
|
||||||
|
is DeckColumnType.Editor -> col.type.draftSlug
|
||||||
|
is DeckColumnType.Article -> col.type.addressTag
|
||||||
else -> null
|
else -> null
|
||||||
},
|
},
|
||||||
width = col.width,
|
width = col.width,
|
||||||
@@ -97,14 +99,15 @@ class WorkspaceManager(
|
|||||||
|
|
||||||
fun deleteWorkspace(id: String) {
|
fun deleteWorkspace(id: String) {
|
||||||
if (_workspaces.value.size <= 1) return
|
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 } }
|
_workspaces.update { it.filter { ws -> ws.id != id } }
|
||||||
if (_activeIndex.value >= _workspaces.value.size) {
|
_activeIndex.value =
|
||||||
_activeIndex.value = _workspaces.value.size - 1
|
when {
|
||||||
}
|
deletedIdx < _activeIndex.value -> _activeIndex.value - 1
|
||||||
if (idx == _activeIndex.value || _activeIndex.value >= _workspaces.value.size) {
|
deletedIdx == _activeIndex.value -> 0
|
||||||
_activeIndex.value = 0
|
else -> _activeIndex.value
|
||||||
}
|
}.coerceIn(_workspaces.value.indices)
|
||||||
scheduleSave()
|
scheduleSave()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user