From b1d69a552cdcc7370c4befd42ef2111c8b367c46 Mon Sep 17 00:00:00 2001 From: srdusr <99972264+srdusr@users.noreply.github.com> Date: Tue, 11 Feb 2025 14:00:00 +0200 Subject: Add temporary diagnostics for two live-reproduced bugs 1. A popup's xdg_popup.grab (Firefox's own right-click menu, concretely) receiving zero pointer input at all - no hover highlight, no click effect, not even dismiss-on-miss - logs whether grab_popup actually succeeds, since a silent failure there would explain exactly this. 2. srd dispatch activate_workspace returning {"ok":true} without ever changing the current workspace, confirmed via a raw socket request bypassing the CLI entirely. switch_workspace's own logic reads correct; logs its actual inputs/state to find out why the real process disagrees with it. Remove once both are resolved. --- crates/core/src/manager/workspaces.rs | 9 ++++++++- crates/wayland/src/protocols.rs | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/crates/core/src/manager/workspaces.rs b/crates/core/src/manager/workspaces.rs index 6ffb21b..ddc8341 100644 --- a/crates/core/src/manager/workspaces.rs +++ b/crates/core/src/manager/workspaces.rs @@ -50,7 +50,14 @@ impl WindowManager { /// doesn't need its own separate bookkeeping. pub fn switch_workspace(&mut self, id: WorkspaceId) { let target = if self.auto_back_and_forth && id == self.current_workspace { self.previous_workspace } else { id }; - if self.workspaces.iter().any(|w| w.id == target) && target != self.current_workspace { + let exists = self.workspaces.iter().any(|w| w.id == target); + log::warn!( + "SWITCH-WS-DIAG requested_id={id} auto_back_and_forth={} current={} previous={} target={target} exists={exists}", + self.auto_back_and_forth, + self.current_workspace, + self.previous_workspace + ); + if exists && target != self.current_workspace { self.previous_workspace = self.current_workspace; self.current_workspace = target; } diff --git a/crates/wayland/src/protocols.rs b/crates/wayland/src/protocols.rs index 0b0eea2..391f665 100644 --- a/crates/wayland/src/protocols.rs +++ b/crates/wayland/src/protocols.rs @@ -346,9 +346,19 @@ impl XdgShellHandler for CompState { /// `resize_request` already ignore the same parameter. fn grab(&mut self, surface: PopupSurface, _seat: wl_seat::WlSeat, serial: Serial) { let popup = PopupKind::Xdg(surface); - let Ok(root) = find_popup_root_surface(&popup) else { return }; + let Ok(root) = find_popup_root_surface(&popup) else { + log::warn!("POPUP-GRAB-DIAG find_popup_root_surface failed"); + return; + }; let seat = self.seat.clone(); - let Ok(grab) = self.popups.grab_popup(root, popup, &seat, serial) else { return }; + let grab = match self.popups.grab_popup(root, popup, &seat, serial) { + Ok(g) => g, + Err(e) => { + log::warn!("POPUP-GRAB-DIAG grab_popup failed: {e:?}"); + return; + } + }; + log::warn!("POPUP-GRAB-DIAG grab established, has_pointer={} has_keyboard={}", seat.get_pointer().is_some(), seat.get_keyboard().is_some()); if let Some(keyboard) = seat.get_keyboard() { keyboard.set_grab(self, PopupKeyboardGrab::new(&grab), serial); } -- cgit v1.2.3