fix: consider SSD/tab height when calculating last server size
This commit is contained in:
parent
769ca13647
commit
fdf015cbcf
4 changed files with 26 additions and 1 deletions
|
|
@ -408,6 +408,14 @@ impl CosmicMapped {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn last_server_size(&self) -> Option<Size<i32, Logical>> {
|
||||
match &self.element {
|
||||
CosmicMappedInternal::Stack(s) => s.last_server_size(),
|
||||
CosmicMappedInternal::Window(w) => w.last_server_size(),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_geometry(&self, geo: Rectangle<i32, Global>) {
|
||||
match &self.element {
|
||||
CosmicMappedInternal::Stack(s) => s.set_geometry(geo),
|
||||
|
|
|
|||
|
|
@ -566,6 +566,13 @@ impl CosmicStack {
|
|||
.with_program(|p| (*p.geometry.lock().unwrap()).map(|geo| geo.size.as_logical()))
|
||||
}
|
||||
|
||||
pub fn last_server_size(&self) -> Option<Size<i32, Logical>> {
|
||||
let mut size = self.active().last_server_size()?;
|
||||
// if stacked the window doesn't have SSD, instead it has a tab
|
||||
size.h += TAB_HEIGHT;
|
||||
Some(size)
|
||||
}
|
||||
|
||||
pub fn set_geometry(&self, geo: Rectangle<i32, Global>) {
|
||||
self.0.with_program(|p| {
|
||||
let loc = (geo.loc.x, geo.loc.y + TAB_HEIGHT);
|
||||
|
|
|
|||
|
|
@ -230,6 +230,16 @@ impl CosmicWindow {
|
|||
})
|
||||
}
|
||||
|
||||
pub fn last_server_size(&self) -> Option<Size<i32, Logical>> {
|
||||
self.0.with_program(|p| {
|
||||
let mut size = p.window.last_server_size()?;
|
||||
if p.has_ssd(false) {
|
||||
size.h += SSD_HEIGHT;
|
||||
}
|
||||
Some(size)
|
||||
})
|
||||
}
|
||||
|
||||
pub fn set_geometry(&self, geo: Rectangle<i32, Global>) {
|
||||
self.0.with_program(|p| {
|
||||
let ssd_height = if p.has_ssd(true) { SSD_HEIGHT } else { 0 };
|
||||
|
|
|
|||
|
|
@ -686,7 +686,7 @@ impl FloatingLayout {
|
|||
&& let Some(pending_size) = window.pending_size()
|
||||
{
|
||||
mapped_geometry.size = pending_size.as_local();
|
||||
} else if let Some(server_size) = window.active_window().last_server_size() {
|
||||
} else if let Some(server_size) = window.last_server_size() {
|
||||
mapped_geometry.size = server_size.as_local();
|
||||
}
|
||||
*window.last_geometry.lock().unwrap() = Some(mapped_geometry);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue