diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index 6aa69af70d6..73f71704f40 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -835,7 +835,7 @@ impl IOCompositor { } } - pub fn on_resize_window_event(&mut self) { + pub fn on_resize_window_event(&mut self) -> bool { debug!("compositor resize requested"); let old_coords = self.embedder_coordinates; @@ -847,11 +847,12 @@ impl IOCompositor { } if self.embedder_coordinates.viewport == old_coords.viewport { - return; + return false; } self.send_window_size(WindowSizeType::Resize); self.composite_if_necessary(CompositingReason::Resize); + return true; } pub fn on_mouse_window_event_class(&mut self, mouse_window_event: MouseWindowEvent) { diff --git a/components/servo/lib.rs b/components/servo/lib.rs index b6a0499f15d..018446457be 100644 --- a/components/servo/lib.rs +++ b/components/servo/lib.rs @@ -549,7 +549,7 @@ where } } - fn handle_window_event(&mut self, event: WindowEvent) { + fn handle_window_event(&mut self, event: WindowEvent) -> bool { match event { WindowEvent::Idle => {}, @@ -558,7 +558,7 @@ where }, WindowEvent::Resize => { - self.compositor.on_resize_window_event(); + return self.compositor.on_resize_window_event(); }, WindowEvent::AllowNavigationResponse(pipeline_id, allowed) => { @@ -745,6 +745,7 @@ where } }, } + return false; } fn receive_messages(&mut self) { @@ -776,18 +777,20 @@ where ::std::mem::replace(&mut self.embedder_events, Vec::new()) } - pub fn handle_events(&mut self, events: Vec) { + pub fn handle_events(&mut self, events: Vec) -> bool { if self.compositor.receive_messages() { self.receive_messages(); } + let mut need_resize = false; for event in events { - self.handle_window_event(event); + need_resize |= self.handle_window_event(event); } if self.compositor.shutdown_state != ShutdownState::FinishedShuttingDown { self.compositor.perform_updates(); } else { self.embedder_events.push((None, EmbedderMsg::Shutdown)); } + need_resize } pub fn repaint_synchronously(&mut self) { diff --git a/ports/winit/app.rs b/ports/winit/app.rs index 3280a3104de..b426662d8aa 100644 --- a/ports/winit/app.rs +++ b/ports/winit/app.rs @@ -204,19 +204,13 @@ impl App { } }); - // FIXME: this could be handled by Servo. We don't need - // a repaint_synchronously function exposed. - let need_resize = app_events.iter().any(|e| match *e { - WindowEvent::Resize => true, - _ => false, - }); - browser.handle_window_events(app_events); let mut servo_events = self.servo.as_mut().unwrap().get_events(); + let mut need_resize = false; loop { browser.handle_servo_events(servo_events); - self.servo.as_mut().unwrap().handle_events(browser.get_events()); + need_resize |= self.servo.as_mut().unwrap().handle_events(browser.get_events()); if browser.shutdown_requested() { return true; }