From 4f2032a9c2f896803bca60c9d9a0e9af94316a31 Mon Sep 17 00:00:00 2001 From: Thomas Geymayer Date: Wed, 30 Jul 2014 17:17:24 +0200 Subject: [PATCH] Canvas: export preventDefault to Nasal and use to stop events on DesktopGroup. --- src/Canvas/gui_mgr.cxx | 21 +++++++++++++++------ src/Scripting/NasalCanvas.cxx | 4 +++- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/Canvas/gui_mgr.cxx b/src/Canvas/gui_mgr.cxx index a4a47ffa7..b5ac7155e 100644 --- a/src/Canvas/gui_mgr.cxx +++ b/src/Canvas/gui_mgr.cxx @@ -132,6 +132,9 @@ class DesktopGroup: bool handleMouse(const osgGA::GUIEventAdapter& ea); bool handleKeyboard(const osgGA::GUIEventAdapter& ea); + + bool handleRootEvent(const sc::EventPtr& event); + void handleResize(int x, int y, int width, int height); void handleMouseMode(SGPropertyNode* node); @@ -467,11 +470,7 @@ bool DesktopGroup::handleMouse(const osgGA::GUIEventAdapter& ea) return target_window->handleEvent(event); } else - { - // TODO somehow return if event has been consumed - sc::Element::handleEvent(event); - return false; - } + return handleRootEvent(event); } //------------------------------------------------------------------------------ @@ -512,9 +511,19 @@ bool DesktopGroup::handleKeyboard(const osgGA::GUIEventAdapter& ea) if( active_window ) return active_window->handleEvent(event); + else + return handleRootEvent(event); +} +//------------------------------------------------------------------------------ +bool DesktopGroup::handleRootEvent(const sc::EventPtr& event) +{ + event->default_prevented = false; sc::Element::handleEvent(event); - return false; + + // preventDefault() on DesktopGroup stops propagation to internal event + // handling. + return event->default_prevented; } //------------------------------------------------------------------------------ diff --git a/src/Scripting/NasalCanvas.cxx b/src/Scripting/NasalCanvas.cxx index 637734c1c..a9d6fa265 100644 --- a/src/Scripting/NasalCanvas.cxx +++ b/src/Scripting/NasalCanvas.cxx @@ -399,7 +399,9 @@ naRef initNasalCanvas(naRef globals, naContext c) .member("type", &sc::Event::getTypeString) .member("target", &sc::Event::getTarget) .member("currentTarget", &sc::Event::getCurrentTarget) - .method("stopPropagation", &sc::Event::stopPropagation); + .member("defaultPrevented", &sc::Event::defaultPrevented) + .method("stopPropagation", &sc::Event::stopPropagation) + .method("preventDefault", &sc::Event::preventDefault); NasalCustomEvent::init("canvas.CustomEvent") .bases() -- 2.39.5