summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2024-01-16 22:44:45 +0000
committerVincent Sanders <vince@kyllikki.org>2024-02-25 10:00:56 +0000
commit7e930e324937f59847beea9aec998b1d9f07259a (patch)
tree23ac380d7669ab0020c03071f6fcb62429d5bd6b
parentd700d977379e1a27df1b6a94c6bd73b8970e96ae (diff)
downloadnetsurf-7e930e324937f59847beea9aec998b1d9f07259a.tar.gz
netsurf-7e930e324937f59847beea9aec998b1d9f07259a.tar.bz2
initial keypress handling
-rw-r--r--frontends/qt/widget.cls.h4
-rw-r--r--frontends/qt/widget.cpp29
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
*/