@@ -376,7 +376,6 @@ impl<P: Program + Send + 'static> IcedElement<P> {
376376 for ( _buffer, ref mut old_primitives) in internal. buffers . values_mut ( ) {
377377 * old_primitives = None ;
378378 }
379- internal. update ( true ) ;
380379 }
381380
382381 pub fn current_size ( & self ) -> Size < i32 , Logical > {
@@ -405,13 +404,12 @@ impl<P: Program + Send + 'static + Clone> IcedElement<P> {
405404
406405impl < P : Program + Send + ' static > IcedElementInternal < P > {
407406 #[ profiling:: function]
408- fn update ( & mut self , mut force : bool ) {
407+ fn update ( & mut self , force : bool ) {
409408 while let Ok ( Some ( message) ) = self . rx . try_recv ( ) {
410409 self . state . queue_message ( message) ;
411- force = true ;
412410 }
413411
414- if !force {
412+ if self . state . is_queue_empty ( ) && !force {
415413 return ;
416414 }
417415
@@ -469,7 +467,7 @@ impl<P: Program + Send + 'static> PointerTarget<crate::state::State> for IcedEle
469467 // TODO: Update iced widgets to handle touch using event position, not cursor_pos
470468 internal. cursor_pos = Some ( event_location) ;
471469 * internal. last_seat . lock ( ) . unwrap ( ) = Some ( ( seat. clone ( ) , event. serial ) ) ;
472- internal. update ( true ) ;
470+ internal. update ( false ) ;
473471 }
474472
475473 fn motion (
@@ -486,7 +484,7 @@ impl<P: Program + Send + 'static> PointerTarget<crate::state::State> for IcedEle
486484 . queue_event ( Event :: Mouse ( MouseEvent :: CursorMoved { position } ) ) ;
487485 internal. cursor_pos = Some ( event_location) ;
488486 * internal. last_seat . lock ( ) . unwrap ( ) = Some ( ( seat. clone ( ) , event. serial ) ) ;
489- internal. update ( true ) ;
487+ internal. update ( false ) ;
490488 }
491489
492490 fn relative_motion (
@@ -515,7 +513,7 @@ impl<P: Program + Send + 'static> PointerTarget<crate::state::State> for IcedEle
515513 ButtonState :: Released => MouseEvent :: ButtonReleased ( button) ,
516514 } ) ) ;
517515 * internal. last_seat . lock ( ) . unwrap ( ) = Some ( ( seat. clone ( ) , event. serial ) ) ;
518- internal. update ( true ) ;
516+ internal. update ( false ) ;
519517 }
520518
521519 fn axis (
@@ -540,7 +538,7 @@ impl<P: Program + Send + 'static> PointerTarget<crate::state::State> for IcedEle
540538 }
541539 } ,
542540 } ) ) ;
543- internal. update ( true ) ;
541+ internal. update ( false ) ;
544542 }
545543
546544 fn frame ( & self , _seat : & Seat < crate :: state:: State > , _data : & mut crate :: state:: State ) { }
@@ -556,7 +554,7 @@ impl<P: Program + Send + 'static> PointerTarget<crate::state::State> for IcedEle
556554 internal
557555 . state
558556 . queue_event ( Event :: Mouse ( MouseEvent :: CursorLeft ) ) ;
559- internal. update ( true ) ;
557+ internal. update ( false ) ;
560558 }
561559
562560 fn gesture_swipe_begin (
@@ -635,7 +633,7 @@ impl<P: Program + Send + 'static> TouchTarget<crate::state::State> for IcedEleme
635633 internal. touch_map . insert ( id, position) ;
636634 internal. cursor_pos = Some ( event_location) ;
637635 * internal. last_seat . lock ( ) . unwrap ( ) = Some ( ( seat. clone ( ) , seq) ) ;
638- let _ = internal. update ( true ) ;
636+ let _ = internal. update ( false ) ;
639637 }
640638
641639 fn up (
@@ -652,7 +650,7 @@ impl<P: Program + Send + 'static> TouchTarget<crate::state::State> for IcedEleme
652650 internal
653651 . state
654652 . queue_event ( Event :: Touch ( TouchEvent :: FingerLifted { id, position } ) ) ;
655- let _ = internal. update ( true ) ;
653+ let _ = internal. update ( false ) ;
656654 }
657655 }
658656
@@ -673,7 +671,7 @@ impl<P: Program + Send + 'static> TouchTarget<crate::state::State> for IcedEleme
673671 . queue_event ( Event :: Touch ( TouchEvent :: FingerMoved { id, position } ) ) ;
674672 internal. touch_map . insert ( id, position) ;
675673 internal. cursor_pos = Some ( event_location) ;
676- let _ = internal. update ( true ) ;
674+ let _ = internal. update ( false ) ;
677675 }
678676
679677 fn frame (
@@ -696,7 +694,7 @@ impl<P: Program + Send + 'static> TouchTarget<crate::state::State> for IcedEleme
696694 . state
697695 . queue_event ( Event :: Touch ( TouchEvent :: FingerLost { id, position } ) ) ;
698696 }
699- let _ = internal. update ( true ) ;
697+ let _ = internal. update ( false ) ;
700698 }
701699
702700 fn shape (
@@ -774,7 +772,7 @@ impl<P: Program + Send + 'static> KeyboardTarget<crate::state::State> for IcedEl
774772 internal
775773 . state
776774 . queue_event ( Event :: Keyboard ( KeyboardEvent :: ModifiersChanged ( mods) ) ) ;
777- let _ = internal. update ( true ) ;
775+ let _ = internal. update ( false ) ;
778776 }
779777}
780778
@@ -807,7 +805,7 @@ impl<P: Program + Send + 'static> SpaceElement for IcedElement<P> {
807805 } else {
808806 WindowEvent :: Unfocused
809807 } ) ) ;
810- let _ = internal. update ( true ) ; // TODO
808+ let _ = internal. update ( false ) ;
811809 }
812810
813811 fn output_enter ( & self , output : & Output , _overlap : Rectangle < i32 , Logical > ) {
@@ -881,7 +879,7 @@ impl<P: Program + Send + 'static> SpaceElement for IcedElement<P> {
881879 ) ,
882880 ) ;
883881 }
884- internal. update ( true ) ;
882+ internal. update ( false ) ;
885883 }
886884}
887885
0 commit comments