Skip to content

Commit

Permalink
On Wayland, fix min/max inner size setting
Browse files Browse the repository at this point in the history
The size is only applied on the next `wl_surface::commit` thus we
must trigger the redraw.
  • Loading branch information
kchibisov authored Jan 31, 2024
1 parent cf5f4de commit 4d4d6e5
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 5 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ Unreleased` header.
- On X11, reload dpi on `_XSETTINGS_SETTINGS` update.
- On X11, fix deadlock when adjusting DPI and resizing at the same time.
- On Wayland, fix `Focused(false)` being send when other seats still have window focused.
- On Wayland, fix `Window::set_{min,max}_inner_size` not always applied.

# 0.29.10

Expand Down
13 changes: 10 additions & 3 deletions src/platform_impl/linux/wayland/window/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,9 @@ impl Window {
self.window_state
.lock()
.unwrap()
.set_min_inner_size(min_size)
.set_min_inner_size(min_size);
// NOTE: Requires commit to be applied.
self.request_redraw();
}

/// Set the maximum inner size for the window.
Expand All @@ -343,7 +345,9 @@ impl Window {
self.window_state
.lock()
.unwrap()
.set_max_inner_size(max_size)
.set_max_inner_size(max_size);
// NOTE: Requires commit to be applied.
self.request_redraw();
}

#[inline]
Expand Down Expand Up @@ -392,7 +396,10 @@ impl Window {

#[inline]
pub fn set_resizable(&self, resizable: bool) {
self.window_state.lock().unwrap().set_resizable(resizable);
if self.window_state.lock().unwrap().set_resizable(resizable) {
// NOTE: Requires commit to be applied.
self.request_redraw();
}
}

#[inline]
Expand Down
8 changes: 6 additions & 2 deletions src/platform_impl/linux/wayland/window/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -504,10 +504,12 @@ impl WindowState {
}

/// Set the resizable state on the window.
///
/// Returns `true` when the state was applied.
#[inline]
pub fn set_resizable(&mut self, resizable: bool) {
pub fn set_resizable(&mut self, resizable: bool) -> bool {
if self.resizable == resizable {
return;
return false;
}

self.resizable = resizable;
Expand All @@ -523,6 +525,8 @@ impl WindowState {
if let Some(frame) = self.frame.as_mut() {
frame.set_resizable(resizable);
}

true
}

/// Whether the window is focused by any seat.
Expand Down

0 comments on commit 4d4d6e5

Please sign in to comment.