@@ -967,10 +967,6 @@ async fn run_daemon(config_path: &std::path::Path) -> anyhow::Result<()> { |
| 967 | 967 | |
| 968 | 968 | if barrier_enabled.load(std::sync::atomic::Ordering::SeqCst) { |
| 969 | 969 | info!("RECOVERY HOTKEY: Barrier enabled, blocking transfer"); |
| 970 | | - } else if !input_grabber.has_devices() { |
| 971 | | - // Should never happen (no devices = no recovery hotkey events) |
| 972 | | - // but guard against it anyway |
| 973 | | - tracing::debug!("RECOVERY HOTKEY: No input devices, cannot initiate"); |
| 974 | 970 | } else { |
| 975 | 971 | info!("RECOVERY HOTKEY: At edge with peer, initiating transfer to {:?}", direction); |
| 976 | 972 | if let Err(e) = transfer_manager.initiate_transfer( |
@@ -1080,14 +1076,6 @@ async fn run_daemon(config_path: &std::path::Path) -> anyhow::Result<()> { |
| 1080 | 1076 | cursor_pos.0, |
| 1081 | 1077 | cursor_pos.1 |
| 1082 | 1078 | ); |
| 1083 | | - } else if !input_grabber.has_devices() { |
| 1084 | | - // No input devices = cannot initiate transfers (deviceless machine) |
| 1085 | | - tracing::debug!( |
| 1086 | | - "EDGE: {:?} at ({}, {}) - no input devices, cannot initiate", |
| 1087 | | - direction, |
| 1088 | | - cursor_pos.0, |
| 1089 | | - cursor_pos.1 |
| 1090 | | - ); |
| 1091 | 1079 | } else { |
| 1092 | 1080 | info!( |
| 1093 | 1081 | "EDGE: {:?} at ({}, {}) - initiating transfer", |
@@ -1232,12 +1220,6 @@ async fn run_daemon(config_path: &std::path::Path) -> anyhow::Result<()> { |
| 1232 | 1220 | "CURSOR EDGE: {:?} at ({}, {}) - barrier enabled, blocking", |
| 1233 | 1221 | edge_dir, cx, cy |
| 1234 | 1222 | ); |
| 1235 | | - } else if !input_grabber.has_devices() { |
| 1236 | | - // No input devices = cannot initiate transfers |
| 1237 | | - tracing::debug!( |
| 1238 | | - "CURSOR EDGE: {:?} at ({}, {}) - no input devices, cannot initiate", |
| 1239 | | - edge_dir, cx, cy |
| 1240 | | - ); |
| 1241 | 1223 | } else { |
| 1242 | 1224 | info!( |
| 1243 | 1225 | "CURSOR EDGE: {:?} at ({}, {}) - initiating transfer", |
@@ -1854,8 +1836,6 @@ async fn run_daemon(config_path: &std::path::Path) -> anyhow::Result<()> { |
| 1854 | 1836 | // At edge with peer but received control from different direction |
| 1855 | 1837 | if barrier_enabled.load(std::sync::atomic::Ordering::SeqCst) { |
| 1856 | 1838 | IpcResponse::Error { message: "Barrier enabled".to_string() } |
| 1857 | | - } else if !input_grabber.has_devices() { |
| 1858 | | - IpcResponse::Error { message: "No input devices - cannot initiate transfer".to_string() } |
| 1859 | 1839 | } else { |
| 1860 | 1840 | // Initiate new transfer |
| 1861 | 1841 | let cursor_pos = hypr_client.cursor_pos().await |
@@ -1899,8 +1879,6 @@ async fn run_daemon(config_path: &std::path::Path) -> anyhow::Result<()> { |
| 1899 | 1879 | } |
| 1900 | 1880 | } else if barrier_enabled.load(std::sync::atomic::Ordering::SeqCst) { |
| 1901 | 1881 | IpcResponse::Error { message: "Barrier enabled".to_string() } |
| 1902 | | - } else if !input_grabber.has_devices() { |
| 1903 | | - IpcResponse::Error { message: "No input devices - cannot initiate transfer".to_string() } |
| 1904 | 1882 | } else { |
| 1905 | 1883 | // Initiate new transfer |
| 1906 | 1884 | let cursor_pos = hypr_client.cursor_pos().await |
@@ -2092,32 +2070,25 @@ async fn run_daemon(config_path: &std::path::Path) -> anyhow::Result<()> { |
| 2092 | 2070 | if peers_guard.get(&dir).is_some() { |
| 2093 | 2071 | drop(peers_guard); |
| 2094 | 2072 | |
| 2095 | | - // Check if we have input devices before initiating |
| 2096 | | - if !input_grabber.has_devices() { |
| 2097 | | - IpcResponse::Error { |
| 2098 | | - message: "No input devices - cannot initiate transfer".to_string(), |
| 2073 | + // Get cursor position (use center of total screen) |
| 2074 | + let cursor_pos = hypr_client.cursor_pos().await |
| 2075 | + .map(|c| (c.x, c.y)) |
| 2076 | + .unwrap_or(((screen_min_x + screen_max_x) / 2, (screen_min_y + screen_max_y) / 2)); |
| 2077 | + |
| 2078 | + // Initiate transfer (CLI-initiated, not keyboard) |
| 2079 | + info!("IPC Switch: calling initiate_transfer"); |
| 2080 | + match transfer_manager.initiate_transfer(dir, cursor_pos, screen_min_x, screen_min_y, screen_max_x, screen_max_y, false).await { |
| 2081 | + Ok(()) => { |
| 2082 | + let machine_name = config.machines.neighbors |
| 2083 | + .iter() |
| 2084 | + .find(|n| n.direction == dir) |
| 2085 | + .map(|n| n.name.clone()) |
| 2086 | + .unwrap_or_else(|| format!("{:?}", dir)); |
| 2087 | + info!("IPC Switch: initiate_transfer succeeded, returning response to CLI"); |
| 2088 | + IpcResponse::Transferred { to_machine: machine_name } |
| 2099 | 2089 | } |
| 2100 | | - } else { |
| 2101 | | - // Get cursor position (use center of total screen) |
| 2102 | | - let cursor_pos = hypr_client.cursor_pos().await |
| 2103 | | - .map(|c| (c.x, c.y)) |
| 2104 | | - .unwrap_or(((screen_min_x + screen_max_x) / 2, (screen_min_y + screen_max_y) / 2)); |
| 2105 | | - |
| 2106 | | - // Initiate transfer (CLI-initiated, not keyboard) |
| 2107 | | - info!("IPC Switch: calling initiate_transfer"); |
| 2108 | | - match transfer_manager.initiate_transfer(dir, cursor_pos, screen_min_x, screen_min_y, screen_max_x, screen_max_y, false).await { |
| 2109 | | - Ok(()) => { |
| 2110 | | - let machine_name = config.machines.neighbors |
| 2111 | | - .iter() |
| 2112 | | - .find(|n| n.direction == dir) |
| 2113 | | - .map(|n| n.name.clone()) |
| 2114 | | - .unwrap_or_else(|| format!("{:?}", dir)); |
| 2115 | | - info!("IPC Switch: initiate_transfer succeeded, returning response to CLI"); |
| 2116 | | - IpcResponse::Transferred { to_machine: machine_name } |
| 2117 | | - } |
| 2118 | | - Err(e) => IpcResponse::Error { |
| 2119 | | - message: format!("Transfer failed: {}", e), |
| 2120 | | - } |
| 2090 | + Err(e) => IpcResponse::Error { |
| 2091 | + message: format!("Transfer failed: {}", e), |
| 2121 | 2092 | } |
| 2122 | 2093 | } |
| 2123 | 2094 | } else { |