Create x11_check_window

This commit is contained in:
twinaphex 2015-11-19 10:02:53 +01:00
parent 025db14dcf
commit ac6813dc7f
3 changed files with 58 additions and 52 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -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)