@@ -371,6 +371,19 @@ open class AppMenuRowView: AppMenuBasicItemView {
371371 public let contentView = View ( )
372372
373373 private let hoverDisposable = MetaDisposable ( )
374+ private let submenuDisposable = MetaDisposable ( )
375+
376+ public func presentSubmenuAfterDelay ( ) {
377+ submenuDisposable . set ( delaySignal ( 0.157 ) . start ( completed : { [ weak self ] in
378+ guard let self , let item = self . item as? AppMenuRowItem , self . containerView . controlState == . Hover else {
379+ return
380+ }
381+ guard NSWindow . windowNumber ( at : NSEvent . mouseLocation , belowWindowWithWindowNumber : 0 ) == self . window ? . windowNumber else {
382+ return
383+ }
384+ item . interaction ? . presentSubmenu ( item . item )
385+ } ) )
386+ }
374387
375388 public required init ( frame frameRect : NSRect ) {
376389 super . init ( frame : frameRect )
@@ -393,7 +406,11 @@ open class AppMenuRowView: AppMenuBasicItemView {
393406 guard let item = self ? . item as? AppMenuRowItem , CheckWindow ( ) else {
394407 return
395408 }
396- item . interaction ? . presentSubmenu ( item . item )
409+ guard item . item . submenu != nil else {
410+ item . interaction ? . presentSubmenu ( item . item )
411+ return
412+ }
413+ self ? . presentSubmenuAfterDelay ( )
397414 } , for : . Hover )
398415
399416
@@ -430,6 +447,10 @@ open class AppMenuRowView: AppMenuBasicItemView {
430447 self ? . updateState ( . Highlight )
431448 }
432449 self ? . hoverDisposable . set ( nil )
450+ self ? . submenuDisposable . set ( nil )
451+ if item . item . submenu != nil {
452+ item . interaction ? . presentSubmenu ( item . item )
453+ }
433454 } , for : . Highlight )
434455 containerView . set ( handler : { [ weak self ] _ in
435456 if ! CheckWindow ( ) {
@@ -438,6 +459,7 @@ open class AppMenuRowView: AppMenuBasicItemView {
438459 self ? . drawable ? . updateState ( . Normal )
439460 self ? . updateState ( . Normal )
440461 self ? . hoverDisposable . set ( nil )
462+ self ? . submenuDisposable . set ( nil )
441463 } , for : . Normal )
442464 containerView . set ( handler : { [ weak self ] _ in
443465 if ! CheckWindow ( ) {
0 commit comments