@@ -319,7 +319,7 @@ export class IgxOverlayService implements OnDestroy {
319319
320320 this . addOutsideClickListener ( info ) ;
321321 this . addResizeHandler ( ) ;
322- this . addCloseOnEscapeListener ( ) ;
322+ this . addCloseOnEscapeListener ( info ) ;
323323
324324 if ( info . settings . modal ) {
325325 const wrapperElement = info . elementRef . nativeElement . parentElement . parentElement ;
@@ -723,10 +723,8 @@ export class IgxOverlayService implements OnDestroy {
723723 }
724724 }
725725
726- private addCloseOnEscapeListener ( ) {
727- // if all overlays minus closing overlays equals one add the handler
728- if ( this . _overlayInfos . length - this . _overlayInfos . filter ( x => x . closeAnimationPlayer
729- && x . closeAnimationPlayer . hasStarted ( ) ) . length === 1 ) {
726+ private addCloseOnEscapeListener ( info : OverlayInfo ) {
727+ if ( info . settings . closeOnEscape && ! this . _keyPressEventListener ) {
730728 this . _keyPressEventListener = fromEvent ( this . _document , 'keydown' ) . pipe (
731729 filter ( ( ev : KeyboardEvent ) => ev . key === 'Escape' || ev . key === 'Esc' )
732730 ) . subscribe ( ( ) => {
@@ -740,11 +738,12 @@ export class IgxOverlayService implements OnDestroy {
740738
741739 private removeCloseOnEscapeListener ( ) {
742740 const closingOverlaysCount =
743- this . _overlayInfos
744- . filter ( o => o . closeAnimationPlayer && o . closeAnimationPlayer . hasStarted ( ) )
745- . length ;
746- if ( this . _overlayInfos . length - closingOverlaysCount === 1 && ! this . _keyPressEventListener . closed ) {
741+ this . _overlayInfos
742+ . filter ( o => o . closeAnimationPlayer && o . closeAnimationPlayer . hasStarted ( ) )
743+ . length ;
744+ if ( this . _overlayInfos . length - closingOverlaysCount === 1 && this . _keyPressEventListener && ! this . _keyPressEventListener . closed ) {
747745 this . _keyPressEventListener . unsubscribe ( ) ;
746+ this . _keyPressEventListener = null ;
748747 }
749748 }
750749
0 commit comments