From 73456b05b4c93eaf57e6c532dd324452dd7a88e4 Mon Sep 17 00:00:00 2001 From: Thomas Geymayer Date: Sat, 29 Jun 2013 14:35:56 +0200 Subject: [PATCH] Canvas GUI: send mouseleave after mouseup outside original window --- src/Canvas/gui_mgr.cxx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Canvas/gui_mgr.cxx b/src/Canvas/gui_mgr.cxx index cfee29c07..b1a58eea6 100644 --- a/src/Canvas/gui_mgr.cxx +++ b/src/Canvas/gui_mgr.cxx @@ -437,11 +437,24 @@ bool GUIMgr::handleMouse(const osgGA::GUIEventAdapter& ea) break; } case osgGA::GUIEventAdapter::RELEASE: - target_window = _last_push.lock(); - _last_push.reset(); + { event->type = sc::Event::MOUSE_UP; - break; + canvas::WindowPtr last_push = _last_push.lock(); + _last_push.reset(); + + if( last_push && last_push != target_window ) + { + // Leave old window + sc::MouseEventPtr leave_event( new sc::MouseEvent(*event) ); + leave_event->type = sc::Event::MOUSE_LEAVE; + leave_event->client_pos -= toOsg(last_push->getPosition()); + leave_event->local_pos = leave_event->client_pos; + + last_push->handleEvent(leave_event); + } + break; + } case osgGA::GUIEventAdapter::DRAG: target_window = _last_push.lock(); event->type = sc::Event::DRAG; -- 2.39.5