@@ -283,6 +283,12 @@ export class MatMenuTrigger implements AfterContentInit, OnDestroy {
283
283
284
284
/** Opens the menu. */
285
285
openMenu ( ) : void {
286
+ // Auto focus by default
287
+ this . _openMenu ( true ) ;
288
+ }
289
+
290
+ /** Internal method to open menu providing option to auto focus on first item. */
291
+ private _openMenu ( autoFocus : boolean ) : void {
286
292
const menu = this . menu ;
287
293
288
294
if ( this . _menuOpen || ! menu ) {
@@ -317,7 +323,7 @@ export class MatMenuTrigger implements AfterContentInit, OnDestroy {
317
323
this . _closingActionsSubscription = this . _menuClosingActions ( ) . subscribe ( ( ) => this . closeMenu ( ) ) ;
318
324
menu . parentMenu = this . triggersSubmenu ( ) ? this . _parentMaterialMenu : undefined ;
319
325
menu . direction = this . dir ;
320
- menu . focusFirstItem ( this . _openedBy || 'program' ) ;
326
+ if ( autoFocus ) menu . focusFirstItem ( this . _openedBy || 'program' ) ;
321
327
this . _setIsMenuOpen ( true ) ;
322
328
323
329
if ( menu instanceof MatMenu ) {
@@ -590,7 +596,10 @@ export class MatMenuTrigger implements AfterContentInit, OnDestroy {
590
596
this . _hoverSubscription = this . _parentMaterialMenu . _hovered ( ) . subscribe ( active => {
591
597
if ( active === this . _menuItemInstance && ! active . disabled ) {
592
598
this . _openedBy = 'mouse' ;
593
- this . openMenu ( ) ;
599
+ // Open the menu, but do NOT auto-focus on first item when just hovering.
600
+ // When VoiceOver is enabled, this is particularly confusing as the focus will
601
+ // cause another hover event, and continue opening sub-menus without interaction.
602
+ this . _openMenu ( false ) ;
594
603
}
595
604
} ) ;
596
605
}
0 commit comments