server: adjust minimum and maximum window sizes to account for decorations
Fixes #271
This commit is contained in:
parent
ae98f974e0
commit
83e4aab4d5
4 changed files with 31 additions and 6 deletions
|
|
@ -854,20 +854,25 @@ impl<S: X11Selection + 'static> InnerServerState<S> {
|
|||
|
||||
let mut win = data.get::<&mut WindowData>().unwrap();
|
||||
|
||||
if win.attrs.size_hints.is_none() || *win.attrs.size_hints.as_ref().unwrap() != hints {
|
||||
if win.attrs.size_hints.is_none_or(|h| h != hints) {
|
||||
debug!("setting {window:?} hints {hints:?}");
|
||||
let mut query = data.query::<(&SurfaceRole, &SurfaceScaleFactor)>();
|
||||
if let Some((SurfaceRole::Toplevel(Some(data)), scale_factor)) = query.get() {
|
||||
let decorations_height = if data.decoration.satellite.is_some() {
|
||||
DecorationsDataSatellite::TITLEBAR_HEIGHT
|
||||
} else {
|
||||
0
|
||||
};
|
||||
if let Some(min_size) = &hints.min_size {
|
||||
data.toplevel.set_min_size(
|
||||
(min_size.width as f64 / scale_factor.0) as i32,
|
||||
(min_size.height as f64 / scale_factor.0) as i32,
|
||||
(min_size.height as f64 / scale_factor.0) as i32 + decorations_height,
|
||||
);
|
||||
}
|
||||
if let Some(max_size) = &hints.max_size {
|
||||
data.toplevel.set_max_size(
|
||||
(max_size.width as f64 / scale_factor.0) as i32,
|
||||
(max_size.height as f64 / scale_factor.0) as i32,
|
||||
(max_size.height as f64 / scale_factor.0) as i32 + decorations_height,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue