From e79a261b06742651971345b4fabfe92995fb7d03 Mon Sep 17 00:00:00 2001 From: Abdelilah El Aissaoui Date: Fri, 2 Jun 2023 01:28:12 +0200 Subject: [PATCH] Tabs can be now closed using the tertiary button Fixes #72 --- .../gitnuro/extensions/ModifierExtensions.kt | 16 ++++++++++++++++ .../ui/components/RepositoriesTabPanel.kt | 6 +++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/jetpackduba/gitnuro/extensions/ModifierExtensions.kt b/src/main/kotlin/com/jetpackduba/gitnuro/extensions/ModifierExtensions.kt index 177b1f6..a02025e 100644 --- a/src/main/kotlin/com/jetpackduba/gitnuro/extensions/ModifierExtensions.kt +++ b/src/main/kotlin/com/jetpackduba/gitnuro/extensions/ModifierExtensions.kt @@ -110,6 +110,22 @@ fun Modifier.fastClickable(key: Any = Unit, key2: Any = Unit, onClick: () -> Uni } } +@OptIn(ExperimentalComposeUiApi::class) +@Composable +fun Modifier.onMiddleMouseButtonClick(key: Any = Unit, key2: Any = Unit, onClick: () -> Unit) = + this.pointerInput(key, key2) { + while (true) { + val lastMouseEvent = awaitPointerEventScope { awaitFirstDownEvent() } + val mouseEvent = lastMouseEvent.awtEventOrNull + + if (mouseEvent != null) { + if (lastMouseEvent.button.isTertiary) { + onClick() + } + } + } + } + @Composable private fun Modifier.hoverBackground(): Modifier { val hoverInteraction = remember { MutableInteractionSource() } diff --git a/src/main/kotlin/com/jetpackduba/gitnuro/ui/components/RepositoriesTabPanel.kt b/src/main/kotlin/com/jetpackduba/gitnuro/ui/components/RepositoriesTabPanel.kt index 2cbd7a0..4e61814 100644 --- a/src/main/kotlin/com/jetpackduba/gitnuro/ui/components/RepositoriesTabPanel.kt +++ b/src/main/kotlin/com/jetpackduba/gitnuro/ui/components/RepositoriesTabPanel.kt @@ -32,6 +32,7 @@ import com.jetpackduba.gitnuro.di.DaggerTabComponent import com.jetpackduba.gitnuro.di.TabComponent import com.jetpackduba.gitnuro.extensions.handMouseClickable import com.jetpackduba.gitnuro.extensions.handOnHover +import com.jetpackduba.gitnuro.extensions.onMiddleMouseButtonClick import com.jetpackduba.gitnuro.managers.AppStateManager import com.jetpackduba.gitnuro.viewmodels.TabViewModel import com.jetpackduba.gitnuro.viewmodels.TabViewModelsHolder @@ -95,7 +96,7 @@ fun RepositoriesTabPanel( .weight(1f, false), state = stateHorizontal, ) { - items(items = tabs) { tab -> + items(items = tabs, key = { it.tabViewModel }) { tab -> Tooltip(tab.path) { Tab( title = tab.tabName, @@ -164,6 +165,9 @@ fun Tab( .fillMaxHeight() .hoverable(hoverInteraction) .handMouseClickable { onClick() } + .onMiddleMouseButtonClick { + onCloseTab() + } .background(backgroundColor), ) { Row(