[vte] widget: Don't use scroll event's position



commit b1af335aaa31333aee2bdf91bb539a974c1739bf
Author: Christian Persch <chpe src gnome org>
Date:   Wed Nov 4 20:26:58 2020 +0100

    widget: Don't use scroll event's position
    
    Use the last known mouse position in when sending the mouse coordinates.
    
    [gtk4 preparation]

 src/vte.cc    |  4 +---
 src/widget.cc |  6 ------
 src/widget.hh | 18 +++++++-----------
 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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]