From 294c0f7d89b206612634978e3df166ce532a1118 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 5 Jul 2020 11:53:19 +0200 Subject: Replace grab flag in PuglEventFocus with crossing mode --- pugl/detail/mac.m | 4 ++-- pugl/detail/x11.c | 7 ++++++- pugl/pugl.h | 6 +++--- 3 files changed, 11 insertions(+), 6 deletions(-) (limited to 'pugl') diff --git a/pugl/detail/mac.m b/pugl/detail/mac.m index 1139bc8..3e5a018 100644 --- a/pugl/detail/mac.m +++ b/pugl/detail/mac.m @@ -778,7 +778,7 @@ handleCrossing(PuglWrapperView* view, NSEvent* event, const PuglEventType type) (void)notification; PuglEvent ev = {{PUGL_FOCUS_IN, 0}}; - ev.focus.grab = false; + ev.focus.mode = PUGL_CROSSING_NORMAL; puglDispatchEvent(window->puglview, &ev); } @@ -787,7 +787,7 @@ handleCrossing(PuglWrapperView* view, NSEvent* event, const PuglEventType type) (void)notification; PuglEvent ev = {{PUGL_FOCUS_OUT, 0}}; - ev.focus.grab = false; + ev.focus.mode = PUGL_CROSSING_NORMAL; puglDispatchEvent(window->puglview, &ev); } diff --git a/pugl/detail/x11.c b/pugl/detail/x11.c index 12efc43..1cd76f7 100644 --- a/pugl/detail/x11.c +++ b/pugl/detail/x11.c @@ -644,7 +644,12 @@ translateEvent(PuglView* view, XEvent xevent) case FocusIn: case FocusOut: event.type = (xevent.type == FocusIn) ? PUGL_FOCUS_IN : PUGL_FOCUS_OUT; - event.focus.grab = (xevent.xfocus.mode != NotifyNormal); + event.focus.mode = PUGL_CROSSING_NORMAL; + if (xevent.xfocus.mode == NotifyGrab) { + event.focus.mode = PUGL_CROSSING_GRAB; + } else if (xevent.xfocus.mode == NotifyUngrab) { + event.focus.mode = PUGL_CROSSING_UNGRAB; + } break; default: diff --git a/pugl/pugl.h b/pugl/pugl.h index 13d8801..137e6d1 100644 --- a/pugl/pugl.h +++ b/pugl/pugl.h @@ -352,9 +352,9 @@ typedef PuglEventAny PuglEventClose; view with the keyboard focus will receive any key press or release events. */ typedef struct { - PuglEventType type; ///< #PUGL_FOCUS_IN or #PUGL_FOCUS_OUT - PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values - bool grab; ///< True iff this is a grab/ungrab event + PuglEventType type; ///< #PUGL_FOCUS_IN or #PUGL_FOCUS_OUT + PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values + PuglCrossingMode mode; ///< Reason for focus change } PuglEventFocus; /** -- cgit v1.2.1