]> git.mxchange.org Git - flightgear.git/commitdiff
Canvas: export preventDefault to Nasal and use to stop events on DesktopGroup.
authorThomas Geymayer <tomgey@gmail.com>
Wed, 30 Jul 2014 15:17:24 +0000 (17:17 +0200)
committerThomas Geymayer <tomgey@gmail.com>
Wed, 30 Jul 2014 15:17:24 +0000 (17:17 +0200)
src/Canvas/gui_mgr.cxx
src/Scripting/NasalCanvas.cxx

index a4a47ffa7396a07342deb42b0e591cc5f3640aa8..b5ac7155ecbae300a596362504b00ff7dc4c823e 100644 (file)
@@ -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;
 }
 
 //------------------------------------------------------------------------------
index 637734c1c993b1d575634f147357d8180ff81e8a..a9d6fa265ac3561b77dcb6627bd384595a76a320 100644 (file)
@@ -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<NasalEvent>()