From eb428857eabd6f73441ed777d485885e252f5d31 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sun, 24 Mar 2013 17:27:30 +0200 Subject: [PATCH] Don't let input events that are passed to widgets go to other consumers This was removed with event handling changes a while back, because other changes needed to be made in libmspgui before reimplementation was possible. --- source/root.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++++----- source/root.h | 12 +++++----- 2 files changed, 58 insertions(+), 12 deletions(-) diff --git a/source/root.cpp b/source/root.cpp index 89db305..1dea150 100644 --- a/source/root.cpp +++ b/source/root.cpp @@ -109,27 +109,41 @@ void Root::render() const Widget::render(renderer); } -void Root::button_press_event(unsigned btn) +bool Root::button_press_event(unsigned btn) { if(visible) { + Widget *old_focus = pointer_focus; + int x, y; get_pointer(x, y); button_press(x, y, btn); + + if(pointer_focus || old_focus) + return true; } + + return false; } -void Root::button_release_event(unsigned btn) +bool Root::button_release_event(unsigned btn) { if(visible) { + Widget *old_focus = pointer_focus; + int x, y; get_pointer(x, y); button_release(x, y, btn); + + if(pointer_focus || old_focus) + return true; } + + return false; } -void Root::axis_motion_event(unsigned, float, float) +bool Root::axis_motion_event(unsigned, float, float) { if(visible) { @@ -149,26 +163,58 @@ void Root::axis_motion_event(unsigned, float, float) lbl_tooltip->set_visible(false); tooltip_target = 0; } + + if(pointer_focus) + return true; } + + return false; } -void Root::key_press_event(unsigned key) +bool Root::key_press_event(unsigned key) { // XXX Modifiers if(visible) + { + Widget *old_focus = input_focus; + key_press(key, 0); + + if(input_focus || old_focus) + return true; + } + + return false; } -void Root::key_release_event(unsigned key) +bool Root::key_release_event(unsigned key) { if(visible) + { + Widget *old_focus = input_focus; + key_release(key, 0); + + if(input_focus || old_focus) + return true; + } + + return false; } -void Root::character_event(StringCodec::unichar ch) +bool Root::character_event(StringCodec::unichar ch) { if(visible) + { + Widget *old_focus = input_focus; + character(ch); + + if(input_focus || old_focus) + return true; + } + + return false; } void Root::get_pointer(int &x, int &y) diff --git a/source/root.h b/source/root.h index 4e5309f..5d5a3d1 100644 --- a/source/root.h +++ b/source/root.h @@ -54,12 +54,12 @@ public: void render() const; private: - void button_press_event(unsigned); - void button_release_event(unsigned); - void axis_motion_event(unsigned, float, float); - void key_press_event(unsigned); - void key_release_event(unsigned); - void character_event(StringCodec::unichar); + bool button_press_event(unsigned); + bool button_release_event(unsigned); + bool axis_motion_event(unsigned, float, float); + bool key_press_event(unsigned); + bool key_release_event(unsigned); + bool character_event(StringCodec::unichar); void get_pointer(int &, int &); }; -- 2.43.0