Skip to content

Commit

Permalink
fix(positioner): Prevent tray relative windows from being moved off-s…
Browse files Browse the repository at this point in the history
…creen (#291)

* feat: add system tray positioning method

* apply patch

* remove pos

* fix linter

* fix cargo fmt

* linter

* add changefile

* Update and rename stronghold-tray-position.md to tray-position.md

---------

Co-authored-by: Fabian-Lars <[email protected]>
  • Loading branch information
cauyxy and FabianLars authored Sep 27, 2023
1 parent 6c7a4c0 commit 3d27909
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 13 deletions.
5 changes: 5 additions & 0 deletions .changes/tray-position.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"positioner": patch
---

`TrayLeft`, `TrayRight` and `TrayCenter` will now position the window according to the tray position relative to the monitor dimensions to prevent windows being displayed partially off-screen.
49 changes: 36 additions & 13 deletions plugins/positioner/src/ext.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,13 +107,20 @@ impl<R: Runtime> WindowExt for Window<R> {
},
#[cfg(feature = "system-tray")]
TrayLeft => {
if let Some((tray_x, tray_y)) = tray_position {
PhysicalPosition {
x: tray_x,
y: tray_y - window_size.height,
}
if let (Some((tray_x, tray_y)), Some((_, _tray_height))) =
(tray_position, tray_size)
{
let y = tray_y - window_size.height;
// Choose y value based on the target OS
#[cfg(target_os = "windows")]
let y = if y < 0 { tray_y + _tray_height } else { y };

#[cfg(target_os = "macos")]
let y = if y < 0 { tray_y } else { y };

PhysicalPosition { x: tray_x, y }
} else {
panic!("tray position not set");
panic!("Tray position not set");
}
}
#[cfg(feature = "system-tray")]
Expand All @@ -129,11 +136,20 @@ impl<R: Runtime> WindowExt for Window<R> {
}
#[cfg(feature = "system-tray")]
TrayRight => {
if let (Some((tray_x, tray_y)), Some((tray_width, _))) = (tray_position, tray_size)
if let (Some((tray_x, tray_y)), Some((tray_width, _tray_height))) =
(tray_position, tray_size)
{
let y = tray_y - window_size.height;
// Choose y value based on the target OS
#[cfg(target_os = "windows")]
let y = if y < 0 { tray_y + _tray_height } else { y };

#[cfg(target_os = "macos")]
let y = if y < 0 { tray_y } else { y };

PhysicalPosition {
x: tray_x + tray_width,
y: tray_y - window_size.height,
y,
}
} else {
panic!("Tray position not set");
Expand All @@ -153,12 +169,19 @@ impl<R: Runtime> WindowExt for Window<R> {
}
#[cfg(feature = "system-tray")]
TrayCenter => {
if let (Some((tray_x, tray_y)), Some((tray_width, _))) = (tray_position, tray_size)
if let (Some((tray_x, tray_y)), Some((tray_width, _tray_height))) =
(tray_position, tray_size)
{
PhysicalPosition {
x: tray_x + (tray_width / 2) - (window_size.width / 2),
y: tray_y - window_size.height,
}
let x = tray_x + tray_width / 2 - window_size.width / 2;
let y = tray_y - window_size.height;
// Choose y value based on the target OS
#[cfg(target_os = "windows")]
let y = if y < 0 { tray_y + _tray_height } else { y };

#[cfg(target_os = "macos")]
let y = if y < 0 { tray_y } else { y };

PhysicalPosition { x, y }
} else {
panic!("Tray position not set");
}
Expand Down

0 comments on commit 3d27909

Please sign in to comment.