Skip to content

Commit 9927170

Browse files
committed
Enhance Linux tray position logic with desktop environment defaults:
- Add detection for Linux desktop environments (GNOME, KDE, XFCE, CINNAMON, MATE). - Define environment-specific tray position defaults for improved fallback behavior. - Update `getTrayPosition` to incorporate new desktop environment logic.
1 parent eb4f624 commit 9927170

1 file changed

Lines changed: 19 additions & 0 deletions

File tree

src/commonMain/kotlin/com/kdroid/composetray/utils/TrayPosition.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ import androidx.compose.ui.window.WindowPosition
66
import com.kdroid.composetray.lib.mac.MacTrayManager
77
import com.sun.jna.Native
88
import com.sun.jna.ptr.IntByReference
9+
import io.github.kdroidfilter.platformtools.LinuxDesktopEnvironment
910
import io.github.kdroidfilter.platformtools.OperatingSystem
11+
import io.github.kdroidfilter.platformtools.detectLinuxDesktopEnvironment
1012
import io.github.kdroidfilter.platformtools.getOperatingSystem
1113
import java.awt.Toolkit
1214
import 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

Comments
 (0)