From 16a7a55be8d17c9a8e2a7b0c46c18e6f5adabf08 Mon Sep 17 00:00:00 2001 From: "altynbek.nurtaza" <altynbek.nurtaza@nu.edu.kz> Date: Sat, 2 Apr 2022 07:17:52 +0600 Subject: [PATCH] Allow to close window without logging out --- .../org/briarproject/briar/desktop/Main.kt | 2 +- .../briarproject/briar/desktop/ui/BriarUi.kt | 44 +++++++++++++++++-- .../resources/strings/BriarDesktop.properties | 1 + 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/org/briarproject/briar/desktop/Main.kt b/src/main/kotlin/org/briarproject/briar/desktop/Main.kt index 013368fba8..3cbe9a1555 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/Main.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/Main.kt @@ -115,7 +115,7 @@ private class Main : CliktCommand( BriarCoreEagerSingletons.Helper.injectEagerSingletons(app) application { - app.getBriarUi().start { + app.getBriarUi().start(this) { app.getBriarUi().stop() exitApplication() } diff --git a/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt b/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt index 1394a1af52..ae36949e85 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt @@ -32,14 +32,20 @@ import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.drawscope.DrawScope +import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.toAwtImage import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.platform.LocalLocalization import androidx.compose.ui.platform.PlatformLocalization import androidx.compose.ui.res.painterResource +import androidx.compose.ui.window.ApplicationScope import androidx.compose.ui.window.FrameWindowScope +import androidx.compose.ui.window.Tray import androidx.compose.ui.window.Window +import androidx.compose.ui.window.isTraySupported +import androidx.compose.ui.window.rememberTrayState import org.briarproject.bramble.api.FeatureFlags import org.briarproject.bramble.api.event.EventBus import org.briarproject.bramble.api.event.EventListener @@ -55,6 +61,7 @@ import org.briarproject.briar.desktop.settings.SettingsViewModel import org.briarproject.briar.desktop.settings.UnencryptedSettings import org.briarproject.briar.desktop.settings.UnencryptedSettings.Theme.AUTO import org.briarproject.briar.desktop.settings.UnencryptedSettings.Theme.DARK +import org.briarproject.briar.desktop.theme.Blue500 import org.briarproject.briar.desktop.theme.BriarTheme import org.briarproject.briar.desktop.ui.Screen.EXPIRED import org.briarproject.briar.desktop.ui.Screen.MAIN @@ -78,7 +85,7 @@ enum class Screen { interface BriarUi { @Composable - fun start(onClose: () -> Unit) + fun start(applicationScope: ApplicationScope, onClose: () -> Unit) fun stop() } @@ -115,7 +122,7 @@ constructor( @OptIn(ExperimentalComposeUiApi::class) @Composable - override fun start(onClose: () -> Unit) { + override fun start(applicationScope: ApplicationScope, onClose: () -> Unit) { val title = i18n("main.title") val platformLocalization = object : PlatformLocalization { override val copy = i18n("copy") @@ -125,9 +132,40 @@ constructor( } val focusState = remember { WindowFocusState() } + var isWindowVisible by remember { mutableStateOf(true) } + + if (isTraySupported) { + val state = rememberTrayState() + applicationScope.Tray( + icon = object : Painter() { + override val intrinsicSize = Size(256f, 256f) + override fun DrawScope.onDraw() { + drawOval(Blue500) + } + }, + state = state, + tooltip = title, + onAction = { + isWindowVisible = true + }, + menu = { + Item(i18n("exit")) { + onClose() + } + } + ) + } + Window( title = title, - onCloseRequest = onClose, + visible = isWindowVisible, + onCloseRequest = { + if (isTraySupported) { + isWindowVisible = false + } else { + onClose() + } + }, ) { // changing the icon in the Composable itself automatically brings the window to front // see https://github.com/JetBrains/compose-jb/issues/1861 diff --git a/src/main/resources/strings/BriarDesktop.properties b/src/main/resources/strings/BriarDesktop.properties index 08146b58a6..db20f6250d 100644 --- a/src/main/resources/strings/BriarDesktop.properties +++ b/src/main/resources/strings/BriarDesktop.properties @@ -170,6 +170,7 @@ error=Error warning=Warning unsupported_feature=Unfortunately, this feature is not yet supported by Briar Desktop. remove=Remove +exit=Exit # Compose text edit actions copy=Copy -- GitLab