summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Persch <chpe@src.gnome.org>2020-11-04 20:26:58 +0100
committerChristian Persch <chpe@src.gnome.org>2020-11-04 20:26:58 +0100
commitb1af335aaa31333aee2bdf91bb539a974c1739bf (patch)
tree9a4696e923e9d442086fe356486547a1cdf9f918
parentdc829d65834e5b2f85b423aa057441b2122359ce (diff)
downloadvte-b1af335aaa31333aee2bdf91bb539a974c1739bf.tar.gz
widget: Don't use scroll event's position
Use the last known mouse position in when sending the mouse coordinates. [gtk4 preparation]
-rw-r--r--src/vte.cc4
-rw-r--r--src/widget.cc6
-rw-r--r--src/widget.hh18
3 files changed, 8 insertions, 20 deletions
diff --git a/src/vte.cc b/src/vte.cc
index b7def894..87fb808c 100644
--- a/src/vte.cc
+++ b/src/vte.cc
@@ -9309,8 +9309,6 @@ Terminal::widget_mouse_scroll(vte::platform::ScrollEvent const& event)
/* Need to ensure the ringview is updated. */
ringview_update();
- auto rowcol = confined_grid_coords_from_event(event);
-
m_modifiers = event.modifiers();
m_mouse_smooth_scroll_delta += event.dy();
@@ -9330,7 +9328,7 @@ Terminal::widget_mouse_scroll(vte::platform::ScrollEvent const& event)
cnt = -cnt;
for (i = 0; i < cnt; i++) {
/* Encode the parameters and send them to the app. */
- feed_mouse_event(rowcol,
+ feed_mouse_event(grid_coords_from_view_coords(m_mouse_last_position),
button,
false /* not drag */,
false /* not release */);
diff --git a/src/widget.cc b/src/widget.cc
index b0fe5f3e..f55abee0 100644
--- a/src/widget.cc
+++ b/src/widget.cc
@@ -492,11 +492,6 @@ Widget::mouse_event_from_gdk(GdkEvent* event) const /* throws */
ScrollEvent
Widget::scroll_event_from_gdk(GdkEvent* event) const /* throws */
{
- auto x = double{}, y = double{};
- if (gdk_event_get_window(event) != m_event_window ||
- !gdk_event_get_coords(event, &x, &y))
- x = y = -1.; // FIXMEchpe or throw?
-
auto dx = double{}, dy = double{};
if (!gdk_event_get_scroll_deltas(event, &dx, &dy)) {
auto dir = GdkScrollDirection{};
@@ -514,7 +509,6 @@ Widget::scroll_event_from_gdk(GdkEvent* event) const /* throws */
}
return {read_modifiers_from_gdk(event),
- x, y,
dx, dy};
}
diff --git a/src/widget.hh b/src/widget.hh
index 295789bd..bcce34f9 100644
--- a/src/widget.hh
+++ b/src/widget.hh
@@ -197,7 +197,7 @@ private:
double m_y;
}; // class MouseEvent
-class ScrollEvent : public MouseEvent {
+class ScrollEvent : public EventBase {
friend class vte::platform::Widget;
friend class Terminal;
@@ -206,16 +206,10 @@ protected:
ScrollEvent() noexcept = default;
constexpr ScrollEvent(unsigned modifiers,
- double x,
- double y,
double dx,
double dy) noexcept
- : MouseEvent{EventBase::Type::eMOUSE_SCROLL,
- 1, // press count
- modifiers,
- MouseEvent::Button::eNONE,
- x,
- y},
+ : EventBase{EventBase::Type::eMOUSE_SCROLL},
+ m_modifiers{modifiers},
m_dx{dx},
m_dy{dy}
{
@@ -229,10 +223,12 @@ public:
ScrollEvent& operator=(ScrollEvent const&) = delete;
ScrollEvent& operator=(ScrollEvent&&) = delete;
- constexpr auto dx() const noexcept { return m_dx; }
- constexpr auto dy() const noexcept { return m_dy; }
+ constexpr auto modifiers() const noexcept { return m_modifiers; }
+ constexpr auto dx() const noexcept { return m_dx; }
+ constexpr auto dy() const noexcept { return m_dy; }
private:
+ unsigned m_modifiers;
double m_dx;
double m_dy;
}; // class ScrollEvent