From 0e475b008f8d0c9e9033fcee0dc405e3b9970aea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Thu, 20 Jan 2022 13:43:45 +0700 Subject: [PATCH] Invalidate widget tree in `Responsive` after a `window::Event::Resized` This is a pessimistic approach! Ideally, we should be able to recreate only the contents of the `Responsive` widget in `Widget::layout`, but given `view` is impure we have to trigger a brand new `view` call. The persistent widget tree should make this easier. --- lazy/src/responsive.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lazy/src/responsive.rs b/lazy/src/responsive.rs index 58d151ec01..35ad69747f 100644 --- a/lazy/src/responsive.rs +++ b/lazy/src/responsive.rs @@ -6,6 +6,7 @@ use iced_native::layout::{self, Layout}; use iced_native::mouse; use iced_native::overlay; use iced_native::renderer; +use iced_native::window; use iced_native::{ Clipboard, Element, Hasher, Length, Point, Rectangle, Shell, Size, Widget, }; @@ -100,7 +101,10 @@ where ) -> event::Status { let mut internal = self.0.borrow_mut(); - if internal.state.last_size != Some(internal.state.last_layout.size()) { + if matches!(event, Event::Window(window::Event::Resized { .. })) + || internal.state.last_size + != Some(internal.state.last_layout.size()) + { shell.invalidate_widgets(); }