Skip to content

Commit ebcd6aa

Browse files
committed
Improve dialog positioning for KDE in TrayApp
- Detect Linux desktop environment and adjust positioning logic specifically for KDE. - Pre-calculate and update window position before showing dialog to ensure correct placement.
1 parent a424b13 commit ebcd6aa

1 file changed

Lines changed: 18 additions & 6 deletions

File tree

  • src/commonMain/kotlin/com/kdroid/composetray/tray/api

src/commonMain/kotlin/com/kdroid/composetray/tray/api/TrayApp.kt

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ import androidx.compose.ui.draw.alpha
1313
import androidx.compose.ui.graphics.Color
1414
import androidx.compose.ui.graphics.painter.Painter
1515
import androidx.compose.ui.graphics.vector.ImageVector
16-
import org.jetbrains.compose.resources.DrawableResource
17-
import org.jetbrains.compose.resources.painterResource
1816
import androidx.compose.ui.unit.DpSize
1917
import androidx.compose.ui.unit.dp
2018
import androidx.compose.ui.window.ApplicationScope
@@ -27,15 +25,19 @@ import com.kdroid.composetray.lib.mac.MacOutsideClickWatcher
2725
import com.kdroid.composetray.lib.windows.WindowsOutsideClickWatcher
2826
import com.kdroid.composetray.menu.api.TrayMenuBuilder
2927
import com.kdroid.composetray.utils.*
28+
import io.github.kdroidfilter.platformtools.LinuxDesktopEnvironment
3029
import io.github.kdroidfilter.platformtools.OperatingSystem
3130
import io.github.kdroidfilter.platformtools.OperatingSystem.MACOS
3231
import io.github.kdroidfilter.platformtools.OperatingSystem.WINDOWS
32+
import io.github.kdroidfilter.platformtools.detectLinuxDesktopEnvironment
3333
import io.github.kdroidfilter.platformtools.getOperatingSystem
3434
import kotlinx.coroutines.CoroutineScope
3535
import kotlinx.coroutines.Dispatchers
3636
import kotlinx.coroutines.delay
3737
import kotlinx.coroutines.flow.collectLatest
3838
import kotlinx.coroutines.launch
39+
import org.jetbrains.compose.resources.DrawableResource
40+
import org.jetbrains.compose.resources.painterResource
3941
import java.awt.EventQueue.invokeLater
4042
import java.awt.event.WindowEvent
4143
import java.awt.event.WindowFocusListener
@@ -378,17 +380,27 @@ fun ApplicationScope.TrayApp(
378380
val now = System.currentTimeMillis()
379381
if (now - lastPrimaryActionAt >= toggleDebounceMs) {
380382
lastPrimaryActionAt = now
381-
382383
if (isVisible) {
383-
// Explicit hide (works both in AUTO and MANUAL)
384384
requestHideExplicit()
385385
} else {
386386
if (now - lastHiddenAt >= minHiddenDurationMs) {
387387
if (os == WINDOWS && (now - lastFocusLostAt) < 300) {
388-
// Ignore immediate re-show after focus loss on Windows
388+
// Ignore
389389
} else {
390+
if (detectLinuxDesktopEnvironment() == LinuxDesktopEnvironment.KDE) {
391+
// Pré-calculer la position AVANT de montrer
392+
val widthPx = currentWindowSize.width.value.toInt()
393+
val heightPx = currentWindowSize.height.value.toInt()
394+
val newPosition = getTrayWindowPositionForInstance(
395+
tray.instanceKey(), widthPx, heightPx
396+
)
397+
398+
// Mettre à jour immédiatement
399+
if (newPosition !is WindowPosition.PlatformDefault) {
400+
dialogState.position = newPosition
401+
}
402+
}
390403
trayAppState.show()
391-
// `lastShownAt` will be set in LaunchedEffect(isVisible)
392404
}
393405
}
394406
}

0 commit comments

Comments
 (0)