Merge pull request #10256 from jdgleaver/threaded-video-show-mouse

(Threaded Video) Enable proper mouse cursor show/hide functionality
This commit is contained in:
Autechre 2020-03-12 16:09:09 +01:00 committed by GitHub
commit c20e83e50a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -57,6 +57,9 @@ enum thread_cmd
CMD_FONT_INIT,
CMD_CUSTOM_COMMAND,
CMD_POKE_SHOW_MOUSE,
CMD_POKE_GRAB_MOUSE_TOGGLE,
CMD_DUMMY = INT_MAX
};
@ -529,6 +532,19 @@ static bool video_thread_handle_packet(
video_thread_reply(thr, &pkt);
break;
case CMD_POKE_SHOW_MOUSE:
if (thr->poke && thr->poke->show_mouse)
thr->poke->show_mouse(thr->driver_data,
pkt.data.b);
video_thread_reply(thr, &pkt);
break;
case CMD_POKE_GRAB_MOUSE_TOGGLE:
if (thr->poke && thr->poke->grab_mouse_toggle)
thr->poke->grab_mouse_toggle(thr->driver_data);
video_thread_reply(thr, &pkt);
break;
case CMD_VIDEO_NONE:
/* Never reply on no command. Possible deadlock if
* thread sends command right after frame update. */
@ -1177,6 +1193,29 @@ static void thread_set_osd_msg(void *data,
thr->poke->set_osd_msg(thr->driver_data, msg, params, font);
}
static void thread_show_mouse(void *data, bool state)
{
thread_video_t *thr = (thread_video_t*)data;
thread_packet_t pkt = { CMD_POKE_SHOW_MOUSE };
if (!thr)
return;
pkt.data.b = state;
video_thread_send_and_wait_user_to_thread(thr, &pkt);
}
static void thread_grab_mouse_toggle(void *data)
{
thread_video_t *thr = (thread_video_t*)data;
thread_packet_t pkt = { CMD_POKE_GRAB_MOUSE_TOGGLE };
if (!thr)
return;
video_thread_send_and_wait_user_to_thread(thr, &pkt);
}
static uintptr_t thread_load_texture(void *video_data, void *data,
bool threaded, enum texture_filter_type filter_type)
{
@ -1247,8 +1286,8 @@ static const video_poke_interface_t thread_poke = {
thread_set_texture_enable,
thread_set_osd_msg,
NULL,
NULL,
thread_show_mouse,
thread_grab_mouse_toggle,
thread_get_current_shader,
NULL, /* get_current_software_framebuffer */