srdusr
aboutsummaryrefslogtreecommitdiffstats
path: root/crates
diff options
context:
space:
mode:
authorsrdusr <[email protected]>2025-02-11 14:00:00 +0200
committersrdusr <[email protected]>2025-02-11 14:00:00 +0200
commitb1d69a552cdcc7370c4befd42ef2111c8b367c46 (patch)
tree777c30cae47ab7f2d417c3132c8273fdf2bee3fc /crates
parentb1609928eeea54578cd0cd18935110260cb23a11 (diff)
downloadsrdwm-b1d69a552cdcc7370c4befd42ef2111c8b367c46.tar.gz
srdwm-b1d69a552cdcc7370c4befd42ef2111c8b367c46.zip
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.
Diffstat (limited to 'crates')
-rw-r--r--crates/core/src/manager/workspaces.rs9
-rw-r--r--crates/wayland/src/protocols.rs14
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);
}