@@ -6,7 +6,9 @@ import androidx.compose.ui.window.WindowPosition
66import com.kdroid.composetray.lib.mac.MacTrayManager
77import com.sun.jna.Native
88import com.sun.jna.ptr.IntByReference
9+ import io.github.kdroidfilter.platformtools.LinuxDesktopEnvironment
910import io.github.kdroidfilter.platformtools.OperatingSystem
11+ import io.github.kdroidfilter.platformtools.detectLinuxDesktopEnvironment
1012import io.github.kdroidfilter.platformtools.getOperatingSystem
1113import java.awt.Toolkit
1214import java.io.File
@@ -115,6 +117,12 @@ internal fun getWindowsTrayPosition(nativeResult: String?): TrayPosition {
115117 * - On Windows, it uses the platform's native library to determine the tray position.
116118 * - On macOS, it defaults to a specific standard position.
117119 * - On Linux, the position is fetched from click coordinates or properties file.
120+ * If no position data is available, it uses desktop environment-specific defaults:
121+ * - GNOME: TOP_RIGHT
122+ * - KDE: BOTTOM_RIGHT
123+ * - XFCE: TOP_RIGHT
124+ * - CINNAMON: BOTTOM_RIGHT
125+ * - MATE: TOP_RIGHT
118126 * - For unknown or unsupported operating systems, a default position is returned.
119127 *
120128 * @return The computed tray position as a [TrayPosition] enum value.
@@ -155,6 +163,17 @@ fun getTrayPosition(): TrayPosition {
155163 }
156164 }
157165 }
166+
167+ // If no position is found, use desktop environment-specific defaults
168+ return when (detectLinuxDesktopEnvironment()) {
169+ LinuxDesktopEnvironment .GNOME -> TrayPosition .TOP_RIGHT
170+ LinuxDesktopEnvironment .KDE -> TrayPosition .BOTTOM_RIGHT
171+ LinuxDesktopEnvironment .XFCE -> TrayPosition .TOP_RIGHT
172+ LinuxDesktopEnvironment .CINNAMON -> TrayPosition .BOTTOM_RIGHT
173+ LinuxDesktopEnvironment .MATE -> TrayPosition .TOP_RIGHT
174+ LinuxDesktopEnvironment .UNKNOWN -> TrayPosition .TOP_RIGHT
175+ null -> TrayPosition .TOP_RIGHT
176+ }
158177 }
159178 OperatingSystem .UNKNOWN -> return TrayPosition .TOP_RIGHT
160179 else -> {}
0 commit comments