From 820876be351ef9e7d42a9b1afd2e081e86b4088c Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 21:43:39 +0000 Subject: [PATCH 1/3] Migrate desktop app to Nucleus 2 --- desktop/build.gradle.kts | 121 +++++++++--------- desktop/src/main/kotlin/DecoratedWindow.kt | 39 ++---- desktop/src/main/kotlin/DeeplinkHandler.kt | 8 -- desktop/src/main/kotlin/Main.kt | 7 +- .../src/main/kotlin/ManageSingleInstance.kt | 28 ---- .../foliary/feature/main/MainScreen.jvm.kt | 2 +- gradle/libs.versions.toml | 13 +- 7 files changed, 82 insertions(+), 136 deletions(-) delete mode 100644 desktop/src/main/kotlin/ManageSingleInstance.kt diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts index d6a5e60f..31996654 100644 --- a/desktop/build.gradle.kts +++ b/desktop/build.gradle.kts @@ -1,6 +1,6 @@ -import io.github.kdroidfilter.nucleus.desktop.application.dsl.SnapConfinement -import io.github.kdroidfilter.nucleus.desktop.application.dsl.SnapGrade -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.desktop.application.dsl.SnapConfinement +import dev.nucleusframework.desktop.application.dsl.SnapGrade +import dev.nucleusframework.desktop.application.dsl.TargetFormat plugins { alias(libs.plugins.compose.compiler) @@ -22,6 +22,7 @@ dependencies { implementation(compose.desktop.currentOs) implementation(libs.composenativetray) implementation(libs.lucideIcons) + implementation(libs.nucleus.application) implementation(libs.nucleus.core.runtime) implementation(libs.nucleus.aot.runtime) implementation(libs.nucleus.decoratedWindow.jbr) @@ -31,70 +32,72 @@ dependencies { testImplementation(libs.kotest.assertions) } -nucleus.application { - mainClass = "MainKt" - - buildTypes { - release { - proguard { - isEnabled = false - obfuscate = false - optimize = false - configurationFiles.from(project.file("proguard-rules.pro")) +nucleus { + application { + mainClass = "MainKt" + + buildTypes { + release { + proguard { + isEnabled = false + obfuscate = false + optimize = false + configurationFiles.from(project.file("proguard-rules.pro")) + } } } - } - - nativeDistributions { - packageName = "Foliary" - packageVersion = libs.versions.versionName.get() - enableAotCache = false - protocol("Foliary", "foliary") - - modules("java.instrument", "java.management", "java.prefs", "jdk.unsupported") - - targetFormats( - TargetFormat.Snap, - TargetFormat.Flatpak, - TargetFormat.AppX, - TargetFormat.Dmg - ) - - linux { - iconFile.set(project.file("icons/icon.png")) - shortcut = true + nativeDistributions { packageName = "Foliary" - appRelease = libs.versions.versionCode.get() - appCategory = "Utility" - startupWMClass = "dev-appoutlet-Foliary" - - snap { - confinement = SnapConfinement.Strict - grade = SnapGrade.Stable - base = "core26" + packageVersion = libs.versions.versionName.get() + enableAotCache = false + + protocol("Foliary", "foliary") + + modules("java.instrument", "java.management", "java.prefs", "jdk.unsupported") + + targetFormats( + TargetFormat.Snap, + TargetFormat.Flatpak, + TargetFormat.AppX, + TargetFormat.Dmg + ) + + linux { + iconFile.set(project.file("icons/icon.png")) + shortcut = true + packageName = "Foliary" + appRelease = libs.versions.versionCode.get() + appCategory = "Utility" + startupWMClass = "dev-appoutlet-Foliary" + + snap { + confinement = SnapConfinement.Strict + grade = SnapGrade.Stable + base = "core26" + } + + flatpak { + license.set(rootProject.file("LICENSE")) + } } - flatpak { - license.set(rootProject.file("LICENSE")) + windows { + iconFile.set(project.file("icons/icon.ico")) + upgradeUuid = libs.versions.versionUuid.get() + console = false + perUserInstall = true + appx { } } - } - windows { - iconFile.set(project.file("icons/icon.ico")) - upgradeUuid = libs.versions.versionUuid.get() - console = false - perUserInstall = true - appx { } - } - - macOS { - bundleID = "dev.appoutlet.Foliary" - dockName = "Foliary" - appCategory = "public.app-category.utilities" - minimumSystemVersion = "12.0" - macOsSdkVersion = "26.0" - iconFile.set(project.file("icons/icon.icns")) + macOS { + bundleID = "dev.appoutlet.Foliary" + dockName = "Foliary" + appCategory = "public.app-category.utilities" + minimumSystemVersion = "12.0" + macOsSdkVersion = "26.0" + iconFile.set(project.file("icons/icon.icns")) + } } } } diff --git a/desktop/src/main/kotlin/DecoratedWindow.kt b/desktop/src/main/kotlin/DecoratedWindow.kt index dcb6f493..5e26c2d8 100644 --- a/desktop/src/main/kotlin/DecoratedWindow.kt +++ b/desktop/src/main/kotlin/DecoratedWindow.kt @@ -1,6 +1,5 @@ import androidx.compose.foundation.layout.Box import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.SideEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -9,36 +8,22 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.ApplicationScope import androidx.compose.ui.window.rememberWindowState -import dev.appoutlet.foliary.core.logging.getLogger import dev.appoutlet.foliary.core.ui.theme.FoliaryTheme -import io.github.kdroidfilter.nucleus.window.DecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.material.MaterialDecoratedWindow -import io.github.kdroidfilter.nucleus.window.material.MaterialTitleBar -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.application.NucleusApplicationScope +import dev.nucleusframework.application.NucleusDecoratedWindowScope +import dev.nucleusframework.window.material.MaterialDecoratedWindow +import dev.nucleusframework.window.material.MaterialTitleBar +import dev.nucleusframework.window.styling.LocalTitleBarStyle import java.awt.Window -private val log = getLogger("Decorated Window") - private const val WindowMinimumWidth = 350 private const val WindowMinimumHeight = 900 @Composable -fun ApplicationScope.DecoratedWindow(content: @Composable () -> Unit) { - var restoreRequested by remember { mutableStateOf(false) } +fun NucleusApplicationScope.DecoratedWindow(content: @Composable () -> Unit) { var appWindow by remember { mutableStateOf(null) } - manageSingleInstance( - onRestoreRequest = { requested -> - restoreRequested = requested - }, - onSecondInstance = { - log.i { "Second instance started" } - return@DecoratedWindow - } - ) - appWindow?.let { window -> FoliaryTray({ window }) } @@ -52,15 +37,7 @@ fun ApplicationScope.DecoratedWindow(content: @Composable () -> Unit) { }, minimumSize = DpSize(WindowMinimumWidth.dp, WindowMinimumHeight.dp), ) { - SideEffect { appWindow = window } - - LaunchedEffect(restoreRequested) { - if (restoreRequested) { - window.isVisible = true - window.toFront() - restoreRequested = false - } - } + SideEffect { appWindow = nucleusWindow.unsafe.awtWindow } Box { content() @@ -71,7 +48,7 @@ fun ApplicationScope.DecoratedWindow(content: @Composable () -> Unit) { } @Composable -private fun DecoratedWindowScope.TitleBar() { +private fun NucleusDecoratedWindowScope.TitleBar() { val defaultStyle = LocalTitleBarStyle.current val style = remember { defaultStyle.copy( diff --git a/desktop/src/main/kotlin/DeeplinkHandler.kt b/desktop/src/main/kotlin/DeeplinkHandler.kt index b41f198c..0a56b7a9 100644 --- a/desktop/src/main/kotlin/DeeplinkHandler.kt +++ b/desktop/src/main/kotlin/DeeplinkHandler.kt @@ -1,15 +1,7 @@ -import dev.appoutlet.foliary.feature.common.deeplink.DeepLinkDispatcher import dev.appoutlet.foliary.feature.common.deeplink.Deeplink import dev.appoutlet.foliary.feature.common.deeplink.getAdditionalQueryParameters -import io.github.kdroidfilter.nucleus.core.runtime.DeepLinkHandler import java.net.URI -fun registerDeeplinkHandler(args: Array) { - DeepLinkHandler.register(args) { uri -> - DeepLinkDispatcher.dispatch(uri.toDeeplink()) - } -} - internal fun URI.toDeeplink(): Deeplink { val regularQueryParameters = this.query?.split('&')?.associate { val arg = it.split('=', limit = 2) diff --git a/desktop/src/main/kotlin/Main.kt b/desktop/src/main/kotlin/Main.kt index 8d5057a6..f8e27500 100644 --- a/desktop/src/main/kotlin/Main.kt +++ b/desktop/src/main/kotlin/Main.kt @@ -1,11 +1,12 @@ -import androidx.compose.ui.window.application import dev.appoutlet.foliary.App import dev.appoutlet.foliary.core.logging.initSentry +import dev.appoutlet.foliary.feature.common.deeplink.DeepLinkDispatcher +import dev.nucleusframework.application.nucleusApplication fun main(args: Array) { initSentry() - registerDeeplinkHandler(args) - application { + nucleusApplication(args) { + onDeepLink { uri -> DeepLinkDispatcher.dispatch(uri.toDeeplink()) } DecoratedWindow { App() } } } diff --git a/desktop/src/main/kotlin/ManageSingleInstance.kt b/desktop/src/main/kotlin/ManageSingleInstance.kt deleted file mode 100644 index 23bb3763..00000000 --- a/desktop/src/main/kotlin/ManageSingleInstance.kt +++ /dev/null @@ -1,28 +0,0 @@ -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.window.ApplicationScope -import io.github.kdroidfilter.nucleus.core.runtime.DeepLinkHandler -import io.github.kdroidfilter.nucleus.core.runtime.SingleInstanceManager - -@Composable -inline fun ApplicationScope.manageSingleInstance( - crossinline onRestoreRequest: (Boolean) -> Unit, - onSecondInstance: () -> Unit -) { - val isSingle = remember { - SingleInstanceManager.isSingleInstance( - onRestoreFileCreated = { - DeepLinkHandler.writeUriTo(this) - }, - onRestoreRequest = { - DeepLinkHandler.readUriFrom(this) - onRestoreRequest(true) - }, - ) - } - - if (!isSingle) { - exitApplication() - onSecondInstance() - } -} diff --git a/foliary/src/jvmMain/kotlin/dev/appoutlet/foliary/feature/main/MainScreen.jvm.kt b/foliary/src/jvmMain/kotlin/dev/appoutlet/foliary/feature/main/MainScreen.jvm.kt index 490c2bc4..dcae83fa 100644 --- a/foliary/src/jvmMain/kotlin/dev/appoutlet/foliary/feature/main/MainScreen.jvm.kt +++ b/foliary/src/jvmMain/kotlin/dev/appoutlet/foliary/feature/main/MainScreen.jvm.kt @@ -3,7 +3,7 @@ package dev.appoutlet.foliary.feature.main import androidx.compose.runtime.Composable import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.core.runtime.Platform +import dev.nucleusframework.core.runtime.Platform @Composable actual fun getWindowDecorationPadding(): Dp { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d6a039c8..65c5afd5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -21,7 +21,7 @@ material3 = "1.12.0-alpha03" multiplatformSettings = "1.3.0" navigation3 = "1.2.0-rc01" composenativetray = "1.3.3" -nucleus = "1.15.7" +nucleus = "2.5.18" appdirs = "2.0.0" orbit = "12.0.1" room = "3.0.0-alpha05" @@ -48,7 +48,7 @@ kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } mokkery = "dev.mokkery:3.5.0" -nucleus = { id = "io.github.kdroidfilter.nucleus", version.ref = "nucleus" } +nucleus = { id = "dev.nucleusframework", version.ref = "nucleus" } room = { id = "androidx.room3", version.ref = "room" } sentry = { id = "io.sentry.kotlin.multiplatform.gradle", version.ref = "sentry" } @@ -94,10 +94,11 @@ ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "kto lucideIcons = "com.composables:icons-lucide-cmp:2.2.1" multiplatformSettings = { module = "com.russhwolf:multiplatform-settings-no-arg", version.ref = "multiplatformSettings" } navigation3-ui = { module = "org.jetbrains.androidx.navigation3:navigation3-ui", version.ref = "navigation3" } -nucleus-aot-runtime = { module = "io.github.kdroidfilter:nucleus.aot-runtime", version.ref = "nucleus" } -nucleus-core-runtime = { module = "io.github.kdroidfilter:nucleus.core-runtime", version.ref = "nucleus" } -nucleus-decoratedWindow-jbr = { module = "io.github.kdroidfilter:nucleus.decorated-window-jbr", version.ref = "nucleus" } -nucleus-decoratedWindow-material3 = { module = "io.github.kdroidfilter:nucleus.decorated-window-material3", version.ref = "nucleus" } +nucleus-aot-runtime = { module = "dev.nucleusframework:nucleus.aot-runtime", version.ref = "nucleus" } +nucleus-application = { module = "dev.nucleusframework:nucleus.nucleus-application", version.ref = "nucleus" } +nucleus-core-runtime = { module = "dev.nucleusframework:nucleus.core-runtime", version.ref = "nucleus" } +nucleus-decoratedWindow-jbr = { module = "dev.nucleusframework:nucleus.decorated-window-jbr", version.ref = "nucleus" } +nucleus-decoratedWindow-material3 = { module = "dev.nucleusframework:nucleus.decorated-window-material3", version.ref = "nucleus" } orbit-compose = { module = "org.orbit-mvi:orbit-compose", version.ref = "orbit" } orbit-core = { module = "org.orbit-mvi:orbit-core", version.ref = "orbit" } orbit-test = { module = "org.orbit-mvi:orbit-test", version.ref = "orbit" } From bcb4d76d232af349bc2e30f4376684de3a151d1d Mon Sep 17 00:00:00 2001 From: Messias Junior Date: Thu, 22 Oct 2026 10:23:38 +0100 Subject: [PATCH 2/3] delete system tray --- desktop/build.gradle.kts | 1 - desktop/proguard-rules.pro | 4 --- desktop/src/main/kotlin/DecoratedWindow.kt | 17 +-------- desktop/src/main/kotlin/SystemTray.kt | 40 ---------------------- gradle/libs.versions.toml | 2 -- 5 files changed, 1 insertion(+), 63 deletions(-) delete mode 100644 desktop/src/main/kotlin/SystemTray.kt diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts index 31996654..169c283a 100644 --- a/desktop/build.gradle.kts +++ b/desktop/build.gradle.kts @@ -20,7 +20,6 @@ kotlin { dependencies { implementation(project(":foliary")) implementation(compose.desktop.currentOs) - implementation(libs.composenativetray) implementation(libs.lucideIcons) implementation(libs.nucleus.application) implementation(libs.nucleus.core.runtime) diff --git a/desktop/proguard-rules.pro b/desktop/proguard-rules.pro index a291e8c7..b5a8fa60 100644 --- a/desktop/proguard-rules.pro +++ b/desktop/proguard-rules.pro @@ -8,7 +8,3 @@ # Ktor -keep class io.ktor.client.engine.** { *; } -keep class io.ktor.serialization.kotlinx.json.** { *; } - -# ComposeNativeTray --keep class com.sun.jna.** { *; } --keep class com.kdroid.composetray.** { *; } diff --git a/desktop/src/main/kotlin/DecoratedWindow.kt b/desktop/src/main/kotlin/DecoratedWindow.kt index 5e26c2d8..a79577bf 100644 --- a/desktop/src/main/kotlin/DecoratedWindow.kt +++ b/desktop/src/main/kotlin/DecoratedWindow.kt @@ -1,10 +1,6 @@ import androidx.compose.foundation.layout.Box import androidx.compose.runtime.Composable -import androidx.compose.runtime.SideEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp @@ -15,30 +11,19 @@ import dev.nucleusframework.application.NucleusDecoratedWindowScope import dev.nucleusframework.window.material.MaterialDecoratedWindow import dev.nucleusframework.window.material.MaterialTitleBar import dev.nucleusframework.window.styling.LocalTitleBarStyle -import java.awt.Window private const val WindowMinimumWidth = 350 private const val WindowMinimumHeight = 900 @Composable fun NucleusApplicationScope.DecoratedWindow(content: @Composable () -> Unit) { - var appWindow by remember { mutableStateOf(null) } - - appWindow?.let { window -> - FoliaryTray({ window }) - } - FoliaryTheme { MaterialDecoratedWindow( title = "Foliary", state = rememberWindowState(width = 800.dp, height = WindowMinimumHeight.dp), - onCloseRequest = { - appWindow?.isVisible = false - }, + onCloseRequest = { exitApplication() }, minimumSize = DpSize(WindowMinimumWidth.dp, WindowMinimumHeight.dp), ) { - SideEffect { appWindow = nucleusWindow.unsafe.awtWindow } - Box { content() TitleBar() diff --git a/desktop/src/main/kotlin/SystemTray.kt b/desktop/src/main/kotlin/SystemTray.kt deleted file mode 100644 index 85db9b78..00000000 --- a/desktop/src/main/kotlin/SystemTray.kt +++ /dev/null @@ -1,40 +0,0 @@ -import androidx.compose.runtime.Composable -import androidx.compose.ui.window.ApplicationScope -import com.kdroid.composetray.tray.api.Tray -import foliary.foliary.generated.resources.Res -import foliary.foliary.generated.resources.app_name -import foliary.foliary.generated.resources.ic_foliary_tray -import foliary.foliary.generated.resources.system_tray_open_app -import foliary.foliary.generated.resources.system_tray_quit -import org.jetbrains.compose.resources.painterResource -import org.jetbrains.compose.resources.stringResource -import java.awt.Window - -@Composable -fun ApplicationScope.FoliaryTray(window: () -> Window) { - val appName = stringResource(Res.string.app_name) - val openApp = stringResource(Res.string.system_tray_open_app) - val quit = stringResource(Res.string.system_tray_quit) - - Tray( - icon = painterResource(Res.drawable.ic_foliary_tray), - tooltip = appName, - primaryAction = { toggleWindow(window()) } - ) { - Item(label = openApp) { bringToFront(window()) } - Divider() - Item(label = quit) { exitApplication() } - } -} - -private fun toggleWindow(window: Window) { - window.isVisible = window.isVisible.not() - if (window.isVisible) { - window.toFront() - } -} - -private fun bringToFront(window: Window) { - window.isVisible = true - window.toFront() -} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 65c5afd5..5f22abb9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -20,7 +20,6 @@ ksp = "2.3.12" material3 = "1.12.0-alpha03" multiplatformSettings = "1.3.0" navigation3 = "1.2.0-rc01" -composenativetray = "1.3.3" nucleus = "2.5.18" appdirs = "2.0.0" orbit = "12.0.1" @@ -70,7 +69,6 @@ compose-ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "compose-mu compose-ui-test = { module = "org.jetbrains.compose.ui:ui-test", version.ref = "compose-multiplatform" } compose-ui-tooling = { module = "org.jetbrains.compose.ui:ui-tooling", version.ref = "compose-multiplatform" } compose-ui-tooling-preview = { module = "org.jetbrains.compose.ui:ui-tooling-preview", version.ref = "compose-multiplatform" } -composenativetray = { module = "io.github.kdroidfilter:composenativetray", version.ref = "composenativetray" } detekt-composeRules = "io.nlopez.compose.rules:detekt:0.6.7" detekt-formatting = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detekt" } kermit = { module = "co.touchlab:kermit", version.ref = "kermit" } From 3c2d644cb34a67d5a8fa88b1f3816f5c60fb7df2 Mon Sep 17 00:00:00 2001 From: Messias Junior Date: Thu, 22 Oct 2026 10:55:39 +0100 Subject: [PATCH 3/3] simplify window decoration setup --- desktop/build.gradle.kts | 1 - ...tedWindow.kt => FoliaryDecoratedWindow.kt} | 31 +++++++++---------- desktop/src/main/kotlin/Main.kt | 4 +-- gradle/libs.versions.toml | 1 - 4 files changed, 16 insertions(+), 21 deletions(-) rename desktop/src/main/kotlin/{DecoratedWindow.kt => FoliaryDecoratedWindow.kt} (54%) diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts index 169c283a..c1e12a8c 100644 --- a/desktop/build.gradle.kts +++ b/desktop/build.gradle.kts @@ -25,7 +25,6 @@ dependencies { implementation(libs.nucleus.core.runtime) implementation(libs.nucleus.aot.runtime) implementation(libs.nucleus.decoratedWindow.jbr) - implementation(libs.nucleus.decoratedWindow.material3) testImplementation(kotlin("test")) testImplementation(libs.kotest.assertions) diff --git a/desktop/src/main/kotlin/DecoratedWindow.kt b/desktop/src/main/kotlin/FoliaryDecoratedWindow.kt similarity index 54% rename from desktop/src/main/kotlin/DecoratedWindow.kt rename to desktop/src/main/kotlin/FoliaryDecoratedWindow.kt index a79577bf..ccbf4db5 100644 --- a/desktop/src/main/kotlin/DecoratedWindow.kt +++ b/desktop/src/main/kotlin/FoliaryDecoratedWindow.kt @@ -5,35 +5,32 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp import androidx.compose.ui.window.rememberWindowState -import dev.appoutlet.foliary.core.ui.theme.FoliaryTheme +import dev.nucleusframework.application.DecoratedWindow import dev.nucleusframework.application.NucleusApplicationScope import dev.nucleusframework.application.NucleusDecoratedWindowScope -import dev.nucleusframework.window.material.MaterialDecoratedWindow -import dev.nucleusframework.window.material.MaterialTitleBar +import dev.nucleusframework.window.TitleBar import dev.nucleusframework.window.styling.LocalTitleBarStyle private const val WindowMinimumWidth = 350 private const val WindowMinimumHeight = 900 @Composable -fun NucleusApplicationScope.DecoratedWindow(content: @Composable () -> Unit) { - FoliaryTheme { - MaterialDecoratedWindow( - title = "Foliary", - state = rememberWindowState(width = 800.dp, height = WindowMinimumHeight.dp), - onCloseRequest = { exitApplication() }, - minimumSize = DpSize(WindowMinimumWidth.dp, WindowMinimumHeight.dp), - ) { - Box { - content() - TitleBar() - } +fun NucleusApplicationScope.FoliaryDecoratedWindow(content: @Composable () -> Unit) { + DecoratedWindow( + onCloseRequest = ::exitApplication, + state = rememberWindowState(width = 800.dp, height = WindowMinimumHeight.dp), + title = "Foliary", + minimumSize = DpSize(WindowMinimumWidth.dp, WindowMinimumHeight.dp), + ) { + Box { + content() + FoliaryTitleBar() } } } @Composable -private fun NucleusDecoratedWindowScope.TitleBar() { +private fun NucleusDecoratedWindowScope.FoliaryTitleBar() { val defaultStyle = LocalTitleBarStyle.current val style = remember { defaultStyle.copy( @@ -44,5 +41,5 @@ private fun NucleusDecoratedWindowScope.TitleBar() { ) } - MaterialTitleBar(style = style) + TitleBar(style = style) } diff --git a/desktop/src/main/kotlin/Main.kt b/desktop/src/main/kotlin/Main.kt index f8e27500..eea5cb20 100644 --- a/desktop/src/main/kotlin/Main.kt +++ b/desktop/src/main/kotlin/Main.kt @@ -5,8 +5,8 @@ import dev.nucleusframework.application.nucleusApplication fun main(args: Array) { initSentry() - nucleusApplication(args) { + nucleusApplication(args = args) { onDeepLink { uri -> DeepLinkDispatcher.dispatch(uri.toDeeplink()) } - DecoratedWindow { App() } + FoliaryDecoratedWindow { App() } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5f22abb9..0feaab69 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -96,7 +96,6 @@ nucleus-aot-runtime = { module = "dev.nucleusframework:nucleus.aot-runtime", ver nucleus-application = { module = "dev.nucleusframework:nucleus.nucleus-application", version.ref = "nucleus" } nucleus-core-runtime = { module = "dev.nucleusframework:nucleus.core-runtime", version.ref = "nucleus" } nucleus-decoratedWindow-jbr = { module = "dev.nucleusframework:nucleus.decorated-window-jbr", version.ref = "nucleus" } -nucleus-decoratedWindow-material3 = { module = "dev.nucleusframework:nucleus.decorated-window-material3", version.ref = "nucleus" } orbit-compose = { module = "org.orbit-mvi:orbit-compose", version.ref = "orbit" } orbit-core = { module = "org.orbit-mvi:orbit-core", version.ref = "orbit" } orbit-test = { module = "org.orbit-mvi:orbit-test", version.ref = "orbit" }