@@ -872,13 +872,18 @@ async fn run_daemon(config_path: &std::path::Path) -> anyhow::Result<()> { |
| 872 | 872 | }; |
| 873 | 873 | |
| 874 | 874 | // Check if there's another monitor in the requested direction |
| 875 | + // Use logical dimensions (physical / scale) since positions are logical |
| 875 | 876 | let has_monitor_in_direction = monitors.iter().any(|m| { |
| 876 | 877 | if m.id == focused_monitor.id { return false; } |
| 878 | + let m_logical_w = (m.width as f32 / m.scale).round() as i32; |
| 879 | + let m_logical_h = (m.height as f32 / m.scale).round() as i32; |
| 880 | + let focused_logical_w = (focused_monitor.width as f32 / focused_monitor.scale).round() as i32; |
| 881 | + let focused_logical_h = (focused_monitor.height as f32 / focused_monitor.scale).round() as i32; |
| 877 | 882 | match direction { |
| 878 | | - Direction::Left => m.x + m.width as i32 <= focused_monitor.x, |
| 879 | | - Direction::Right => m.x >= focused_monitor.x + focused_monitor.width as i32, |
| 880 | | - Direction::Up => m.y + m.height as i32 <= focused_monitor.y, |
| 881 | | - Direction::Down => m.y >= focused_monitor.y + focused_monitor.height as i32, |
| 883 | + Direction::Left => m.x + m_logical_w <= focused_monitor.x, |
| 884 | + Direction::Right => m.x >= focused_monitor.x + focused_logical_w, |
| 885 | + Direction::Up => m.y + m_logical_h <= focused_monitor.y, |
| 886 | + Direction::Down => m.y >= focused_monitor.y + focused_logical_h, |
| 882 | 887 | } |
| 883 | 888 | }); |
| 884 | 889 | |
@@ -1692,13 +1697,18 @@ async fn run_daemon(config_path: &std::path::Path) -> anyhow::Result<()> { |
| 1692 | 1697 | }; |
| 1693 | 1698 | |
| 1694 | 1699 | // Check if there's another monitor in the requested direction |
| 1700 | + // Use logical dimensions (physical / scale) since positions are logical |
| 1695 | 1701 | let has_monitor_in_direction = monitors.iter().any(|m| { |
| 1696 | 1702 | if m.id == focused_monitor.id { return false; } |
| 1703 | + let m_logical_w = (m.width as f32 / m.scale).round() as i32; |
| 1704 | + let m_logical_h = (m.height as f32 / m.scale).round() as i32; |
| 1705 | + let focused_logical_w = (focused_monitor.width as f32 / focused_monitor.scale).round() as i32; |
| 1706 | + let focused_logical_h = (focused_monitor.height as f32 / focused_monitor.scale).round() as i32; |
| 1697 | 1707 | match direction { |
| 1698 | | - Direction::Left => m.x + m.width as i32 <= focused_monitor.x, |
| 1699 | | - Direction::Right => m.x >= focused_monitor.x + focused_monitor.width as i32, |
| 1700 | | - Direction::Up => m.y + m.height as i32 <= focused_monitor.y, |
| 1701 | | - Direction::Down => m.y >= focused_monitor.y + focused_monitor.height as i32, |
| 1708 | + Direction::Left => m.x + m_logical_w <= focused_monitor.x, |
| 1709 | + Direction::Right => m.x >= focused_monitor.x + focused_logical_w, |
| 1710 | + Direction::Up => m.y + m_logical_h <= focused_monitor.y, |
| 1711 | + Direction::Down => m.y >= focused_monitor.y + focused_logical_h, |
| 1702 | 1712 | } |
| 1703 | 1713 | }); |
| 1704 | 1714 | |