11use tauri:: {
2- webview:: WebviewWindowBuilder , AppHandle , LogicalPosition , Manager , Monitor , Position ,
3- WebviewUrl , WebviewWindow ,
2+ webview:: WebviewWindowBuilder , AppHandle , LogicalPosition , Manager , Monitor , PhysicalSize ,
3+ Position , WebviewUrl , WebviewWindow ,
44} ;
55
66use crate :: appstate:: AppState ;
@@ -11,6 +11,10 @@ pub const NEW_UI_WIDTH: f64 = 360.0;
1111pub const NEW_UI_HEIGHT : f64 = 675.0 ;
1212pub const OLD_UI_WIDTH : f64 = 920.0 ;
1313pub const OLD_UI_HEIGHT : f64 = 720.0 ;
14+ #[ cfg( windows) ]
15+ const TASKBAR_HEIGHT : f64 = 48.0 ;
16+ #[ cfg( not( windows) ) ]
17+ const TASKBAR_HEIGHT : f64 = 0.0 ;
1418
1519#[ must_use]
1620pub fn new_ui_url ( ) -> WebviewUrl {
@@ -52,8 +56,7 @@ fn get_monitor_for_position(app: &AppHandle, x: f64, y: f64) -> Option<Monitor>
5256
5357fn get_tray_window_position (
5458 app : & AppHandle ,
55- width : f64 ,
56- height : f64 ,
59+ size : PhysicalSize < u32 > ,
5760) -> Option < LogicalPosition < f64 > > {
5861 let app_state = app. state :: < AppState > ( ) ;
5962 let tray_position = app_state. tray_click_position . lock ( ) . unwrap ( ) . to_owned ( ) ?;
@@ -64,29 +67,26 @@ fn get_tray_window_position(
6467 let monitor_position = monitor. position ( ) . to_logical :: < f64 > ( scale_factor) ;
6568 let monitor_size = monitor. size ( ) . to_logical :: < f64 > ( scale_factor) ;
6669 let tray_position = tray_position. to_logical :: < f64 > ( scale_factor) ;
70+ let window_size = size. to_logical :: < f64 > ( scale_factor) ;
6771
68- let mut x = tray_position. x - ( width / 2.0 ) ;
69- let center_y = monitor_position. y + ( monitor_size. height / 2.0 ) ;
70- let mut y = if tray_position. y < center_y {
71- tray_position. y
72- } else {
73- tray_position. y - height
74- } ;
72+ let mut x = tray_position. x ;
73+ let mut y = tray_position. y ;
7574
7675 x = x. clamp (
7776 monitor_position. x ,
78- monitor_position. x + monitor_size. width - width,
77+ monitor_position. x + monitor_size. width - window_size . width ,
7978 ) ;
8079 y = y. clamp (
8180 monitor_position. y ,
82- monitor_position. y + monitor_size. height - height,
81+ monitor_position. y + monitor_size. height - window_size . height - TASKBAR_HEIGHT ,
8382 ) ;
8483
8584 Some ( LogicalPosition :: new ( x, y) )
8685}
8786
88- fn position_window_near_tray ( app : & AppHandle , window : & WebviewWindow , width : f64 , height : f64 ) {
89- if let Some ( position) = get_tray_window_position ( app, width, height) {
87+ fn position_window_near_tray ( app : & AppHandle , window : & WebviewWindow ) {
88+ let size = window. outer_size ( ) . unwrap_or_default ( ) ;
89+ if let Some ( position) = get_tray_window_position ( app, size) {
9090 if let Err ( err) = window. set_position ( Position :: Logical ( position) ) {
9191 warn ! ( "Failed to position window near tray icon: {err}" ) ;
9292 }
@@ -105,7 +105,7 @@ fn show_new_ui_window_internal(app: &AppHandle, near_tray: bool) {
105105 . unwrap ( )
106106 } ;
107107 if near_tray {
108- position_window_near_tray ( app, & window, NEW_UI_WIDTH , NEW_UI_HEIGHT ) ;
108+ position_window_near_tray ( app, & window) ;
109109 }
110110 #[ cfg( target_os = "macos" ) ]
111111 let _ = app. show ( ) ;
0 commit comments