From 8f5e92dbe5b8adca2af32da6d43165b1c78dacfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Fri, 15 Feb 2002 00:55:27 +0000 Subject: [PATCH] corrected double click events: wxMGL will now synthetize second single click, so that events sequence is single-single-double as wxWindows expects rather than single-double as MGL generates git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14222 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/mgl/window.cpp | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/src/mgl/window.cpp b/src/mgl/window.cpp index dd5bfd6c40..4de9b27e9b 100644 --- a/src/mgl/window.cpp +++ b/src/mgl/window.cpp @@ -171,23 +171,40 @@ static ibool MGLAPI wxWindowMouseHandler(window_t *wnd, event_t *e) event.m_leftDown = e->modifiers & EVT_LEFTBUT; event.m_middleDown = e->modifiers & EVT_MIDDLEBUT; event.m_rightDown = e->modifiers & EVT_RIGHTBUT; - + switch (e->what) { case EVT_MOUSEDOWN: - if ( e->message & EVT_LEFTBMASK ) - type = (e->message & EVT_DBLCLICK) ? - wxEVT_LEFT_DCLICK : wxEVT_LEFT_DOWN; - else if ( e->message & EVT_MIDDLEBMASK ) - type = (e->message & EVT_DBLCLICK) ? - wxEVT_MIDDLE_DCLICK : wxEVT_MIDDLE_DOWN; - else if ( e->message & EVT_RIGHTBMASK ) - type = (e->message & EVT_DBLCLICK) ? - wxEVT_RIGHT_DCLICK : wxEVT_RIGHT_DOWN; - + // Change focus if the user clicks outside focused window: if ( win->AcceptsFocus() && wxWindow::FindFocus() != win ) win->SetFocus(); + if ( e->message & EVT_LEFTBMASK ) + type = wxEVT_LEFT_DOWN; + else if ( e->message & EVT_MIDDLEBMASK ) + type = wxEVT_MIDDLE_DOWN; + else if ( e->message & EVT_RIGHTBMASK ) + type = wxEVT_RIGHT_DOWN; + + if ( e->message & EVT_DBLCLICK ) + { + // MGL doesn't generate two subsequent single clicks prior + // to a double click, but rather only fires one single click + // followed by one double click. wxWindows expects two single + // clicks, so we have to emulate the second one. + event.SetEventType(type); + win->GetEventHandler()->ProcessEvent(event); + + // And change event type for the real double click event + // that will be generated later in this function: + if ( e->message & EVT_LEFTBMASK ) + type = wxEVT_LEFT_DCLICK; + else if ( e->message & EVT_MIDDLEBMASK ) + type = wxEVT_MIDDLE_DCLICK; + else if ( e->message & EVT_RIGHTBMASK ) + type = wxEVT_RIGHT_DCLICK; + } + break; case EVT_MOUSEUP: