From 887574c6b79a8f148b79b45ffee355546463b459 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Mon, 18 Dec 2023 19:24:10 +0400 Subject: [PATCH] Extract popup_output() --- src/handlers/xdg_shell.rs | 53 +++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/src/handlers/xdg_shell.rs b/src/handlers/xdg_shell.rs index e649f3a92..9ac0d02c8 100644 --- a/src/handlers/xdg_shell.rs +++ b/src/handlers/xdg_shell.rs @@ -303,31 +303,12 @@ impl State { .initial_configure_sent }); if !initial_configure_sent { - if let Ok(toplevel) = find_popup_root_surface(&PopupKind::Xdg(popup.clone())) { - let output = self - .niri - .layout - .find_window_and_output(&toplevel) - .map(|(_, output)| output) - .or_else(|| { - self.niri - .layout - .outputs() - .find(|o| { - let map = layer_map_for_output(o); - map.layer_for_surface(&toplevel, WindowSurfaceType::TOPLEVEL) - .is_some() - }) - .cloned() - }); - - if let Some(output) = output { - let scale = output.current_scale().integer_scale(); - let transform = output.current_transform(); - with_states(surface, |data| { - send_surface_state(surface, data, scale, transform); - }); - } + if let Some(output) = self.popup_output(&PopupKind::Xdg(popup.clone())) { + let scale = output.current_scale().integer_scale(); + let transform = output.current_transform(); + with_states(surface, |data| { + send_surface_state(surface, data, scale, transform); + }); } if let Err(err) = popup.send_configure() { @@ -377,4 +358,26 @@ impl State { unconstrain_popup(target, popup) } + + pub fn popup_output(&self, popup: &PopupKind) -> Option { + let Ok(root) = find_popup_root_surface(popup) else { + return None; + }; + + self.niri + .layout + .find_window_and_output(&root) + .map(|(_, output)| output) + .or_else(|| { + self.niri + .layout + .outputs() + .find(|o| { + let map = layer_map_for_output(o); + map.layer_for_surface(&root, WindowSurfaceType::TOPLEVEL) + .is_some() + }) + .cloned() + }) + } }