From 367066381d92c5435ed7aa929d9780777978585d Mon Sep 17 00:00:00 2001 From: Nova Date: Mon, 1 May 2023 12:59:49 -0400 Subject: [PATCH] better panel item startup settings order --- src/wayland/panel_item.rs | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/wayland/panel_item.rs b/src/wayland/panel_item.rs index 1edd383..f6e074d 100644 --- a/src/wayland/panel_item.rs +++ b/src/wayland/panel_item.rs @@ -154,7 +154,6 @@ pub enum RecommendedState { pub struct PanelItem { pub uid: String, node: Weak, - client_credentials: Option, cursor: Mutex>>, pub seat_data: Arc, toplevel: WlWeak, @@ -170,6 +169,11 @@ impl PanelItem { seat_data: Arc, ) -> (Arc, Arc) { debug!(?toplevel, ?client_credentials, "Create panel item"); + + let startup_settings = client_credentials + .and_then(|cred| get_env(cred.pid).ok()) + .and_then(|env| startup_settings(&env)); + let uid = nanoid!(); let node = Arc::new(Node::create( &INTERNAL_CLIENT, @@ -181,7 +185,6 @@ impl PanelItem { let panel_item = Arc::new(PanelItem { uid: uid.clone(), node: Arc::downgrade(&node), - client_credentials, cursor: Mutex::new(None), seat_data, toplevel: toplevel.downgrade(), @@ -190,6 +193,12 @@ impl PanelItem { keyboard_grab: Mutex::new(None), }); + if let Some(startup_settings) = &startup_settings { + spatial.set_local_transform( + spatial.global_transform().inverse() * startup_settings.transform, + ); + } + panel_item .seat_data .new_surface(&wl_surface, Arc::downgrade(&panel_item)); @@ -200,6 +209,16 @@ impl PanelItem { &ITEM_TYPE_INFO_PANEL, ItemType::Panel(panel_item.clone()), ); + + if let Some(startup_settings) = &startup_settings { + if let Some(acceptor) = startup_settings + .acceptors + .get(&*ITEM_TYPE_INFO_PANEL) + .and_then(|acc| acc.upgrade()) + { + items::capture(&item, &acceptor); + } + } node.add_local_signal( "apply_surface_material", PanelItem::apply_surface_material_flex, @@ -223,21 +242,6 @@ impl PanelItem { ); node.add_local_signal("keyboard_key", PanelItem::keyboard_key_flex); - if let Some(startup_settings) = panel_item - .client_credentials - .and_then(|cred| get_env(cred.pid).ok()) - .and_then(|env| startup_settings(&env)) - { - spatial.set_local_transform(startup_settings.transform); - if let Some(acceptor) = startup_settings - .acceptors - .get(&*ITEM_TYPE_INFO_PANEL) - .and_then(|acc| acc.upgrade()) - { - items::capture(&item, &acceptor); - } - } - (node, panel_item) }