@@ -219,12 +219,13 @@ void do_screen_switch(device_t *state, int direction) {
219219 switch_virtual_desktop (state , output , output -> screen_index + 1 , direction );
220220}
221221
222- inline void extract_value (bool uses_id , int32_t * dst , report_val_t * src , uint8_t * raw_report , int len ) {
222+ static inline bool extract_value (bool uses_id , int32_t * dst , report_val_t * src , uint8_t * raw_report , int len ) {
223223 /* If HID Report ID is used, the report is prefixed by the report ID so we have to move by 1 byte */
224224 if (uses_id && (* raw_report ++ != src -> report_id ))
225- return ;
225+ return false ;
226226
227227 * dst = get_report_value (raw_report , len , src );
228+ return true;
228229}
229230
230231void extract_report_values (uint8_t * raw_report , int len , device_t * state , mouse_values_t * values , hid_interface_t * iface ) {
@@ -246,7 +247,10 @@ void extract_report_values(uint8_t *raw_report, int len, device_t *state, mouse_
246247 extract_value (uses_id , & values -> move_y , & mouse -> move_y , raw_report , len );
247248 extract_value (uses_id , & values -> wheel , & mouse -> wheel , raw_report , len );
248249 extract_value (uses_id , & values -> pan , & mouse -> pan , raw_report , len );
249- extract_value (uses_id , & values -> buttons , & mouse -> buttons , raw_report , len );
250+
251+ if (!extract_value (uses_id , & values -> buttons , & mouse -> buttons , raw_report , len )) {
252+ values -> buttons = state -> mouse_buttons ;
253+ }
250254}
251255
252256mouse_report_t create_mouse_report (device_t * state , mouse_values_t * values ) {
0 commit comments