From 3a9b530a08c5c14896de289db153d57a19a0e99b Mon Sep 17 00:00:00 2001 From: hippoz <10706925-hippoz@users.noreply.gitlab.com> Date: Sat, 11 Jun 2022 20:42:21 +0300 Subject: [PATCH] remove automatic event propagation --- src/Events.hpp | 5 ----- src/Widget.cpp | 19 +++++-------------- src/Widget.hpp | 2 +- 3 files changed, 6 insertions(+), 20 deletions(-) diff --git a/src/Events.hpp b/src/Events.hpp index 9b2391a..7f4770e 100644 --- a/src/Events.hpp +++ b/src/Events.hpp @@ -18,17 +18,12 @@ enum class EventType { }; class Event { -private: - bool m_accepted { false }; public: Event() {} virtual EventType type() { return EventType::NoneEvent; } virtual const char *name() { return "NoneEvent"; } - void accept() { m_accepted = true; } - bool accepted() { return m_accepted; } - virtual ~Event() = default; }; diff --git a/src/Widget.cpp b/src/Widget.cpp index d81f562..8bc060a 100644 --- a/src/Widget.cpp +++ b/src/Widget.cpp @@ -100,8 +100,6 @@ void Widget::reflow() { } void Widget::handle_repaint_rect(RepaintRectEvent &event) { - event.accept(); // immediately accept the event - we will do our own propagation logic - auto painter = m_window->painter(); if (!m_did_init || !painter.can_paint()) return; @@ -163,13 +161,14 @@ void Widget::handle_repaint_rect(RepaintRectEvent &event) { } } -void Widget::handle_relayout_subtree() { +void Widget::handle_relayout_subtree(RelayoutSubtreeEvent &event) { + for (auto child : m_children) { + child->dispatch_event(event); + } do_layout(); } void Widget::handle_mouse_move_event(MouseMoveEvent &event) { - event.accept(); // we will do our own propagation logic - bool update_focus_to = true; if (!m_rect.contains_point(event.point())) { // we just became unfocused @@ -204,8 +203,6 @@ void Widget::handle_mouse_move_event(MouseMoveEvent &event) { } void Widget::handle_mouse_button_event(MouseButtonEvent &event) { - event.accept(); // we will do our own propagation logic - bool update_activation_to = event.was_left_button_pressed(); if (!m_rect.contains_point(event.point())) { @@ -259,7 +256,7 @@ void Widget::dispatch_event(Event &event) { break; } case EventType::RelayoutSubtree: { - handle_relayout_subtree(); + handle_relayout_subtree(reinterpret_cast(event)); break; } /* these events aren't handled here, as they won't be dispatched to us from other places */ @@ -269,12 +266,6 @@ void Widget::dispatch_event(Event &event) { break; } } - - if (!event.accepted()) { - for (auto& child : m_children) { - child->dispatch_event(event); - } - } } } diff --git a/src/Widget.hpp b/src/Widget.hpp index 1d3f91f..48faae2 100644 --- a/src/Widget.hpp +++ b/src/Widget.hpp @@ -120,7 +120,7 @@ protected: private: void do_layout(); void handle_repaint_rect(RepaintRectEvent &event); - void handle_relayout_subtree(); + void handle_relayout_subtree(RelayoutSubtreeEvent &event); void handle_mouse_move_event(MouseMoveEvent &event); void handle_mouse_button_event(MouseButtonEvent &event);