From f98143d60bf7065ca8c59bf610d60c2a6dee55e7 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Mon, 29 Apr 2019 18:16:18 -0700 Subject: [PATCH] Add GetGamepadsForDisplay message for initializing inputs --- components/webvr/webvr_thread.rs | 29 +++++++++++++++++++++++++ components/webvr_traits/webvr_traits.rs | 4 ++++ 2 files changed, 33 insertions(+) diff --git a/components/webvr/webvr_thread.rs b/components/webvr/webvr_thread.rs index 1077581f10c..e90ddbf7df5 100644 --- a/components/webvr/webvr_thread.rs +++ b/components/webvr/webvr_thread.rs @@ -128,6 +128,9 @@ impl WebVRThread { WebVRMsg::GetGamepads(synced_ids, sender) => { self.handle_get_gamepads(synced_ids, sender); }, + WebVRMsg::GetGamepadsForDisplay(display_id, sender) => { + self.handle_get_gamepads_for_display(display_id, sender); + }, WebVRMsg::Exit => break, } } @@ -251,6 +254,32 @@ impl WebVRThread { self.vr_compositor_chan.send(compositor).unwrap(); } + fn handle_get_gamepads_for_display( + &mut self, + display_id: u32, + sender: IpcSender>>, + ) { + match self.service.get_display(display_id) { + Some(display) => { + let gamepads = display.borrow_mut().fetch_gamepads(); + match gamepads { + Ok(gamepads) => { + let data = gamepads + .iter() + .map(|g| { + let g = g.borrow(); + (g.data(), g.state()) + }) + .collect(); + sender.send(Ok(data)).unwrap(); + }, + Err(e) => sender.send(Err(e)).unwrap(), + } + }, + None => sender.send(Err("Device not found".into())).unwrap(), + } + } + fn handle_get_gamepads( &mut self, synced_ids: Vec, diff --git a/components/webvr_traits/webvr_traits.rs b/components/webvr_traits/webvr_traits.rs index 0f6dd069867..d21e6c3ff16 100644 --- a/components/webvr_traits/webvr_traits.rs +++ b/components/webvr_traits/webvr_traits.rs @@ -30,5 +30,9 @@ pub enum WebVRMsg { Vec, IpcSender, VRGamepadState)>>>, ), + GetGamepadsForDisplay( + u32, + IpcSender>>, + ), Exit, }