@@ -20,6 +20,7 @@ pub struct Dispatcher {
2020pub struct DispatcherMessageHandlers {
2121 animation_message_handler : AnimationMessageHandler ,
2222 app_window_message_handler : AppWindowMessageHandler ,
23+ pub ( crate ) async_message_handler : FutureMessageHandler ,
2324 broadcast_message_handler : BroadcastMessageHandler ,
2425 clipboard_message_handler : ClipboardMessageHandler ,
2526 color_picker_message_handler : ColorPickerMessageHandler ,
@@ -124,6 +125,13 @@ impl Dispatcher {
124125 pub fn handle_message < T : Into < Message > > ( & mut self , message : T , process_after_all_current : bool ) {
125126 let message = message. into ( ) ;
126127
128+ // Drain async results into the queue before processing the new message.
129+ let mut async_results = VecDeque :: new ( ) ;
130+ self . message_handlers . async_message_handler . drain_results ( & mut async_results) ;
131+ if !async_results. is_empty ( ) {
132+ Self :: schedule_execution ( & mut self . message_queues , true , async_results) ;
133+ }
134+
127135 // If we are not maintaining the buffer, simply add to the current queue
128136 Self :: schedule_execution ( & mut self . message_queues , process_after_all_current, [ message] ) ;
129137
@@ -173,6 +181,9 @@ impl Dispatcher {
173181 Message :: AppWindow ( message) => {
174182 self . message_handlers . app_window_message_handler . process_message ( message, & mut queue, ( ) ) ;
175183 }
184+ Message :: Future ( message) => {
185+ self . message_handlers . async_message_handler . process_message ( message, & mut queue, FutureMessageContext { } ) ;
186+ }
176187 Message :: Broadcast ( message) => self . message_handlers . broadcast_message_handler . process_message ( message, & mut queue, ( ) ) ,
177188 Message :: Clipboard ( message) => self . message_handlers . clipboard_message_handler . process_message ( message, & mut queue, ( ) ) ,
178189 Message :: ColorPicker ( message) => self . message_handlers . color_picker_message_handler . process_message ( message, & mut queue, ( ) ) ,
0 commit comments