diff --git a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp index 7df28b1934..b5410a40f6 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp @@ -1857,6 +1857,20 @@ void HTMLMediaElement::reject_pending_play_promises(ReadonlySpan HTMLMediaElement::handle_keydown(Badge, KeyCode key) +{ + switch (key) { + case KeyCode::Key_Space: + TRY(toggle_playback()); + break; + + default: + break; + } + + return {}; +} + void HTMLMediaElement::set_layout_display_time(Badge, Optional display_time) { if (display_time.has_value() && !m_display_time.has_value()) { diff --git a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h index 0819892e2e..5fb4a1765f 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -99,6 +100,8 @@ public: JS::NonnullGCPtr audio_tracks() const { return *m_audio_tracks; } JS::NonnullGCPtr video_tracks() const { return *m_video_tracks; } + WebIDL::ExceptionOr handle_keydown(Badge, KeyCode); + enum class MouseTrackingComponent { Timeline, Volume, diff --git a/Userland/Libraries/LibWeb/Page/EventHandler.cpp b/Userland/Libraries/LibWeb/Page/EventHandler.cpp index 6929489897..6389e76cdd 100644 --- a/Userland/Libraries/LibWeb/Page/EventHandler.cpp +++ b/Userland/Libraries/LibWeb/Page/EventHandler.cpp @@ -745,6 +745,11 @@ bool EventHandler::handle_keydown(KeyCode key, unsigned modifiers, u32 code_poin } } + if (auto* element = m_browsing_context->active_document()->focused_element(); is(element)) { + auto& media_element = static_cast(*element); + media_element.handle_keydown({}, key).release_value_but_fixme_should_propagate_errors(); + } + if (m_browsing_context->cursor_position().is_valid() && m_browsing_context->cursor_position().node()->is_editable()) { if (key == KeyCode::Key_Backspace) { if (!m_browsing_context->decrement_cursor_position_offset()) {