mirror of
https://github.com/libretro/RetroArch
synced 2025-02-04 12:40:07 +00:00
Create x11_check_window
This commit is contained in:
parent
025db14dcf
commit
ac6813dc7f
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user