|
@@ -55,6 +55,7 @@ struct HideCursor {
|
|
@property (nonatomic, strong) NSMenu* page_context_menu;
|
|
@property (nonatomic, strong) NSMenu* page_context_menu;
|
|
@property (nonatomic, strong) NSMenu* link_context_menu;
|
|
@property (nonatomic, strong) NSMenu* link_context_menu;
|
|
@property (nonatomic, strong) NSMenu* image_context_menu;
|
|
@property (nonatomic, strong) NSMenu* image_context_menu;
|
|
|
|
+@property (nonatomic, strong) NSMenu* audio_context_menu;
|
|
@property (nonatomic, strong) NSMenu* video_context_menu;
|
|
@property (nonatomic, strong) NSMenu* video_context_menu;
|
|
@property (nonatomic, strong) NSTextField* status_label;
|
|
@property (nonatomic, strong) NSTextField* status_label;
|
|
@property (nonatomic, strong) NSAlert* dialog;
|
|
@property (nonatomic, strong) NSAlert* dialog;
|
|
@@ -66,6 +67,7 @@ struct HideCursor {
|
|
@synthesize page_context_menu = _page_context_menu;
|
|
@synthesize page_context_menu = _page_context_menu;
|
|
@synthesize link_context_menu = _link_context_menu;
|
|
@synthesize link_context_menu = _link_context_menu;
|
|
@synthesize image_context_menu = _image_context_menu;
|
|
@synthesize image_context_menu = _image_context_menu;
|
|
|
|
+@synthesize audio_context_menu = _audio_context_menu;
|
|
@synthesize video_context_menu = _video_context_menu;
|
|
@synthesize video_context_menu = _video_context_menu;
|
|
@synthesize status_label = _status_label;
|
|
@synthesize status_label = _status_label;
|
|
|
|
|
|
@@ -393,17 +395,13 @@ struct HideCursor {
|
|
};
|
|
};
|
|
|
|
|
|
m_web_view_bridge->on_media_context_menu_request = [self](auto position, auto const& menu) {
|
|
m_web_view_bridge->on_media_context_menu_request = [self](auto position, auto const& menu) {
|
|
- if (!menu.is_video) {
|
|
|
|
- NSLog(@"TODO: Implement audio context menu once audio elements are supported");
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
TemporaryChange change_url { m_context_menu_url, menu.media_url };
|
|
TemporaryChange change_url { m_context_menu_url, menu.media_url };
|
|
|
|
|
|
- auto* play_pause_menu_item = [self.video_context_menu itemWithTag:CONTEXT_MENU_PLAY_PAUSE_TAG];
|
|
|
|
- auto* mute_unmute_menu_item = [self.video_context_menu itemWithTag:CONTEXT_MENU_MUTE_UNMUTE_TAG];
|
|
|
|
- auto* controls_menu_item = [self.video_context_menu itemWithTag:CONTEXT_MENU_CONTROLS_TAG];
|
|
|
|
- auto* loop_menu_item = [self.video_context_menu itemWithTag:CONTEXT_MENU_LOOP_TAG];
|
|
|
|
|
|
+ auto* context_menu = menu.is_video ? self.video_context_menu : self.audio_context_menu;
|
|
|
|
+ auto* play_pause_menu_item = [context_menu itemWithTag:CONTEXT_MENU_PLAY_PAUSE_TAG];
|
|
|
|
+ auto* mute_unmute_menu_item = [context_menu itemWithTag:CONTEXT_MENU_MUTE_UNMUTE_TAG];
|
|
|
|
+ auto* controls_menu_item = [context_menu itemWithTag:CONTEXT_MENU_CONTROLS_TAG];
|
|
|
|
+ auto* loop_menu_item = [context_menu itemWithTag:CONTEXT_MENU_LOOP_TAG];
|
|
|
|
|
|
if (menu.is_playing) {
|
|
if (menu.is_playing) {
|
|
[play_pause_menu_item setTitle:@"Pause"];
|
|
[play_pause_menu_item setTitle:@"Pause"];
|
|
@@ -424,7 +422,7 @@ struct HideCursor {
|
|
[loop_menu_item setState:loop_state];
|
|
[loop_menu_item setState:loop_state];
|
|
|
|
|
|
auto* event = Ladybird::create_context_menu_mouse_event(self, position);
|
|
auto* event = Ladybird::create_context_menu_mouse_event(self, position);
|
|
- [NSMenu popUpContextMenu:self.video_context_menu withEvent:event forView:self];
|
|
|
|
|
|
+ [NSMenu popUpContextMenu:context_menu withEvent:event forView:self];
|
|
};
|
|
};
|
|
|
|
|
|
m_web_view_bridge->on_request_alert = [self](auto const& message) {
|
|
m_web_view_bridge->on_request_alert = [self](auto const& message) {
|
|
@@ -765,6 +763,53 @@ static void copy_text_to_clipboard(StringView text)
|
|
return _image_context_menu;
|
|
return _image_context_menu;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+- (NSMenu*)audio_context_menu
|
|
|
|
+{
|
|
|
|
+ if (!_audio_context_menu) {
|
|
|
|
+ _audio_context_menu = [[NSMenu alloc] initWithTitle:@"Audio Context Menu"];
|
|
|
|
+
|
|
|
|
+ auto* play_pause_menu_item = [[NSMenuItem alloc] initWithTitle:@"Play"
|
|
|
|
+ action:@selector(toggleMediaPlayState:)
|
|
|
|
+ keyEquivalent:@""];
|
|
|
|
+ [play_pause_menu_item setTag:CONTEXT_MENU_PLAY_PAUSE_TAG];
|
|
|
|
+
|
|
|
|
+ auto* mute_unmute_menu_item = [[NSMenuItem alloc] initWithTitle:@"Mute"
|
|
|
|
+ action:@selector(toggleMediaMuteState:)
|
|
|
|
+ keyEquivalent:@""];
|
|
|
|
+ [mute_unmute_menu_item setTag:CONTEXT_MENU_MUTE_UNMUTE_TAG];
|
|
|
|
+
|
|
|
|
+ auto* controls_menu_item = [[NSMenuItem alloc] initWithTitle:@"Controls"
|
|
|
|
+ action:@selector(toggleMediaControlsState:)
|
|
|
|
+ keyEquivalent:@""];
|
|
|
|
+ [controls_menu_item setTag:CONTEXT_MENU_CONTROLS_TAG];
|
|
|
|
+
|
|
|
|
+ auto* loop_menu_item = [[NSMenuItem alloc] initWithTitle:@"Loop"
|
|
|
|
+ action:@selector(toggleMediaLoopState:)
|
|
|
|
+ keyEquivalent:@""];
|
|
|
|
+ [loop_menu_item setTag:CONTEXT_MENU_LOOP_TAG];
|
|
|
|
+
|
|
|
|
+ [_audio_context_menu addItem:play_pause_menu_item];
|
|
|
|
+ [_audio_context_menu addItem:mute_unmute_menu_item];
|
|
|
|
+ [_audio_context_menu addItem:controls_menu_item];
|
|
|
|
+ [_audio_context_menu addItem:loop_menu_item];
|
|
|
|
+ [_audio_context_menu addItem:[NSMenuItem separatorItem]];
|
|
|
|
+
|
|
|
|
+ [_audio_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Open Audio"
|
|
|
|
+ action:@selector(openLink:)
|
|
|
|
+ keyEquivalent:@""]];
|
|
|
|
+ [_audio_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Open Audio in New Tab"
|
|
|
|
+ action:@selector(openLinkInNewTab:)
|
|
|
|
+ keyEquivalent:@""]];
|
|
|
|
+ [_audio_context_menu addItem:[NSMenuItem separatorItem]];
|
|
|
|
+
|
|
|
|
+ [_audio_context_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Copy Audio URL"
|
|
|
|
+ action:@selector(copyLink:)
|
|
|
|
+ keyEquivalent:@""]];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return _audio_context_menu;
|
|
|
|
+}
|
|
|
|
+
|
|
- (NSMenu*)video_context_menu
|
|
- (NSMenu*)video_context_menu
|
|
{
|
|
{
|
|
if (!_video_context_menu) {
|
|
if (!_video_context_menu) {
|