Skip to content

Commit fa91b0c

Browse files
authored
Merge pull request #225 from rygwdn/button-state
keep button state when report does not contain buttons.
2 parents 66478b5 + 4a0f315 commit fa91b0c

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

src/mouse.c

+7-3
Original file line numberDiff line numberDiff line change
@@ -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

230231
void 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

252256
mouse_report_t create_mouse_report(device_t *state, mouse_values_t *values) {

0 commit comments

Comments
 (0)