fix: panel items not dropping on toplevel close
This commit is contained in:
@@ -201,10 +201,6 @@ impl<B: Backend + ?Sized> PanelItem<B> {
|
|||||||
ItemType::Panel(generic_panel_item),
|
ItemType::Panel(generic_panel_item),
|
||||||
);
|
);
|
||||||
|
|
||||||
// panel_item
|
|
||||||
// .seat_data
|
|
||||||
// .new_surface(&wl_surface, Arc::downgrade(&panel_item));
|
|
||||||
|
|
||||||
if let Some(startup_settings) = &startup_settings {
|
if let Some(startup_settings) = &startup_settings {
|
||||||
if let Some(acceptor) = startup_settings
|
if let Some(acceptor) = startup_settings
|
||||||
.acceptors
|
.acceptors
|
||||||
@@ -413,7 +409,6 @@ impl<B: Backend + ?Sized> PanelItem<B> {
|
|||||||
panel_item.configure_toplevel(info.size, info.states, info.bounds);
|
panel_item.configure_toplevel(info.size, info.states, info.bounds);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_toplevel_capabilities_flex(
|
fn set_toplevel_capabilities_flex(
|
||||||
node: &Node,
|
node: &Node,
|
||||||
_calling_client: Arc<Client>,
|
_calling_client: Arc<Client>,
|
||||||
@@ -434,7 +429,6 @@ impl<B: Backend + ?Sized> PanelItem<B> {
|
|||||||
let Ok(data) = self.backend.serialize_toplevel() else {return};
|
let Ok(data) = self.backend.serialize_toplevel() else {return};
|
||||||
let _ = node.send_remote_signal("commit_toplevel", data);
|
let _ = node.send_remote_signal("commit_toplevel", data);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn recommend_toplevel_state(&self, state: RecommendedState) {
|
pub fn recommend_toplevel_state(&self, state: RecommendedState) {
|
||||||
let Some(node) = self.node.upgrade() else {return};
|
let Some(node) = self.node.upgrade() else {return};
|
||||||
let data = serialize(state).unwrap();
|
let data = serialize(state).unwrap();
|
||||||
@@ -442,6 +436,11 @@ impl<B: Backend + ?Sized> PanelItem<B> {
|
|||||||
|
|
||||||
let _ = node.send_remote_signal("recommend_toplevel_state", data);
|
let _ = node.send_remote_signal("recommend_toplevel_state", data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn drop_toplevel(&self) {
|
||||||
|
let Some(node) = self.node.upgrade() else {return};
|
||||||
|
node.destroy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
impl<B: Backend + ?Sized> PanelItemTrait for PanelItem<B> {
|
impl<B: Backend + ?Sized> PanelItemTrait for PanelItem<B> {
|
||||||
fn uid(&self) -> &str {
|
fn uid(&self) -> &str {
|
||||||
@@ -477,11 +476,9 @@ impl<B: Backend + ?Sized> Backend for PanelItem<B> {
|
|||||||
fn pointer_motion(&self, surface: &SurfaceID, position: Vector2<f32>) {
|
fn pointer_motion(&self, surface: &SurfaceID, position: Vector2<f32>) {
|
||||||
self.backend.pointer_motion(surface, position)
|
self.backend.pointer_motion(surface, position)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pointer_button(&self, surface: &SurfaceID, button: u32, pressed: bool) {
|
fn pointer_button(&self, surface: &SurfaceID, button: u32, pressed: bool) {
|
||||||
self.backend.pointer_button(surface, button, pressed)
|
self.backend.pointer_button(surface, button, pressed)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pointer_scroll(
|
fn pointer_scroll(
|
||||||
&self,
|
&self,
|
||||||
surface: &SurfaceID,
|
surface: &SurfaceID,
|
||||||
@@ -495,7 +492,6 @@ impl<B: Backend + ?Sized> Backend for PanelItem<B> {
|
|||||||
fn keyboard_set_keymap(&self, keymap: &str) -> Result<()> {
|
fn keyboard_set_keymap(&self, keymap: &str) -> Result<()> {
|
||||||
self.backend.keyboard_set_keymap(keymap)
|
self.backend.keyboard_set_keymap(keymap)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn keyboard_key(&self, surface: &SurfaceID, key: u32, state: bool) {
|
fn keyboard_key(&self, surface: &SurfaceID, key: u32, state: bool) {
|
||||||
self.backend.keyboard_key(surface, key, state)
|
self.backend.keyboard_key(surface, key, state)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -908,6 +908,8 @@ impl XDGBackend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn on_drop(&self) {
|
pub fn on_drop(&self) {
|
||||||
|
let Some(toplevel_popup) = self.toplevel_xdg_surface().and_then(|s| XdgSurfaceData::get(&s).and_then(|s| s.lock().panel_item.upgrade())) else {return};
|
||||||
|
toplevel_popup.drop_toplevel();
|
||||||
let Some(toplevel) = self.toplevel_wl_surface() else {return};
|
let Some(toplevel) = self.toplevel_wl_surface() else {return};
|
||||||
self.seat.drop_surface(&toplevel);
|
self.seat.drop_surface(&toplevel);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user