Skip to content

Commit a75d6e9

Browse files
authored
Better windows positioning (#879)
1 parent 73f3187 commit a75d6e9

3 files changed

Lines changed: 29 additions & 24 deletions

File tree

src-tauri/src/service/daemon.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ use tonic::{
2323
transport::Server,
2424
Code, Response, Status,
2525
};
26-
use tracing::{debug, error, info, info_span, warn, Instrument};
26+
#[cfg(not(windows))]
27+
use tracing::warn;
28+
use tracing::{debug, error, info, info_span, Instrument};
2729

2830
use super::{
2931
config::Config,
@@ -33,12 +35,15 @@ use super::{
3335
ReadInterfaceDataRequest, RemoveInterfaceRequest, SaveServiceLocationsRequest,
3436
},
3537
};
38+
use crate::{
39+
enterprise::service_locations::ServiceLocationError,
40+
service::proto::defguard::enterprise::posture::v2::DevicePostureData, VERSION,
41+
};
3642
#[cfg(windows)]
37-
use crate::enterprise::service_locations::ServiceLocationManager;
38-
#[cfg(windows)]
39-
use crate::service::named_pipe::{get_named_pipe_server_stream, PIPE_NAME};
40-
use crate::service::proto::defguard::enterprise::posture::v2::DevicePostureData;
41-
use crate::{enterprise::service_locations::ServiceLocationError, VERSION};
43+
use crate::{
44+
enterprise::service_locations::ServiceLocationManager,
45+
service::named_pipe::{get_named_pipe_server_stream, PIPE_NAME},
46+
};
4247

4348
#[cfg(unix)]
4449
pub(super) const DAEMON_SOCKET_PATH: &str = "/var/run/defguard.socket";

src-tauri/src/tray.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ fn store_tray_click_position(app: &AppHandle, event: &TrayIconEvent) {
3636
let position = match event {
3737
TrayIconEvent::Click {
3838
button_state: MouseButtonState::Down,
39-
position,
39+
rect,
4040
..
4141
}
42-
| TrayIconEvent::DoubleClick { position, .. } => Some(*position),
42+
| TrayIconEvent::DoubleClick { rect, .. } => Some(rect.position.to_physical(1.0)),
4343
_ => None,
4444
};
4545

src-tauri/src/window.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use 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

66
use crate::appstate::AppState;
@@ -11,6 +11,10 @@ pub const NEW_UI_WIDTH: f64 = 360.0;
1111
pub const NEW_UI_HEIGHT: f64 = 675.0;
1212
pub const OLD_UI_WIDTH: f64 = 920.0;
1313
pub 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]
1620
pub fn new_ui_url() -> WebviewUrl {
@@ -52,8 +56,7 @@ fn get_monitor_for_position(app: &AppHandle, x: f64, y: f64) -> Option<Monitor>
5256

5357
fn 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

Comments
 (0)