diff --git a/Ladybird/AppKit/UI/LadybirdWebView.h b/Ladybird/AppKit/UI/LadybirdWebView.h index ccfeef84ca7..f23fb83095d 100644 --- a/Ladybird/AppKit/UI/LadybirdWebView.h +++ b/Ladybird/AppKit/UI/LadybirdWebView.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #import @@ -30,6 +31,7 @@ - (void)onTitleChange:(ByteString const&)title; - (void)onFaviconChange:(Gfx::Bitmap const&)bitmap; +- (void)onAudioPlayStateChange:(Web::HTML::AudioPlayState)play_state; - (void)onNavigateBack; - (void)onNavigateForward; diff --git a/Ladybird/AppKit/UI/LadybirdWebView.mm b/Ladybird/AppKit/UI/LadybirdWebView.mm index 484b8ee4e75..150d8de40e5 100644 --- a/Ladybird/AppKit/UI/LadybirdWebView.mm +++ b/Ladybird/AppKit/UI/LadybirdWebView.mm @@ -809,6 +809,10 @@ static void copy_data_to_clipboard(StringView data, NSPasteboardType pasteboard_ if (pasteboard_type) copy_data_to_clipboard(data, pasteboard_type); }; + + m_web_view_bridge->on_audio_play_state_changed = [self](auto play_state) { + [self.observer onAudioPlayStateChange:play_state]; + }; } - (void)selectDropdownAdd:(NSMenu*)menu item:(Web::HTML::SelectItem const&)item diff --git a/Ladybird/AppKit/UI/Tab.mm b/Ladybird/AppKit/UI/Tab.mm index 108e1acc6ab..b79bc81eee1 100644 --- a/Ladybird/AppKit/UI/Tab.mm +++ b/Ladybird/AppKit/UI/Tab.mm @@ -275,6 +275,27 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800; [self updateTabTitleAndFavicon]; } +- (void)onAudioPlayStateChange:(Web::HTML::AudioPlayState)play_state +{ + switch (play_state) { + case Web::HTML::AudioPlayState::Paused: + [[self tab] setAccessoryView:nil]; + break; + + case Web::HTML::AudioPlayState::Playing: + auto* icon = [NSImage imageNamed:NSImageNameTouchBarAudioOutputVolumeHighTemplate]; + auto* button = [NSButton buttonWithImage:icon target:nil action:nil]; + + // FIXME: Add a click handler to mute the tab. + NSButtonCell* cell = [button cell]; + [cell setImageDimsWhenDisabled:NO]; + [button setEnabled:NO]; + + [[self tab] setAccessoryView:button]; + break; + } +} + - (void)onNavigateBack { [[self tabController] navigateBack:nil];