From ac6813dc7f0b219b7c52b5684168c9c39feb7ad7 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 19 Nov 2015 10:02:53 +0100 Subject: [PATCH] Create x11_check_window --- gfx/common/x11_common.c | 55 ++++++++++++++++++++++++++++++++++ gfx/common/x11_common.h | 2 ++ gfx/drivers_context/xegl_ctx.c | 53 +------------------------------- 3 files changed, 58 insertions(+), 52 deletions(-) diff --git a/gfx/common/x11_common.c b/gfx/common/x11_common.c index ff18b2ffd4..602b362ee6 100644 --- a/gfx/common/x11_common.c +++ b/gfx/common/x11_common.c @@ -373,3 +373,58 @@ bool x11_get_metrics(void *data, return true; } + +void x_input_poll_wheel(void *data, XButtonEvent *event, bool latch); + +void x11_check_window(bool *quit) +{ + XEvent event; + driver_t *driver = driver_get_ptr(); + + while (XPending(g_x11_dpy)) + { + bool filter; + + /* Can get events from older windows. Check this. */ + XNextEvent(g_x11_dpy, &event); + filter = XFilterEvent(&event, g_x11_win); + + switch (event.type) + { + case ClientMessage: + if (event.xclient.window == g_x11_win && (Atom)event.xclient.data.l[0] == g_x11_quit_atom) + g_x11_quit = true; + break; + + case DestroyNotify: + if (event.xdestroywindow.window == g_x11_win) + g_x11_quit = true; + break; + + case MapNotify: + if (event.xmap.window == g_x11_win) + g_x11_has_focus = true; + break; + + case UnmapNotify: + if (event.xunmap.window == g_x11_win) + g_x11_has_focus = false; + break; + + case ButtonPress: + x_input_poll_wheel(driver->input_data, &event.xbutton, true); + break; + + case ButtonRelease: + break; + + case KeyPress: + case KeyRelease: + if (event.xkey.window == g_x11_win) + x11_handle_key_event(&event, g_x11_xic, filter); + break; + } + } + + *quit = g_x11_quit; +} diff --git a/gfx/common/x11_common.h b/gfx/common/x11_common.h index 487ceff7b6..0bbff8ea7c 100644 --- a/gfx/common/x11_common.h +++ b/gfx/common/x11_common.h @@ -67,5 +67,7 @@ void x11_handle_key_event(XEvent *event, XIC ic, bool filter); bool x11_get_metrics(void *data, enum display_metric_types type, float *value); +void x11_check_window(bool *quit); + #endif diff --git a/gfx/drivers_context/xegl_ctx.c b/gfx/drivers_context/xegl_ctx.c index 54fe622ab5..1ab329a992 100644 --- a/gfx/drivers_context/xegl_ctx.c +++ b/gfx/drivers_context/xegl_ctx.c @@ -129,17 +129,11 @@ static void gfx_ctx_xegl_swap_interval(void *data, unsigned interval) } } -void x_input_poll_wheel(void *data, XButtonEvent *event, bool latch); - static void gfx_ctx_xegl_check_window(void *data, bool *quit, bool *resize, unsigned *width, unsigned *height, unsigned frame_count) { - XEvent event; unsigned new_width = *width; unsigned new_height = *height; - driver_t *driver = driver_get_ptr(); - - (void)frame_count; gfx_ctx_xegl_get_video_size(data, &new_width, &new_height); @@ -150,52 +144,7 @@ static void gfx_ctx_xegl_check_window(void *data, bool *quit, *height = new_height; } - while (XPending(g_x11_dpy)) - { - bool filter; - - /* Can get events from older windows. Check this. */ - XNextEvent(g_x11_dpy, &event); - filter = XFilterEvent(&event, g_x11_win); - - switch (event.type) - { - case ClientMessage: - if (event.xclient.window == g_x11_win && (Atom)event.xclient.data.l[0] == g_x11_quit_atom) - g_x11_quit = true; - break; - - case DestroyNotify: - if (event.xdestroywindow.window == g_x11_win) - g_x11_quit = true; - break; - - case MapNotify: - if (event.xmap.window == g_x11_win) - g_x11_has_focus = true; - break; - - case UnmapNotify: - if (event.xunmap.window == g_x11_win) - g_x11_has_focus = false; - break; - - case ButtonPress: - x_input_poll_wheel(driver->input_data, &event.xbutton, true); - break; - - case ButtonRelease: - break; - - case KeyPress: - case KeyRelease: - if (event.xkey.window == g_x11_win) - x11_handle_key_event(&event, g_x11_xic, filter); - break; - } - } - - *quit = g_x11_quit; + x11_check_window(quit); } static void gfx_ctx_xegl_swap_buffers(void *data)