diff --git a/Cargo.lock b/Cargo.lock index da6d425..e533ab9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -469,9 +469,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.101" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac367972e516d45567c7eafc73d24e1c193dcf200a8d94e9db7b3d38b349572d" +checksum = "74b6a57f98764a267ff415d50a25e6e166f3831a5071af4995296ea97d210490" [[package]] name = "cesu8" @@ -485,12 +485,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "cfg_aliases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" - [[package]] name = "cfg_aliases" version = "0.2.1" @@ -509,9 +503,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.7" +version = "4.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" +checksum = "84b3edb18336f4df585bc9aa31dd99c036dfa5dc5e9a2939a722a188f3a8970d" dependencies = [ "clap_builder", "clap_derive", @@ -519,9 +513,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.7" +version = "4.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" +checksum = "c1c09dd5ada6c6c78075d6fd0da3f90d8080651e2d6cc8eb2f1aaa4034ced708" dependencies = [ "anstream", "anstyle", @@ -531,9 +525,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.5" +version = "4.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" +checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" dependencies = [ "heck", "proc-macro2", @@ -1382,9 +1376,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "loom" @@ -1572,19 +1566,6 @@ dependencies = [ "memoffset", ] -[[package]] -name = "nix" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" -dependencies = [ - "bitflags 2.6.0", - "cfg-if", - "cfg_aliases 0.1.1", - "libc", - "memoffset", -] - [[package]] name = "nix" version = "0.29.0" @@ -1593,8 +1574,9 @@ checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ "bitflags 2.6.0", "cfg-if", - "cfg_aliases 0.2.1", + "cfg_aliases", "libc", + "memoffset", ] [[package]] @@ -2205,9 +2187,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.118" +version = "1.0.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d947f6b3163d8857ea16c4fa0dd4840d52f3041039a85decd46867eb1abef2e4" +checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" dependencies = [ "itoa", "ryu", @@ -2303,7 +2285,7 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "smithay" version = "0.3.0" -source = "git+https://github.com/smithay/smithay.git#9ff96ea35fe5a524819e091c0d0e98f075159233" +source = "git+https://github.com/smithay/smithay.git#3731734d5a0409186a0475238ffe46e2835cee6d" dependencies = [ "appendlist", "bitflags 2.6.0", @@ -3304,9 +3286,9 @@ checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" [[package]] name = "zbus" -version = "4.3.0" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23915fcb26e7a9a9dc05fd93a9870d336d6d032cd7e8cebf1c5c37666489fdd5" +checksum = "851238c133804e0aa888edf4a0229481c753544ca12a60fd1c3230c8a500fe40" dependencies = [ "async-broadcast", "async-executor", @@ -3324,7 +3306,7 @@ dependencies = [ "futures-sink", "futures-util", "hex", - "nix 0.28.0", + "nix 0.29.0", "ordered-stream", "rand", "serde", @@ -3343,9 +3325,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "4.3.0" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bcca0b586d2f8589da32347b4784ba424c4891ed86aa5b50d5e88f6b2c4f5d" +checksum = "8d5a3f12c20bd473be3194af6b49d50d7bb804ef3192dc70eddedb26b85d9da7" dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", @@ -3367,9 +3349,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "4.1.1" +version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa6d31a02fbfb602bfde791de7fedeb9c2c18115b3d00f3a36e489f46ffbbc7" +checksum = "1724a2b330760dc7d2a8402d841119dc869ef120b139d29862d6980e9c75bfc9" dependencies = [ "endi", "enumflags2", @@ -3380,9 +3362,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "4.1.1" +version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642bf1b6b6d527988b3e8193d20969d53700a36eac734d21ae6639db168701c8" +checksum = "55025a7a518ad14518fb243559c058a2e5b848b015e31f1d90414f36e3317859" dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", diff --git a/src/wayland/xdg_shell.rs b/src/wayland/xdg_shell.rs index f88d077..443ae49 100644 --- a/src/wayland/xdg_shell.rs +++ b/src/wayland/xdg_shell.rs @@ -31,8 +31,8 @@ use smithay::{ wayland::{ compositor, shell::xdg::{ - Configure, PopupSurface, PositionerState, ShellClient, SurfaceCachedState, - ToplevelSurface, XdgShellHandler, XdgShellState, XdgToplevelSurfaceData, + PopupSurface, PositionerState, ShellClient, SurfaceCachedState, ToplevelSurface, + XdgShellHandler, XdgShellState, XdgToplevelSurfaceData, }, }, }; @@ -87,6 +87,7 @@ impl XdgShellHandler for WaylandState { }); toplevel.send_configure(); utils::insert_data(toplevel.wl_surface(), SurfaceId::Toplevel); + utils::insert_data(toplevel.wl_surface(), Mutex::new(Vector2::from([0_u32; 2]))); CoreSurface::add_to( toplevel.wl_surface(), { @@ -118,10 +119,19 @@ impl XdgShellHandler for WaylandState { else { return; }; + let Some(old_size) = + utils::get_data::>>(toplevel.wl_surface()) + else { + return; + }; + let mut old_size = old_size.lock(); let Some(size) = core_surface.size() else { return; }; - panel_item.toplevel_size_changed(size); + if *old_size != size { + panel_item.toplevel_size_changed(size); + *old_size = size; + } } }, ); @@ -191,9 +201,7 @@ impl XdgShellHandler for WaylandState { let Some(panel_item) = surface_panel_item(&parent) else { return; }; - if popup.send_configure().is_err() { - return; - } + let _ = popup.send_configure(); utils::insert_data(popup.wl_surface(), SurfaceId::Child(uid)); utils::insert_data(popup.wl_surface(), Arc::downgrade(&panel_item)); CoreSurface::add_to( @@ -307,20 +315,6 @@ impl XdgShellHandler for WaylandState { }; panel_item.toplevel_fullscreen_active(true); } - - fn ack_configure(&mut self, surface: WlSurface, configure: Configure) { - let Some(panel_item) = surface_panel_item(&surface) else { - return; - }; - match configure { - Configure::Toplevel(t) => { - if let Some(size) = t.state.size { - panel_item.toplevel_size_changed([size.w as u32, size.h as u32].into()) - } - } - Configure::Popup(_p) => (), - } - } } delegate_xdg_shell!(WaylandState); @@ -357,7 +351,8 @@ impl XdgBackend { self.popups.lock().insert(id, (popup, positioner)); - panel_item.create_child(id, &self.child_data(id).unwrap()); + let child_data = self.child_data(id).unwrap(); + panel_item.create_child(id, &child_data); } pub fn reposition_popup(&self, id: u64, _popup: PopupSurface, positioner: PositionerState) { let mut popups = self.popups.lock(); @@ -381,9 +376,13 @@ impl XdgBackend { fn child_data(&self, id: u64) -> Option { let (popup, positioner) = self.popups.lock().get(&id)?.clone(); + let parent_surface = popup.get_parent_surface()?; + let parent = utils::get_data::(&parent_surface)? + .as_ref() + .clone(); Some(ChildInfo { id, - parent: (*utils::get_data::(&popup.get_parent_surface()?)?).clone(), + parent, geometry: positioner.get_geometry().into(), }) } @@ -546,7 +545,9 @@ impl Backend for XdgBackend { let Some(toplevel) = self.toplevel.lock().clone() else { return; }; - toplevel.with_pending_state(|s| s.size = Some((size.x as i32, size.y as i32).into())); + toplevel.with_pending_state(|s| { + s.size = Some((size.x.max(16) as i32, size.y.max(16) as i32).into()) + }); toplevel.send_configure(); } fn set_toplevel_focused_visuals(&self, focused: bool) {