diff options
author | Vincent Sanders <vince@kyllikki.org> | 2024-01-16 22:44:45 +0000 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2024-02-25 10:00:56 +0000 |
commit | 7e930e324937f59847beea9aec998b1d9f07259a (patch) | |
tree | 23ac380d7669ab0020c03071f6fcb62429d5bd6b | |
parent | d700d977379e1a27df1b6a94c6bd73b8970e96ae (diff) | |
download | netsurf-7e930e324937f59847beea9aec998b1d9f07259a.tar.gz netsurf-7e930e324937f59847beea9aec998b1d9f07259a.tar.bz2 |
initial keypress handling
-rw-r--r-- | frontends/qt/widget.cls.h | 4 | ||||
-rw-r--r-- | frontends/qt/widget.cpp | 29 |
2 files changed, 31 insertions, 2 deletions
diff --git a/frontends/qt/widget.cls.h b/frontends/qt/widget.cls.h index f7bea5836..c73e23c24 100644 --- a/frontends/qt/widget.cls.h +++ b/frontends/qt/widget.cls.h @@ -35,16 +35,18 @@ private: struct browser_window *m_bw; int m_xoffset; int m_yoffset; + uint32_t qkeyevent_to_nskey(QKeyEvent *event); protected: void paintEvent(QPaintEvent *event); void resizeEvent(QResizeEvent *event); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); + void keyPressEvent(QKeyEvent *event); public: NS_Widget(QWidget *parent, struct browser_window *bw) - : QWidget(parent, Qt::Widget), m_bw(bw), m_xoffset(0), m_yoffset(0) {} + : QWidget(parent, Qt::Widget), m_bw(bw), m_xoffset(0), m_yoffset(0) {setFocusPolicy(Qt::StrongFocus);} QSize sizeHint() const override; bool get_scroll(int *sx, int *sy); nserror get_dimensions(int *width, int *height); diff --git a/frontends/qt/widget.cpp b/frontends/qt/widget.cpp index 904379a51..81072c9d1 100644 --- a/frontends/qt/widget.cpp +++ b/frontends/qt/widget.cpp @@ -28,6 +28,7 @@ extern "C" { #include "utils/errors.h" #include "utils/nsoption.h" #include "netsurf/plotters.h" +#include "netsurf/keypress.h" } #include "qt/widget.cls.h" @@ -93,15 +94,25 @@ void NS_Widget::mousePressEvent(QMouseEvent *event) void NS_Widget::mouseReleaseEvent(QMouseEvent *event) { + int bms = BROWSER_MOUSE_HOVER; /* empty state */ const QPointF pos = event->position(); Qt::MouseButton button = event->button(); - int bms = BROWSER_MOUSE_HOVER; /* empty state */ + Qt::KeyboardModifiers mods = event->modifiers(); + if ((button & Qt::LeftButton) == Qt::LeftButton) { bms |=BROWSER_MOUSE_CLICK_1; } if ((button & Qt::MiddleButton) == Qt::MiddleButton) { bms |=BROWSER_MOUSE_CLICK_2; } + /* keyboard modifiers */ + if ((mods & Qt::ShiftModifier)!=0) + bms |= BROWSER_MOUSE_MOD_1; + if ((mods & Qt::ControlModifier)!=0) + bms |= BROWSER_MOUSE_MOD_2; + if ((mods & Qt::AltModifier)!=0) + bms |= BROWSER_MOUSE_MOD_3; + browser_window_mouse_click(m_bw, (browser_mouse_state)bms, pos.x() + m_xoffset, @@ -109,6 +120,22 @@ void NS_Widget::mouseReleaseEvent(QMouseEvent *event) } +uint32_t NS_Widget::qkeyevent_to_nskey(QKeyEvent *event) +{ + QString res = event->text(); + QList<uint> lst=res.toUcs4(); + return (uint32_t)lst[0]; +} + +void NS_Widget::keyPressEvent(QKeyEvent *event) +{ + uint32_t nskey; + nskey = qkeyevent_to_nskey(event); + if (browser_window_key_press(m_bw, nskey) == false) { + QWidget::keyPressEvent(event); + } +} + /** * get the current scroll offsets */ |