@@ -44,7 +44,10 @@ use winapi::{
4444use self :: runner:: { ELRShared , EventLoopRunnerShared } ;
4545use crate :: {
4646 dpi:: { PhysicalPosition , PhysicalSize } ,
47- event:: { DeviceEvent , Event , Force , KeyboardInput , Touch , TouchPhase , WindowEvent } ,
47+ event:: {
48+ DeviceEvent , Event , Force , KeyboardInput , ScaleFactorChangedState , Touch , TouchPhase ,
49+ WindowEvent ,
50+ } ,
4851 event_loop:: { ControlFlow , EventLoopClosed , EventLoopWindowTarget as RootELW } ,
4952 platform_impl:: platform:: {
5053 dark_mode:: try_dark_mode,
@@ -100,7 +103,7 @@ pub(crate) struct SubclassInput<T: 'static> {
100103}
101104
102105impl < T > SubclassInput < T > {
103- unsafe fn send_event ( & self , event : Event < ' _ , T > ) {
106+ unsafe fn send_event ( & self , event : Event < T > ) {
104107 self . event_loop_runner . send_event ( event) ;
105108 }
106109}
@@ -112,7 +115,7 @@ struct ThreadMsgTargetSubclassInput<T: 'static> {
112115}
113116
114117impl < T > ThreadMsgTargetSubclassInput < T > {
115- unsafe fn send_event ( & self , event : Event < ' _ , T > ) {
118+ unsafe fn send_event ( & self , event : Event < T > ) {
116119 self . event_loop_runner . send_event ( event) ;
117120 }
118121}
@@ -187,15 +190,15 @@ impl<T: 'static> EventLoop<T> {
187190
188191 pub fn run < F > ( mut self , event_handler : F ) -> !
189192 where
190- F : ' static + FnMut ( Event < ' _ , T > , & RootELW < T > , & mut ControlFlow ) ,
193+ F : ' static + FnMut ( Event < T > , & RootELW < T > , & mut ControlFlow ) ,
191194 {
192195 self . run_return ( event_handler) ;
193196 :: std:: process:: exit ( 0 ) ;
194197 }
195198
196199 pub fn run_return < F > ( & mut self , mut event_handler : F )
197200 where
198- F : FnMut ( Event < ' _ , T > , & RootELW < T > , & mut ControlFlow ) ,
201+ F : FnMut ( Event < T > , & RootELW < T > , & mut ControlFlow ) ,
199202 {
200203 let event_loop_windows_ref = & self . window_target ;
201204
@@ -1512,7 +1515,7 @@ unsafe extern "system" fn public_window_callback<T: 'static>(
15121515
15131516 // `allow_resize` prevents us from re-applying DPI adjustment to the restored size after
15141517 // exiting fullscreen (the restored size is already DPI adjusted).
1515- let mut new_physical_inner_size = match allow_resize {
1518+ let new_physical_inner_size = match allow_resize {
15161519 // We calculate our own size because the default suggested rect doesn't do a great job
15171520 // of preserving the window's logical size.
15181521 true => old_physical_inner_size
@@ -1521,14 +1524,18 @@ unsafe extern "system" fn public_window_callback<T: 'static>(
15211524 false => old_physical_inner_size,
15221525 } ;
15231526
1527+ let cell = std:: sync:: Arc :: new ( std:: sync:: Mutex :: new ( new_physical_inner_size) ) ;
1528+
15241529 let _ = subclass_input. send_event ( Event :: WindowEvent {
15251530 window_id : RootWindowId ( WindowId ( window) ) ,
1526- event : ScaleFactorChanged {
1531+ event : ScaleFactorChanged ( ScaleFactorChangedState {
15271532 scale_factor : new_dpi_factor,
1528- new_inner_size : & mut new_physical_inner_size ,
1529- } ,
1533+ new_inner_size : cell . clone ( ) ,
1534+ } ) ,
15301535 } ) ;
15311536
1537+ let new_physical_inner_size = * std:: ops:: Deref :: deref ( & cell. lock ( ) . unwrap ( ) ) ;
1538+
15321539 // Unset maximized if we're changing the window's size.
15331540 if new_physical_inner_size != old_physical_inner_size {
15341541 WindowState :: set_window_flags ( subclass_input. window_state . lock ( ) , window, |f| {
0 commit comments