diff --git a/Libraries/LibHTML/HtmlView.cpp b/Libraries/LibHTML/HtmlView.cpp index 2a46a91ac5..3e9abd0e34 100644 --- a/Libraries/LibHTML/HtmlView.cpp +++ b/Libraries/LibHTML/HtmlView.cpp @@ -183,6 +183,40 @@ void HtmlView::mousedown_event(GMouseEvent& event) event.accept(); } +void HtmlView::keydown_event(GKeyEvent& event) +{ + if (event.modifiers() == 0) { + switch (event.key()) { + case Key_Home: + vertical_scrollbar().set_value(0); + break; + case Key_End: + vertical_scrollbar().set_value(vertical_scrollbar().max()); + break; + case Key_Down: + vertical_scrollbar().set_value(vertical_scrollbar().value() + vertical_scrollbar().step()); + break; + case Key_Up: + vertical_scrollbar().set_value(vertical_scrollbar().value() - vertical_scrollbar().step()); + break; + case Key_Left: + horizontal_scrollbar().set_value(horizontal_scrollbar().value() + horizontal_scrollbar().step()); + break; + case Key_Right: + horizontal_scrollbar().set_value(horizontal_scrollbar().value() - horizontal_scrollbar().step()); + break; + case Key_PageDown: + vertical_scrollbar().set_value(vertical_scrollbar().value() + frame_inner_rect().height()); + break; + case Key_PageUp: + vertical_scrollbar().set_value(vertical_scrollbar().value() - frame_inner_rect().height()); + break; + } + } + + event.accept(); +} + void HtmlView::reload() { load(main_frame().document()->url()); diff --git a/Libraries/LibHTML/HtmlView.h b/Libraries/LibHTML/HtmlView.h index 5c47d1d591..19c18e7335 100644 --- a/Libraries/LibHTML/HtmlView.h +++ b/Libraries/LibHTML/HtmlView.h @@ -32,6 +32,8 @@ public: Function on_title_change; Function on_load_start; + virtual bool accepts_focus() const override { return true; } + protected: HtmlView(GWidget* parent = nullptr); @@ -39,6 +41,7 @@ protected: virtual void paint_event(GPaintEvent&) override; virtual void mousemove_event(GMouseEvent&) override; virtual void mousedown_event(GMouseEvent&) override; + virtual void keydown_event(GKeyEvent&) override; private: void layout_and_sync_size();