aboutsummaryrefslogtreecommitdiffstats
path: root/pugl/detail
diff options
context:
space:
mode:
Diffstat (limited to 'pugl/detail')
-rw-r--r--pugl/detail/mac.m9
-rw-r--r--pugl/detail/win.c8
-rw-r--r--pugl/detail/x11.c9
3 files changed, 25 insertions, 1 deletions
diff --git a/pugl/detail/mac.m b/pugl/detail/mac.m
index a438701..385070d 100644
--- a/pugl/detail/mac.m
+++ b/pugl/detail/mac.m
@@ -778,6 +778,15 @@ puglGrabFocus(PuglView* view)
[window makeFirstResponder:view->impl->wrapperView];
}
+bool
+puglHasFocus(const PuglView* view)
+{
+ PuglInternals* const impl = view->impl;
+
+ return ([[impl->wrapperView window] isKeyWindow] &&
+ [[impl->wrapperView window] firstResponder] == impl->wrapperView);
+}
+
void
puglRequestAttention(PuglView* view)
{
diff --git a/pugl/detail/win.c b/pugl/detail/win.c
index 42b9427..a4597b5 100644
--- a/pugl/detail/win.c
+++ b/pugl/detail/win.c
@@ -631,10 +631,16 @@ puglGrabFocus(PuglView* view)
SetFocus(view->impl->hwnd);
}
+bool
+puglHasFocus(const PuglView* view)
+{
+ return GetFocus() == view->impl->hwnd;
+}
+
void
puglRequestAttention(PuglView* view)
{
- if (!view->impl->mouseTracked || GetFocus() != view->impl->hwnd) {
+ if (!view->impl->mouseTracked || !puglHasFocus(view)) {
FlashWindow(view->impl->hwnd, TRUE);
SetTimer(view->impl->hwnd, PUGL_URGENT_TIMER_ID, 500, NULL);
view->impl->flashing = true;
diff --git a/pugl/detail/x11.c b/pugl/detail/x11.c
index a766ace..cb9f0e2 100644
--- a/pugl/detail/x11.c
+++ b/pugl/detail/x11.c
@@ -443,6 +443,15 @@ puglGrabFocus(PuglView* view)
view->impl->display, view->impl->win, RevertToNone, CurrentTime);
}
+bool
+puglHasFocus(const PuglView* view)
+{
+ int revertTo = 0;
+ Window focusedWindow = 0;
+ XGetInputFocus(view->impl->display, &focusedWindow, &revertTo);
+ return focusedWindow == view->impl->win;
+}
+
void
puglRequestAttention(PuglView* view)
{