Skip to content

Commit 24b173e

Browse files
committed
Don't send empty data by KWin watcher
1 parent bf04ffd commit 24b173e

1 file changed

Lines changed: 26 additions & 16 deletions

File tree

watchers/src/watchers/kwin_window.rs

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -190,14 +190,20 @@ impl Drop for KWinScript {
190190

191191
async fn send_active_window(
192192
client: &ReportClient,
193-
active_window: &Arc<Mutex<ActiveWindow>>,
193+
active_window: &Arc<Mutex<Option<ActiveWindow>>>,
194194
) -> anyhow::Result<()> {
195195
let active_window = active_window.lock().await;
196196

197-
client
198-
.send_active_window(&active_window.resource_class, &active_window.caption)
199-
.await
200-
.with_context(|| "Failed to send heartbeat for active window")
197+
if let Some(active_window) = active_window.as_ref() {
198+
client
199+
.send_active_window(&active_window.resource_class, &active_window.caption)
200+
.await
201+
.with_context(|| "Failed to send heartbeat for active window")
202+
} else {
203+
// This always happens on the first run, since the active window information is known only after KWin script is triggered.
204+
info!("No active window information available yet until window is focused again or changed");
205+
Ok(())
206+
}
201207
}
202208

203209
struct ActiveWindow {
@@ -207,7 +213,7 @@ struct ActiveWindow {
207213
}
208214

209215
struct ActiveWindowInterface {
210-
active_window: Arc<Mutex<ActiveWindow>>,
216+
active_window: Arc<Mutex<Option<ActiveWindow>>>,
211217
}
212218

213219
#[interface(name = "com._2e3s.Awatcher")]
@@ -220,14 +226,22 @@ impl ActiveWindowInterface {
220226
) {
221227
debug!("Active window class: \"{resource_class}\", name: \"{resource_name}\", caption: \"{caption}\"");
222228
let mut active_window = self.active_window.lock().await;
223-
active_window.caption = caption;
224-
active_window.resource_class = resource_class;
225-
active_window.resource_name = resource_name;
229+
if let Some(active_window) = active_window.as_mut() {
230+
active_window.caption = caption;
231+
active_window.resource_class = resource_class;
232+
active_window.resource_name = resource_name;
233+
} else {
234+
*active_window = Some(ActiveWindow {
235+
caption,
236+
resource_class,
237+
resource_name,
238+
});
239+
}
226240
}
227241
}
228242

229243
pub struct WindowWatcher {
230-
active_window: Arc<Mutex<ActiveWindow>>,
244+
active_window: Arc<Mutex<Option<ActiveWindow>>>,
231245
// Prolong its lifetime
232246
_kwin_script: KWinScript,
233247
}
@@ -248,12 +262,8 @@ impl Watcher for WindowWatcher {
248262

249263
kwin_script.load().await.unwrap();
250264

251-
let active_window = Arc::new(Mutex::new(ActiveWindow {
252-
caption: String::new(),
253-
resource_name: String::new(),
254-
resource_class: String::new(),
255-
}));
256-
let active_window_interface = ActiveWindowInterface {
265+
let active_window = Arc::new(Mutex::new(None));
266+
let active_window_interface: ActiveWindowInterface = ActiveWindowInterface {
257267
active_window: Arc::clone(&active_window),
258268
};
259269

0 commit comments

Comments
 (0)