Wine-devel
Threads by month
- ----- 2026 -----
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
September 2021
- 83 participants
- 748 discussions
[PATCH 1/7] winegstreamer: Emit absolute timestamp in media source.
by Giovanni Mascellani 22 Sep '21
by Giovanni Mascellani 22 Sep '21
22 Sep '21
Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com>
---
dlls/winegstreamer/media_source.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
index 01ab626254a..cd8957db7b1 100644
--- a/dlls/winegstreamer/media_source.c
+++ b/dlls/winegstreamer/media_source.c
@@ -100,8 +100,6 @@ struct media_source
SOURCE_SHUTDOWN,
} state;
- LONGLONG start_time;
-
HANDLE read_thread;
bool read_thread_shutdown;
};
@@ -274,7 +272,6 @@ static void start_pipeline(struct media_source *source, struct source_async_comm
position->vt = VT_I8;
position->hVal.QuadPart = 0;
}
- source->start_time = position->hVal.QuadPart;
for (i = 0; i < source->stream_count; i++)
{
@@ -427,7 +424,7 @@ static void send_buffer(struct media_stream *stream, const struct wg_parser_even
goto out;
}
- if (FAILED(hr = IMFSample_SetSampleTime(sample, event->u.buffer.pts - stream->parent_source->start_time)))
+ if (FAILED(hr = IMFSample_SetSampleTime(sample, event->u.buffer.pts)))
{
ERR("Failed to set sample time, hr %#x.\n", hr);
goto out;
--
2.33.0
4
16
22 Sep '21
And use impl everywhere instead of inconsistent private / ext / device.
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
v2: Rebased the IOHID changes, thanks for fixing the typo.
dlls/winebus.sys/bus_sdl.c | 254 ++++++++++++++++++-------------------
1 file changed, 127 insertions(+), 127 deletions(-)
diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c
index 9f6596f5c7d..eaa0ed9329e 100644
--- a/dlls/winebus.sys/bus_sdl.c
+++ b/dlls/winebus.sys/bus_sdl.c
@@ -115,7 +115,7 @@ static Uint16 (*pSDL_JoystickGetProduct)(SDL_Joystick * joystick);
static Uint16 (*pSDL_JoystickGetProductVersion)(SDL_Joystick * joystick);
static Uint16 (*pSDL_JoystickGetVendor)(SDL_Joystick * joystick);
-struct platform_private
+struct sdl_device
{
struct unix_device unix_device;
@@ -137,55 +137,55 @@ struct platform_private
int haptic_effect_id;
};
-static inline struct platform_private *impl_from_unix_device(struct unix_device *iface)
+static inline struct sdl_device *impl_from_unix_device(struct unix_device *iface)
{
- return CONTAINING_RECORD(iface, struct platform_private, unix_device);
+ return CONTAINING_RECORD(iface, struct sdl_device, unix_device);
}
-static struct platform_private *find_device_from_id(SDL_JoystickID id)
+static struct sdl_device *find_device_from_id(SDL_JoystickID id)
{
- struct platform_private *device;
+ struct sdl_device *impl;
- LIST_FOR_EACH_ENTRY(device, &device_list, struct platform_private, unix_device.entry)
- if (device->id == id) return device;
+ LIST_FOR_EACH_ENTRY(impl, &device_list, struct sdl_device, unix_device.entry)
+ if (impl->id == id) return impl;
return NULL;
}
-static void set_button_value(struct platform_private *ext, int index, int value)
+static void set_button_value(struct sdl_device *impl, int index, int value)
{
- int byte_index = ext->button_start + index / 8;
+ int byte_index = impl->button_start + index / 8;
int bit_index = index % 8;
BYTE mask = 1 << bit_index;
if (value)
{
- ext->report_buffer[byte_index] = ext->report_buffer[byte_index] | mask;
+ impl->report_buffer[byte_index] = impl->report_buffer[byte_index] | mask;
}
else
{
mask = ~mask;
- ext->report_buffer[byte_index] = ext->report_buffer[byte_index] & mask;
+ impl->report_buffer[byte_index] = impl->report_buffer[byte_index] & mask;
}
}
-static void set_axis_value(struct platform_private *ext, int index, short value)
+static void set_axis_value(struct sdl_device *impl, int index, short value)
{
- DWORD *report = (DWORD *)(ext->report_buffer + ext->axis_start);
+ DWORD *report = (DWORD *)(impl->report_buffer + impl->axis_start);
report[index] = LE_DWORD(value);
}
-static void set_ball_value(struct platform_private *ext, int index, int value1, int value2)
+static void set_ball_value(struct sdl_device *impl, int index, int value1, int value2)
{
int offset;
- offset = ext->ball_start + (index * sizeof(DWORD));
- *(DWORD *)&ext->report_buffer[offset] = LE_DWORD(value1);
- *(DWORD *)&ext->report_buffer[offset + sizeof(DWORD)] = LE_DWORD(value2);
+ offset = impl->ball_start + (index * sizeof(DWORD));
+ *(DWORD *)&impl->report_buffer[offset] = LE_DWORD(value1);
+ *(DWORD *)&impl->report_buffer[offset + sizeof(DWORD)] = LE_DWORD(value2);
}
-static void set_hat_value(struct platform_private *ext, int index, int value)
+static void set_hat_value(struct sdl_device *impl, int index, int value)
{
- int byte = ext->hat_start + index;
+ int byte = impl->hat_start + index;
unsigned char val;
switch (value)
@@ -205,35 +205,35 @@ static void set_hat_value(struct platform_private *ext, int index, int value)
default: return;
}
- ext->report_buffer[byte] = val;
+ impl->report_buffer[byte] = val;
}
-static BOOL descriptor_add_haptic(struct platform_private *ext)
+static BOOL descriptor_add_haptic(struct sdl_device *impl)
{
- if (pSDL_JoystickIsHaptic(ext->sdl_joystick))
+ if (pSDL_JoystickIsHaptic(impl->sdl_joystick))
{
- ext->sdl_haptic = pSDL_HapticOpenFromJoystick(ext->sdl_joystick);
- if (ext->sdl_haptic &&
- ((pSDL_HapticQuery(ext->sdl_haptic) & SDL_HAPTIC_LEFTRIGHT) != 0 ||
- pSDL_HapticRumbleSupported(ext->sdl_haptic)))
+ impl->sdl_haptic = pSDL_HapticOpenFromJoystick(impl->sdl_joystick);
+ if (impl->sdl_haptic &&
+ ((pSDL_HapticQuery(impl->sdl_haptic) & SDL_HAPTIC_LEFTRIGHT) != 0 ||
+ pSDL_HapticRumbleSupported(impl->sdl_haptic)))
{
- pSDL_HapticStopAll(ext->sdl_haptic);
- pSDL_HapticRumbleInit(ext->sdl_haptic);
- if (!hid_descriptor_add_haptics(&ext->desc))
+ pSDL_HapticStopAll(impl->sdl_haptic);
+ pSDL_HapticRumbleInit(impl->sdl_haptic);
+ if (!hid_descriptor_add_haptics(&impl->desc))
return FALSE;
- ext->haptic_effect_id = -1;
+ impl->haptic_effect_id = -1;
}
else
{
- pSDL_HapticClose(ext->sdl_haptic);
- ext->sdl_haptic = NULL;
+ pSDL_HapticClose(impl->sdl_haptic);
+ impl->sdl_haptic = NULL;
}
}
return TRUE;
}
-static NTSTATUS build_joystick_report_descriptor(struct platform_private *ext)
+static NTSTATUS build_joystick_report_descriptor(struct sdl_device *impl)
{
static const USAGE joystick_usages[] =
{
@@ -251,72 +251,72 @@ static NTSTATUS build_joystick_report_descriptor(struct platform_private *ext)
int i, report_size = 1;
int button_count, axis_count, ball_count, hat_count;
- axis_count = pSDL_JoystickNumAxes(ext->sdl_joystick);
+ axis_count = pSDL_JoystickNumAxes(impl->sdl_joystick);
if (axis_count > 6)
{
FIXME("Clamping joystick to 6 axis\n");
axis_count = 6;
}
- ext->axis_start = report_size;
+ impl->axis_start = report_size;
report_size += (sizeof(DWORD) * axis_count);
- ball_count = pSDL_JoystickNumBalls(ext->sdl_joystick);
+ ball_count = pSDL_JoystickNumBalls(impl->sdl_joystick);
if (axis_count + ball_count * 2 > ARRAY_SIZE(joystick_usages))
{
FIXME("Capping ball + axis at 9\n");
ball_count = (ARRAY_SIZE(joystick_usages) - axis_count) / 2;
}
- ext->ball_start = report_size;
+ impl->ball_start = report_size;
report_size += (sizeof(DWORD) * 2 * ball_count);
- hat_count = pSDL_JoystickNumHats(ext->sdl_joystick);
- ext->hat_start = report_size;
+ hat_count = pSDL_JoystickNumHats(impl->sdl_joystick);
+ impl->hat_start = report_size;
report_size += hat_count;
/* For now lump all buttons just into incremental usages, Ignore Keys */
- button_count = pSDL_JoystickNumButtons(ext->sdl_joystick);
- ext->button_start = report_size;
+ button_count = pSDL_JoystickNumButtons(impl->sdl_joystick);
+ impl->button_start = report_size;
report_size += (button_count + 7) / 8;
TRACE("Report will be %i bytes\n", report_size);
- if (!hid_descriptor_begin(&ext->desc, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_JOYSTICK))
+ if (!hid_descriptor_begin(&impl->desc, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_JOYSTICK))
return STATUS_NO_MEMORY;
- if (axis_count && !hid_descriptor_add_axes(&ext->desc, axis_count, HID_USAGE_PAGE_GENERIC,
+ if (axis_count && !hid_descriptor_add_axes(&impl->desc, axis_count, HID_USAGE_PAGE_GENERIC,
joystick_usages, FALSE, -32768, 32767))
return STATUS_NO_MEMORY;
- if (ball_count && !hid_descriptor_add_axes(&ext->desc, ball_count * 2, HID_USAGE_PAGE_GENERIC,
+ if (ball_count && !hid_descriptor_add_axes(&impl->desc, ball_count * 2, HID_USAGE_PAGE_GENERIC,
&joystick_usages[axis_count], TRUE, INT32_MIN, INT32_MAX))
return STATUS_NO_MEMORY;
- if (hat_count && !hid_descriptor_add_hatswitch(&ext->desc, hat_count))
+ if (hat_count && !hid_descriptor_add_hatswitch(&impl->desc, hat_count))
return STATUS_NO_MEMORY;
- if (button_count && !hid_descriptor_add_buttons(&ext->desc, HID_USAGE_PAGE_BUTTON, 1, button_count))
+ if (button_count && !hid_descriptor_add_buttons(&impl->desc, HID_USAGE_PAGE_BUTTON, 1, button_count))
return STATUS_NO_MEMORY;
- if (!descriptor_add_haptic(ext))
+ if (!descriptor_add_haptic(impl))
return STATUS_NO_MEMORY;
- if (!hid_descriptor_end(&ext->desc))
+ if (!hid_descriptor_end(&impl->desc))
return STATUS_NO_MEMORY;
- ext->buffer_length = report_size;
- if (!(ext->report_buffer = calloc(1, report_size))) goto failed;
+ impl->buffer_length = report_size;
+ if (!(impl->report_buffer = calloc(1, report_size))) goto failed;
/* Initialize axis in the report */
for (i = 0; i < axis_count; i++)
- set_axis_value(ext, i, pSDL_JoystickGetAxis(ext->sdl_joystick, i));
+ set_axis_value(impl, i, pSDL_JoystickGetAxis(impl->sdl_joystick, i));
for (i = 0; i < hat_count; i++)
- set_hat_value(ext, i, pSDL_JoystickGetHat(ext->sdl_joystick, i));
+ set_hat_value(impl, i, pSDL_JoystickGetHat(impl->sdl_joystick, i));
return STATUS_SUCCESS;
failed:
- free(ext->report_buffer);
- hid_descriptor_free(&ext->desc);
+ free(impl->report_buffer);
+ hid_descriptor_free(&impl->desc);
return STATUS_NO_MEMORY;
}
@@ -347,7 +347,7 @@ static SHORT compose_dpad_value(SDL_GameController *joystick)
return SDL_HAT_CENTERED;
}
-static NTSTATUS build_controller_report_descriptor(struct platform_private *ext)
+static NTSTATUS build_controller_report_descriptor(struct sdl_device *impl)
{
static const USAGE left_axis_usages[] = {HID_USAGE_GENERIC_X, HID_USAGE_GENERIC_Y};
static const USAGE right_axis_usages[] = {HID_USAGE_GENERIC_RX, HID_USAGE_GENERIC_RY};
@@ -355,52 +355,52 @@ static NTSTATUS build_controller_report_descriptor(struct platform_private *ext)
ULONG i, button_count = SDL_CONTROLLER_BUTTON_MAX - 1;
C_ASSERT(SDL_CONTROLLER_AXIS_MAX == 6);
- ext->axis_start = 0;
- ext->hat_start = SDL_CONTROLLER_AXIS_MAX * sizeof(DWORD);
- ext->button_start = ext->hat_start + 1;
- ext->buffer_length = ext->button_start + (button_count + 7) / 8;
+ impl->axis_start = 0;
+ impl->hat_start = SDL_CONTROLLER_AXIS_MAX * sizeof(DWORD);
+ impl->button_start = impl->hat_start + 1;
+ impl->buffer_length = impl->button_start + (button_count + 7) / 8;
- TRACE("Report will be %i bytes\n", ext->buffer_length);
+ TRACE("Report will be %i bytes\n", impl->buffer_length);
- if (!hid_descriptor_begin(&ext->desc, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_GAMEPAD))
+ if (!hid_descriptor_begin(&impl->desc, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_GAMEPAD))
return STATUS_NO_MEMORY;
- if (!hid_descriptor_add_axes(&ext->desc, 2, HID_USAGE_PAGE_GENERIC, left_axis_usages,
+ if (!hid_descriptor_add_axes(&impl->desc, 2, HID_USAGE_PAGE_GENERIC, left_axis_usages,
FALSE, -32768, 32767))
return STATUS_NO_MEMORY;
- if (!hid_descriptor_add_axes(&ext->desc, 2, HID_USAGE_PAGE_GENERIC, right_axis_usages,
+ if (!hid_descriptor_add_axes(&impl->desc, 2, HID_USAGE_PAGE_GENERIC, right_axis_usages,
FALSE, -32768, 32767))
return STATUS_NO_MEMORY;
- if (!hid_descriptor_add_axes(&ext->desc, 2, HID_USAGE_PAGE_GENERIC, trigger_axis_usages,
+ if (!hid_descriptor_add_axes(&impl->desc, 2, HID_USAGE_PAGE_GENERIC, trigger_axis_usages,
FALSE, 0, 32767))
return STATUS_NO_MEMORY;
- if (!hid_descriptor_add_hatswitch(&ext->desc, 1))
+ if (!hid_descriptor_add_hatswitch(&impl->desc, 1))
return STATUS_NO_MEMORY;
- if (!hid_descriptor_add_buttons(&ext->desc, HID_USAGE_PAGE_BUTTON, 1, button_count))
+ if (!hid_descriptor_add_buttons(&impl->desc, HID_USAGE_PAGE_BUTTON, 1, button_count))
return STATUS_NO_MEMORY;
- if (!descriptor_add_haptic(ext))
+ if (!descriptor_add_haptic(impl))
return STATUS_NO_MEMORY;
- if (!hid_descriptor_end(&ext->desc))
+ if (!hid_descriptor_end(&impl->desc))
return STATUS_NO_MEMORY;
- if (!(ext->report_buffer = calloc(1, ext->buffer_length))) goto failed;
+ if (!(impl->report_buffer = calloc(1, impl->buffer_length))) goto failed;
/* Initialize axis in the report */
for (i = SDL_CONTROLLER_AXIS_LEFTX; i < SDL_CONTROLLER_AXIS_MAX; i++)
- set_axis_value(ext, i, pSDL_GameControllerGetAxis(ext->sdl_controller, i));
- set_hat_value(ext, 0, compose_dpad_value(ext->sdl_controller));
+ set_axis_value(impl, i, pSDL_GameControllerGetAxis(impl->sdl_controller, i));
+ set_hat_value(impl, 0, compose_dpad_value(impl->sdl_controller));
return STATUS_SUCCESS;
failed:
- free(ext->report_buffer);
- hid_descriptor_free(&ext->desc);
+ free(impl->report_buffer);
+ hid_descriptor_free(&impl->desc);
return STATUS_NO_MEMORY;
}
@@ -410,51 +410,51 @@ static void sdl_device_destroy(struct unix_device *iface)
static NTSTATUS sdl_device_start(struct unix_device *iface)
{
- struct platform_private *ext = impl_from_unix_device(iface);
- if (ext->sdl_controller) return build_controller_report_descriptor(ext);
- return build_joystick_report_descriptor(ext);
+ struct sdl_device *impl = impl_from_unix_device(iface);
+ if (impl->sdl_controller) return build_controller_report_descriptor(impl);
+ return build_joystick_report_descriptor(impl);
}
static void sdl_device_stop(struct unix_device *iface)
{
- struct platform_private *private = impl_from_unix_device(iface);
+ struct sdl_device *impl = impl_from_unix_device(iface);
- pSDL_JoystickClose(private->sdl_joystick);
- if (private->sdl_controller) pSDL_GameControllerClose(private->sdl_controller);
- if (private->sdl_haptic) pSDL_HapticClose(private->sdl_haptic);
+ pSDL_JoystickClose(impl->sdl_joystick);
+ if (impl->sdl_controller) pSDL_GameControllerClose(impl->sdl_controller);
+ if (impl->sdl_haptic) pSDL_HapticClose(impl->sdl_haptic);
pthread_mutex_lock(&sdl_cs);
- list_remove(&private->unix_device.entry);
+ list_remove(&impl->unix_device.entry);
pthread_mutex_unlock(&sdl_cs);
}
static NTSTATUS sdl_device_get_reportdescriptor(struct unix_device *iface, BYTE *buffer,
DWORD length, DWORD *out_length)
{
- struct platform_private *ext = impl_from_unix_device(iface);
+ struct sdl_device *impl = impl_from_unix_device(iface);
- *out_length = ext->desc.size;
- if (length < ext->desc.size) return STATUS_BUFFER_TOO_SMALL;
+ *out_length = impl->desc.size;
+ if (length < impl->desc.size) return STATUS_BUFFER_TOO_SMALL;
- memcpy(buffer, ext->desc.data, ext->desc.size);
+ memcpy(buffer, impl->desc.data, impl->desc.size);
return STATUS_SUCCESS;
}
static void sdl_device_set_output_report(struct unix_device *iface, HID_XFER_PACKET *packet, IO_STATUS_BLOCK *io)
{
- struct platform_private *ext = impl_from_unix_device(iface);
+ struct sdl_device *impl = impl_from_unix_device(iface);
- if (ext->sdl_haptic && packet->reportId == 0)
+ if (impl->sdl_haptic && packet->reportId == 0)
{
WORD left = packet->reportBuffer[2] * 128;
WORD right = packet->reportBuffer[3] * 128;
- if (ext->haptic_effect_id >= 0)
+ if (impl->haptic_effect_id >= 0)
{
- pSDL_HapticDestroyEffect(ext->sdl_haptic, ext->haptic_effect_id);
- ext->haptic_effect_id = -1;
+ pSDL_HapticDestroyEffect(impl->sdl_haptic, impl->haptic_effect_id);
+ impl->haptic_effect_id = -1;
}
- pSDL_HapticStopAll(ext->sdl_haptic);
+ pSDL_HapticStopAll(impl->sdl_haptic);
if (left != 0 || right != 0)
{
SDL_HapticEffect effect;
@@ -465,15 +465,15 @@ static void sdl_device_set_output_report(struct unix_device *iface, HID_XFER_PAC
effect.leftright.large_magnitude = left;
effect.leftright.small_magnitude = right;
- ext->haptic_effect_id = pSDL_HapticNewEffect(ext->sdl_haptic, &effect);
- if (ext->haptic_effect_id >= 0)
+ impl->haptic_effect_id = pSDL_HapticNewEffect(impl->sdl_haptic, &effect);
+ if (impl->haptic_effect_id >= 0)
{
- pSDL_HapticRunEffect(ext->sdl_haptic, ext->haptic_effect_id, 1);
+ pSDL_HapticRunEffect(impl->sdl_haptic, impl->haptic_effect_id, 1);
}
else
{
float i = (float)((left + right)/2.0) / 32767.0;
- pSDL_HapticRumblePlay(ext->sdl_haptic, i, -1);
+ pSDL_HapticRumblePlay(impl->sdl_haptic, i, -1);
}
}
@@ -510,11 +510,11 @@ static const struct unix_device_vtbl sdl_device_vtbl =
sdl_device_set_feature_report,
};
-static BOOL set_report_from_joystick_event(struct platform_private *device, SDL_Event *event)
+static BOOL set_report_from_joystick_event(struct sdl_device *impl, SDL_Event *event)
{
- struct unix_device *iface = &device->unix_device;
+ struct unix_device *iface = &impl->unix_device;
- if (device->sdl_controller) return TRUE; /* use controller events instead */
+ if (impl->sdl_controller) return TRUE; /* use controller events instead */
switch(event->type)
{
@@ -523,9 +523,9 @@ static BOOL set_report_from_joystick_event(struct platform_private *device, SDL_
{
SDL_JoyButtonEvent *ie = &event->jbutton;
- set_button_value(device, ie->button, ie->state);
+ set_button_value(impl, ie->button, ie->state);
- bus_event_queue_input_report(&event_queue, iface, device->report_buffer, device->buffer_length);
+ bus_event_queue_input_report(&event_queue, iface, impl->report_buffer, impl->buffer_length);
break;
}
case SDL_JOYAXISMOTION:
@@ -534,8 +534,8 @@ static BOOL set_report_from_joystick_event(struct platform_private *device, SDL_
if (ie->axis < 6)
{
- set_axis_value(device, ie->axis, ie->value);
- bus_event_queue_input_report(&event_queue, iface, device->report_buffer, device->buffer_length);
+ set_axis_value(impl, ie->axis, ie->value);
+ bus_event_queue_input_report(&event_queue, iface, impl->report_buffer, impl->buffer_length);
}
break;
}
@@ -543,16 +543,16 @@ static BOOL set_report_from_joystick_event(struct platform_private *device, SDL_
{
SDL_JoyBallEvent *ie = &event->jball;
- set_ball_value(device, ie->ball, ie->xrel, ie->yrel);
- bus_event_queue_input_report(&event_queue, iface, device->report_buffer, device->buffer_length);
+ set_ball_value(impl, ie->ball, ie->xrel, ie->yrel);
+ bus_event_queue_input_report(&event_queue, iface, impl->report_buffer, impl->buffer_length);
break;
}
case SDL_JOYHATMOTION:
{
SDL_JoyHatEvent *ie = &event->jhat;
- set_hat_value(device, ie->hat, ie->value);
- bus_event_queue_input_report(&event_queue, iface, device->report_buffer, device->buffer_length);
+ set_hat_value(impl, ie->hat, ie->value);
+ bus_event_queue_input_report(&event_queue, iface, impl->report_buffer, impl->buffer_length);
break;
}
default:
@@ -561,9 +561,9 @@ static BOOL set_report_from_joystick_event(struct platform_private *device, SDL_
return FALSE;
}
-static BOOL set_report_from_controller_event(struct platform_private *device, SDL_Event *event)
+static BOOL set_report_from_controller_event(struct sdl_device *impl, SDL_Event *event)
{
- struct unix_device *iface = &device->unix_device;
+ struct unix_device *iface = &impl->unix_device;
switch(event->type)
{
@@ -579,7 +579,7 @@ static BOOL set_report_from_controller_event(struct platform_private *device, SD
case SDL_CONTROLLER_BUTTON_DPAD_DOWN:
case SDL_CONTROLLER_BUTTON_DPAD_LEFT:
case SDL_CONTROLLER_BUTTON_DPAD_RIGHT:
- set_hat_value(device, 0, compose_dpad_value(device->sdl_controller));
+ set_hat_value(impl, 0, compose_dpad_value(impl->sdl_controller));
break;
case SDL_CONTROLLER_BUTTON_LEFTSHOULDER: button = 4; break;
case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER: button = 5; break;
@@ -590,16 +590,16 @@ static BOOL set_report_from_controller_event(struct platform_private *device, SD
case SDL_CONTROLLER_BUTTON_GUIDE: button = 10; break;
}
- set_button_value(device, button, ie->state);
- bus_event_queue_input_report(&event_queue, iface, device->report_buffer, device->buffer_length);
+ set_button_value(impl, button, ie->state);
+ bus_event_queue_input_report(&event_queue, iface, impl->report_buffer, impl->buffer_length);
break;
}
case SDL_CONTROLLERAXISMOTION:
{
SDL_ControllerAxisEvent *ie = &event->caxis;
- set_axis_value(device, ie->axis, ie->value);
- bus_event_queue_input_report(&event_queue, iface, device->report_buffer, device->buffer_length);
+ set_axis_value(impl, ie->axis, ie->value);
+ bus_event_queue_input_report(&event_queue, iface, impl->report_buffer, impl->buffer_length);
break;
}
default:
@@ -616,7 +616,7 @@ static void sdl_add_device(unsigned int index)
.manufacturer = {"SDL"},
.serialnumber = {"0000"},
};
- struct platform_private *private;
+ struct sdl_device *impl;
SDL_Joystick* joystick;
SDL_JoystickID id;
@@ -664,18 +664,18 @@ static void sdl_add_device(unsigned int index)
TRACE("%s id %d, desc %s.\n", controller ? "controller" : "joystick", id, debugstr_device_desc(&desc));
- if (!(private = unix_device_create(&sdl_device_vtbl, sizeof(struct platform_private)))) return;
- list_add_tail(&device_list, &private->unix_device.entry);
- private->sdl_joystick = joystick;
- private->sdl_controller = controller;
- private->id = id;
+ if (!(impl = unix_device_create(&sdl_device_vtbl, sizeof(struct sdl_device)))) return;
+ list_add_tail(&device_list, &impl->unix_device.entry);
+ impl->sdl_joystick = joystick;
+ impl->sdl_controller = controller;
+ impl->id = id;
- bus_event_queue_device_created(&event_queue, &private->unix_device, &desc);
+ bus_event_queue_device_created(&event_queue, &impl->unix_device, &desc);
}
static void process_device_event(SDL_Event *event)
{
- struct platform_private *device;
+ struct sdl_device *impl;
SDL_JoystickID id;
TRACE_(hid_report)("Received action %x\n", event->type);
@@ -687,22 +687,22 @@ static void process_device_event(SDL_Event *event)
else if (event->type == SDL_JOYDEVICEREMOVED)
{
id = ((SDL_JoyDeviceEvent *)event)->which;
- device = find_device_from_id(id);
- if (device) bus_event_queue_device_removed(&event_queue, &device->unix_device);
+ impl = find_device_from_id(id);
+ if (impl) bus_event_queue_device_removed(&event_queue, &impl->unix_device);
else WARN("failed to find device with id %d\n", id);
}
else if (event->type >= SDL_JOYAXISMOTION && event->type <= SDL_JOYBUTTONUP)
{
id = ((SDL_JoyButtonEvent *)event)->which;
- device = find_device_from_id(id);
- if (device) set_report_from_joystick_event(device, event);
+ impl = find_device_from_id(id);
+ if (impl) set_report_from_joystick_event(impl, event);
else WARN("failed to find device with id %d\n", id);
}
else if (event->type >= SDL_CONTROLLERAXISMOTION && event->type <= SDL_CONTROLLERBUTTONUP)
{
id = ((SDL_ControllerButtonEvent *)event)->which;
- device = find_device_from_id(id);
- if (device) set_report_from_controller_event(device, event);
+ impl = find_device_from_id(id);
+ if (impl) set_report_from_controller_event(impl, event);
else WARN("failed to find device with id %d\n", id);
}
--
2.33.0
1
5
22 Sep '21
And use impl everywhere instead of inconsistent private / ext / device.
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
dlls/winebus.sys/bus_sdl.c | 254 ++++++++++++++++++-------------------
1 file changed, 127 insertions(+), 127 deletions(-)
diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c
index 9f6596f5c7d..eaa0ed9329e 100644
--- a/dlls/winebus.sys/bus_sdl.c
+++ b/dlls/winebus.sys/bus_sdl.c
@@ -115,7 +115,7 @@ static Uint16 (*pSDL_JoystickGetProduct)(SDL_Joystick * joystick);
static Uint16 (*pSDL_JoystickGetProductVersion)(SDL_Joystick * joystick);
static Uint16 (*pSDL_JoystickGetVendor)(SDL_Joystick * joystick);
-struct platform_private
+struct sdl_device
{
struct unix_device unix_device;
@@ -137,55 +137,55 @@ struct platform_private
int haptic_effect_id;
};
-static inline struct platform_private *impl_from_unix_device(struct unix_device *iface)
+static inline struct sdl_device *impl_from_unix_device(struct unix_device *iface)
{
- return CONTAINING_RECORD(iface, struct platform_private, unix_device);
+ return CONTAINING_RECORD(iface, struct sdl_device, unix_device);
}
-static struct platform_private *find_device_from_id(SDL_JoystickID id)
+static struct sdl_device *find_device_from_id(SDL_JoystickID id)
{
- struct platform_private *device;
+ struct sdl_device *impl;
- LIST_FOR_EACH_ENTRY(device, &device_list, struct platform_private, unix_device.entry)
- if (device->id == id) return device;
+ LIST_FOR_EACH_ENTRY(impl, &device_list, struct sdl_device, unix_device.entry)
+ if (impl->id == id) return impl;
return NULL;
}
-static void set_button_value(struct platform_private *ext, int index, int value)
+static void set_button_value(struct sdl_device *impl, int index, int value)
{
- int byte_index = ext->button_start + index / 8;
+ int byte_index = impl->button_start + index / 8;
int bit_index = index % 8;
BYTE mask = 1 << bit_index;
if (value)
{
- ext->report_buffer[byte_index] = ext->report_buffer[byte_index] | mask;
+ impl->report_buffer[byte_index] = impl->report_buffer[byte_index] | mask;
}
else
{
mask = ~mask;
- ext->report_buffer[byte_index] = ext->report_buffer[byte_index] & mask;
+ impl->report_buffer[byte_index] = impl->report_buffer[byte_index] & mask;
}
}
-static void set_axis_value(struct platform_private *ext, int index, short value)
+static void set_axis_value(struct sdl_device *impl, int index, short value)
{
- DWORD *report = (DWORD *)(ext->report_buffer + ext->axis_start);
+ DWORD *report = (DWORD *)(impl->report_buffer + impl->axis_start);
report[index] = LE_DWORD(value);
}
-static void set_ball_value(struct platform_private *ext, int index, int value1, int value2)
+static void set_ball_value(struct sdl_device *impl, int index, int value1, int value2)
{
int offset;
- offset = ext->ball_start + (index * sizeof(DWORD));
- *(DWORD *)&ext->report_buffer[offset] = LE_DWORD(value1);
- *(DWORD *)&ext->report_buffer[offset + sizeof(DWORD)] = LE_DWORD(value2);
+ offset = impl->ball_start + (index * sizeof(DWORD));
+ *(DWORD *)&impl->report_buffer[offset] = LE_DWORD(value1);
+ *(DWORD *)&impl->report_buffer[offset + sizeof(DWORD)] = LE_DWORD(value2);
}
-static void set_hat_value(struct platform_private *ext, int index, int value)
+static void set_hat_value(struct sdl_device *impl, int index, int value)
{
- int byte = ext->hat_start + index;
+ int byte = impl->hat_start + index;
unsigned char val;
switch (value)
@@ -205,35 +205,35 @@ static void set_hat_value(struct platform_private *ext, int index, int value)
default: return;
}
- ext->report_buffer[byte] = val;
+ impl->report_buffer[byte] = val;
}
-static BOOL descriptor_add_haptic(struct platform_private *ext)
+static BOOL descriptor_add_haptic(struct sdl_device *impl)
{
- if (pSDL_JoystickIsHaptic(ext->sdl_joystick))
+ if (pSDL_JoystickIsHaptic(impl->sdl_joystick))
{
- ext->sdl_haptic = pSDL_HapticOpenFromJoystick(ext->sdl_joystick);
- if (ext->sdl_haptic &&
- ((pSDL_HapticQuery(ext->sdl_haptic) & SDL_HAPTIC_LEFTRIGHT) != 0 ||
- pSDL_HapticRumbleSupported(ext->sdl_haptic)))
+ impl->sdl_haptic = pSDL_HapticOpenFromJoystick(impl->sdl_joystick);
+ if (impl->sdl_haptic &&
+ ((pSDL_HapticQuery(impl->sdl_haptic) & SDL_HAPTIC_LEFTRIGHT) != 0 ||
+ pSDL_HapticRumbleSupported(impl->sdl_haptic)))
{
- pSDL_HapticStopAll(ext->sdl_haptic);
- pSDL_HapticRumbleInit(ext->sdl_haptic);
- if (!hid_descriptor_add_haptics(&ext->desc))
+ pSDL_HapticStopAll(impl->sdl_haptic);
+ pSDL_HapticRumbleInit(impl->sdl_haptic);
+ if (!hid_descriptor_add_haptics(&impl->desc))
return FALSE;
- ext->haptic_effect_id = -1;
+ impl->haptic_effect_id = -1;
}
else
{
- pSDL_HapticClose(ext->sdl_haptic);
- ext->sdl_haptic = NULL;
+ pSDL_HapticClose(impl->sdl_haptic);
+ impl->sdl_haptic = NULL;
}
}
return TRUE;
}
-static NTSTATUS build_joystick_report_descriptor(struct platform_private *ext)
+static NTSTATUS build_joystick_report_descriptor(struct sdl_device *impl)
{
static const USAGE joystick_usages[] =
{
@@ -251,72 +251,72 @@ static NTSTATUS build_joystick_report_descriptor(struct platform_private *ext)
int i, report_size = 1;
int button_count, axis_count, ball_count, hat_count;
- axis_count = pSDL_JoystickNumAxes(ext->sdl_joystick);
+ axis_count = pSDL_JoystickNumAxes(impl->sdl_joystick);
if (axis_count > 6)
{
FIXME("Clamping joystick to 6 axis\n");
axis_count = 6;
}
- ext->axis_start = report_size;
+ impl->axis_start = report_size;
report_size += (sizeof(DWORD) * axis_count);
- ball_count = pSDL_JoystickNumBalls(ext->sdl_joystick);
+ ball_count = pSDL_JoystickNumBalls(impl->sdl_joystick);
if (axis_count + ball_count * 2 > ARRAY_SIZE(joystick_usages))
{
FIXME("Capping ball + axis at 9\n");
ball_count = (ARRAY_SIZE(joystick_usages) - axis_count) / 2;
}
- ext->ball_start = report_size;
+ impl->ball_start = report_size;
report_size += (sizeof(DWORD) * 2 * ball_count);
- hat_count = pSDL_JoystickNumHats(ext->sdl_joystick);
- ext->hat_start = report_size;
+ hat_count = pSDL_JoystickNumHats(impl->sdl_joystick);
+ impl->hat_start = report_size;
report_size += hat_count;
/* For now lump all buttons just into incremental usages, Ignore Keys */
- button_count = pSDL_JoystickNumButtons(ext->sdl_joystick);
- ext->button_start = report_size;
+ button_count = pSDL_JoystickNumButtons(impl->sdl_joystick);
+ impl->button_start = report_size;
report_size += (button_count + 7) / 8;
TRACE("Report will be %i bytes\n", report_size);
- if (!hid_descriptor_begin(&ext->desc, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_JOYSTICK))
+ if (!hid_descriptor_begin(&impl->desc, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_JOYSTICK))
return STATUS_NO_MEMORY;
- if (axis_count && !hid_descriptor_add_axes(&ext->desc, axis_count, HID_USAGE_PAGE_GENERIC,
+ if (axis_count && !hid_descriptor_add_axes(&impl->desc, axis_count, HID_USAGE_PAGE_GENERIC,
joystick_usages, FALSE, -32768, 32767))
return STATUS_NO_MEMORY;
- if (ball_count && !hid_descriptor_add_axes(&ext->desc, ball_count * 2, HID_USAGE_PAGE_GENERIC,
+ if (ball_count && !hid_descriptor_add_axes(&impl->desc, ball_count * 2, HID_USAGE_PAGE_GENERIC,
&joystick_usages[axis_count], TRUE, INT32_MIN, INT32_MAX))
return STATUS_NO_MEMORY;
- if (hat_count && !hid_descriptor_add_hatswitch(&ext->desc, hat_count))
+ if (hat_count && !hid_descriptor_add_hatswitch(&impl->desc, hat_count))
return STATUS_NO_MEMORY;
- if (button_count && !hid_descriptor_add_buttons(&ext->desc, HID_USAGE_PAGE_BUTTON, 1, button_count))
+ if (button_count && !hid_descriptor_add_buttons(&impl->desc, HID_USAGE_PAGE_BUTTON, 1, button_count))
return STATUS_NO_MEMORY;
- if (!descriptor_add_haptic(ext))
+ if (!descriptor_add_haptic(impl))
return STATUS_NO_MEMORY;
- if (!hid_descriptor_end(&ext->desc))
+ if (!hid_descriptor_end(&impl->desc))
return STATUS_NO_MEMORY;
- ext->buffer_length = report_size;
- if (!(ext->report_buffer = calloc(1, report_size))) goto failed;
+ impl->buffer_length = report_size;
+ if (!(impl->report_buffer = calloc(1, report_size))) goto failed;
/* Initialize axis in the report */
for (i = 0; i < axis_count; i++)
- set_axis_value(ext, i, pSDL_JoystickGetAxis(ext->sdl_joystick, i));
+ set_axis_value(impl, i, pSDL_JoystickGetAxis(impl->sdl_joystick, i));
for (i = 0; i < hat_count; i++)
- set_hat_value(ext, i, pSDL_JoystickGetHat(ext->sdl_joystick, i));
+ set_hat_value(impl, i, pSDL_JoystickGetHat(impl->sdl_joystick, i));
return STATUS_SUCCESS;
failed:
- free(ext->report_buffer);
- hid_descriptor_free(&ext->desc);
+ free(impl->report_buffer);
+ hid_descriptor_free(&impl->desc);
return STATUS_NO_MEMORY;
}
@@ -347,7 +347,7 @@ static SHORT compose_dpad_value(SDL_GameController *joystick)
return SDL_HAT_CENTERED;
}
-static NTSTATUS build_controller_report_descriptor(struct platform_private *ext)
+static NTSTATUS build_controller_report_descriptor(struct sdl_device *impl)
{
static const USAGE left_axis_usages[] = {HID_USAGE_GENERIC_X, HID_USAGE_GENERIC_Y};
static const USAGE right_axis_usages[] = {HID_USAGE_GENERIC_RX, HID_USAGE_GENERIC_RY};
@@ -355,52 +355,52 @@ static NTSTATUS build_controller_report_descriptor(struct platform_private *ext)
ULONG i, button_count = SDL_CONTROLLER_BUTTON_MAX - 1;
C_ASSERT(SDL_CONTROLLER_AXIS_MAX == 6);
- ext->axis_start = 0;
- ext->hat_start = SDL_CONTROLLER_AXIS_MAX * sizeof(DWORD);
- ext->button_start = ext->hat_start + 1;
- ext->buffer_length = ext->button_start + (button_count + 7) / 8;
+ impl->axis_start = 0;
+ impl->hat_start = SDL_CONTROLLER_AXIS_MAX * sizeof(DWORD);
+ impl->button_start = impl->hat_start + 1;
+ impl->buffer_length = impl->button_start + (button_count + 7) / 8;
- TRACE("Report will be %i bytes\n", ext->buffer_length);
+ TRACE("Report will be %i bytes\n", impl->buffer_length);
- if (!hid_descriptor_begin(&ext->desc, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_GAMEPAD))
+ if (!hid_descriptor_begin(&impl->desc, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_GAMEPAD))
return STATUS_NO_MEMORY;
- if (!hid_descriptor_add_axes(&ext->desc, 2, HID_USAGE_PAGE_GENERIC, left_axis_usages,
+ if (!hid_descriptor_add_axes(&impl->desc, 2, HID_USAGE_PAGE_GENERIC, left_axis_usages,
FALSE, -32768, 32767))
return STATUS_NO_MEMORY;
- if (!hid_descriptor_add_axes(&ext->desc, 2, HID_USAGE_PAGE_GENERIC, right_axis_usages,
+ if (!hid_descriptor_add_axes(&impl->desc, 2, HID_USAGE_PAGE_GENERIC, right_axis_usages,
FALSE, -32768, 32767))
return STATUS_NO_MEMORY;
- if (!hid_descriptor_add_axes(&ext->desc, 2, HID_USAGE_PAGE_GENERIC, trigger_axis_usages,
+ if (!hid_descriptor_add_axes(&impl->desc, 2, HID_USAGE_PAGE_GENERIC, trigger_axis_usages,
FALSE, 0, 32767))
return STATUS_NO_MEMORY;
- if (!hid_descriptor_add_hatswitch(&ext->desc, 1))
+ if (!hid_descriptor_add_hatswitch(&impl->desc, 1))
return STATUS_NO_MEMORY;
- if (!hid_descriptor_add_buttons(&ext->desc, HID_USAGE_PAGE_BUTTON, 1, button_count))
+ if (!hid_descriptor_add_buttons(&impl->desc, HID_USAGE_PAGE_BUTTON, 1, button_count))
return STATUS_NO_MEMORY;
- if (!descriptor_add_haptic(ext))
+ if (!descriptor_add_haptic(impl))
return STATUS_NO_MEMORY;
- if (!hid_descriptor_end(&ext->desc))
+ if (!hid_descriptor_end(&impl->desc))
return STATUS_NO_MEMORY;
- if (!(ext->report_buffer = calloc(1, ext->buffer_length))) goto failed;
+ if (!(impl->report_buffer = calloc(1, impl->buffer_length))) goto failed;
/* Initialize axis in the report */
for (i = SDL_CONTROLLER_AXIS_LEFTX; i < SDL_CONTROLLER_AXIS_MAX; i++)
- set_axis_value(ext, i, pSDL_GameControllerGetAxis(ext->sdl_controller, i));
- set_hat_value(ext, 0, compose_dpad_value(ext->sdl_controller));
+ set_axis_value(impl, i, pSDL_GameControllerGetAxis(impl->sdl_controller, i));
+ set_hat_value(impl, 0, compose_dpad_value(impl->sdl_controller));
return STATUS_SUCCESS;
failed:
- free(ext->report_buffer);
- hid_descriptor_free(&ext->desc);
+ free(impl->report_buffer);
+ hid_descriptor_free(&impl->desc);
return STATUS_NO_MEMORY;
}
@@ -410,51 +410,51 @@ static void sdl_device_destroy(struct unix_device *iface)
static NTSTATUS sdl_device_start(struct unix_device *iface)
{
- struct platform_private *ext = impl_from_unix_device(iface);
- if (ext->sdl_controller) return build_controller_report_descriptor(ext);
- return build_joystick_report_descriptor(ext);
+ struct sdl_device *impl = impl_from_unix_device(iface);
+ if (impl->sdl_controller) return build_controller_report_descriptor(impl);
+ return build_joystick_report_descriptor(impl);
}
static void sdl_device_stop(struct unix_device *iface)
{
- struct platform_private *private = impl_from_unix_device(iface);
+ struct sdl_device *impl = impl_from_unix_device(iface);
- pSDL_JoystickClose(private->sdl_joystick);
- if (private->sdl_controller) pSDL_GameControllerClose(private->sdl_controller);
- if (private->sdl_haptic) pSDL_HapticClose(private->sdl_haptic);
+ pSDL_JoystickClose(impl->sdl_joystick);
+ if (impl->sdl_controller) pSDL_GameControllerClose(impl->sdl_controller);
+ if (impl->sdl_haptic) pSDL_HapticClose(impl->sdl_haptic);
pthread_mutex_lock(&sdl_cs);
- list_remove(&private->unix_device.entry);
+ list_remove(&impl->unix_device.entry);
pthread_mutex_unlock(&sdl_cs);
}
static NTSTATUS sdl_device_get_reportdescriptor(struct unix_device *iface, BYTE *buffer,
DWORD length, DWORD *out_length)
{
- struct platform_private *ext = impl_from_unix_device(iface);
+ struct sdl_device *impl = impl_from_unix_device(iface);
- *out_length = ext->desc.size;
- if (length < ext->desc.size) return STATUS_BUFFER_TOO_SMALL;
+ *out_length = impl->desc.size;
+ if (length < impl->desc.size) return STATUS_BUFFER_TOO_SMALL;
- memcpy(buffer, ext->desc.data, ext->desc.size);
+ memcpy(buffer, impl->desc.data, impl->desc.size);
return STATUS_SUCCESS;
}
static void sdl_device_set_output_report(struct unix_device *iface, HID_XFER_PACKET *packet, IO_STATUS_BLOCK *io)
{
- struct platform_private *ext = impl_from_unix_device(iface);
+ struct sdl_device *impl = impl_from_unix_device(iface);
- if (ext->sdl_haptic && packet->reportId == 0)
+ if (impl->sdl_haptic && packet->reportId == 0)
{
WORD left = packet->reportBuffer[2] * 128;
WORD right = packet->reportBuffer[3] * 128;
- if (ext->haptic_effect_id >= 0)
+ if (impl->haptic_effect_id >= 0)
{
- pSDL_HapticDestroyEffect(ext->sdl_haptic, ext->haptic_effect_id);
- ext->haptic_effect_id = -1;
+ pSDL_HapticDestroyEffect(impl->sdl_haptic, impl->haptic_effect_id);
+ impl->haptic_effect_id = -1;
}
- pSDL_HapticStopAll(ext->sdl_haptic);
+ pSDL_HapticStopAll(impl->sdl_haptic);
if (left != 0 || right != 0)
{
SDL_HapticEffect effect;
@@ -465,15 +465,15 @@ static void sdl_device_set_output_report(struct unix_device *iface, HID_XFER_PAC
effect.leftright.large_magnitude = left;
effect.leftright.small_magnitude = right;
- ext->haptic_effect_id = pSDL_HapticNewEffect(ext->sdl_haptic, &effect);
- if (ext->haptic_effect_id >= 0)
+ impl->haptic_effect_id = pSDL_HapticNewEffect(impl->sdl_haptic, &effect);
+ if (impl->haptic_effect_id >= 0)
{
- pSDL_HapticRunEffect(ext->sdl_haptic, ext->haptic_effect_id, 1);
+ pSDL_HapticRunEffect(impl->sdl_haptic, impl->haptic_effect_id, 1);
}
else
{
float i = (float)((left + right)/2.0) / 32767.0;
- pSDL_HapticRumblePlay(ext->sdl_haptic, i, -1);
+ pSDL_HapticRumblePlay(impl->sdl_haptic, i, -1);
}
}
@@ -510,11 +510,11 @@ static const struct unix_device_vtbl sdl_device_vtbl =
sdl_device_set_feature_report,
};
-static BOOL set_report_from_joystick_event(struct platform_private *device, SDL_Event *event)
+static BOOL set_report_from_joystick_event(struct sdl_device *impl, SDL_Event *event)
{
- struct unix_device *iface = &device->unix_device;
+ struct unix_device *iface = &impl->unix_device;
- if (device->sdl_controller) return TRUE; /* use controller events instead */
+ if (impl->sdl_controller) return TRUE; /* use controller events instead */
switch(event->type)
{
@@ -523,9 +523,9 @@ static BOOL set_report_from_joystick_event(struct platform_private *device, SDL_
{
SDL_JoyButtonEvent *ie = &event->jbutton;
- set_button_value(device, ie->button, ie->state);
+ set_button_value(impl, ie->button, ie->state);
- bus_event_queue_input_report(&event_queue, iface, device->report_buffer, device->buffer_length);
+ bus_event_queue_input_report(&event_queue, iface, impl->report_buffer, impl->buffer_length);
break;
}
case SDL_JOYAXISMOTION:
@@ -534,8 +534,8 @@ static BOOL set_report_from_joystick_event(struct platform_private *device, SDL_
if (ie->axis < 6)
{
- set_axis_value(device, ie->axis, ie->value);
- bus_event_queue_input_report(&event_queue, iface, device->report_buffer, device->buffer_length);
+ set_axis_value(impl, ie->axis, ie->value);
+ bus_event_queue_input_report(&event_queue, iface, impl->report_buffer, impl->buffer_length);
}
break;
}
@@ -543,16 +543,16 @@ static BOOL set_report_from_joystick_event(struct platform_private *device, SDL_
{
SDL_JoyBallEvent *ie = &event->jball;
- set_ball_value(device, ie->ball, ie->xrel, ie->yrel);
- bus_event_queue_input_report(&event_queue, iface, device->report_buffer, device->buffer_length);
+ set_ball_value(impl, ie->ball, ie->xrel, ie->yrel);
+ bus_event_queue_input_report(&event_queue, iface, impl->report_buffer, impl->buffer_length);
break;
}
case SDL_JOYHATMOTION:
{
SDL_JoyHatEvent *ie = &event->jhat;
- set_hat_value(device, ie->hat, ie->value);
- bus_event_queue_input_report(&event_queue, iface, device->report_buffer, device->buffer_length);
+ set_hat_value(impl, ie->hat, ie->value);
+ bus_event_queue_input_report(&event_queue, iface, impl->report_buffer, impl->buffer_length);
break;
}
default:
@@ -561,9 +561,9 @@ static BOOL set_report_from_joystick_event(struct platform_private *device, SDL_
return FALSE;
}
-static BOOL set_report_from_controller_event(struct platform_private *device, SDL_Event *event)
+static BOOL set_report_from_controller_event(struct sdl_device *impl, SDL_Event *event)
{
- struct unix_device *iface = &device->unix_device;
+ struct unix_device *iface = &impl->unix_device;
switch(event->type)
{
@@ -579,7 +579,7 @@ static BOOL set_report_from_controller_event(struct platform_private *device, SD
case SDL_CONTROLLER_BUTTON_DPAD_DOWN:
case SDL_CONTROLLER_BUTTON_DPAD_LEFT:
case SDL_CONTROLLER_BUTTON_DPAD_RIGHT:
- set_hat_value(device, 0, compose_dpad_value(device->sdl_controller));
+ set_hat_value(impl, 0, compose_dpad_value(impl->sdl_controller));
break;
case SDL_CONTROLLER_BUTTON_LEFTSHOULDER: button = 4; break;
case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER: button = 5; break;
@@ -590,16 +590,16 @@ static BOOL set_report_from_controller_event(struct platform_private *device, SD
case SDL_CONTROLLER_BUTTON_GUIDE: button = 10; break;
}
- set_button_value(device, button, ie->state);
- bus_event_queue_input_report(&event_queue, iface, device->report_buffer, device->buffer_length);
+ set_button_value(impl, button, ie->state);
+ bus_event_queue_input_report(&event_queue, iface, impl->report_buffer, impl->buffer_length);
break;
}
case SDL_CONTROLLERAXISMOTION:
{
SDL_ControllerAxisEvent *ie = &event->caxis;
- set_axis_value(device, ie->axis, ie->value);
- bus_event_queue_input_report(&event_queue, iface, device->report_buffer, device->buffer_length);
+ set_axis_value(impl, ie->axis, ie->value);
+ bus_event_queue_input_report(&event_queue, iface, impl->report_buffer, impl->buffer_length);
break;
}
default:
@@ -616,7 +616,7 @@ static void sdl_add_device(unsigned int index)
.manufacturer = {"SDL"},
.serialnumber = {"0000"},
};
- struct platform_private *private;
+ struct sdl_device *impl;
SDL_Joystick* joystick;
SDL_JoystickID id;
@@ -664,18 +664,18 @@ static void sdl_add_device(unsigned int index)
TRACE("%s id %d, desc %s.\n", controller ? "controller" : "joystick", id, debugstr_device_desc(&desc));
- if (!(private = unix_device_create(&sdl_device_vtbl, sizeof(struct platform_private)))) return;
- list_add_tail(&device_list, &private->unix_device.entry);
- private->sdl_joystick = joystick;
- private->sdl_controller = controller;
- private->id = id;
+ if (!(impl = unix_device_create(&sdl_device_vtbl, sizeof(struct sdl_device)))) return;
+ list_add_tail(&device_list, &impl->unix_device.entry);
+ impl->sdl_joystick = joystick;
+ impl->sdl_controller = controller;
+ impl->id = id;
- bus_event_queue_device_created(&event_queue, &private->unix_device, &desc);
+ bus_event_queue_device_created(&event_queue, &impl->unix_device, &desc);
}
static void process_device_event(SDL_Event *event)
{
- struct platform_private *device;
+ struct sdl_device *impl;
SDL_JoystickID id;
TRACE_(hid_report)("Received action %x\n", event->type);
@@ -687,22 +687,22 @@ static void process_device_event(SDL_Event *event)
else if (event->type == SDL_JOYDEVICEREMOVED)
{
id = ((SDL_JoyDeviceEvent *)event)->which;
- device = find_device_from_id(id);
- if (device) bus_event_queue_device_removed(&event_queue, &device->unix_device);
+ impl = find_device_from_id(id);
+ if (impl) bus_event_queue_device_removed(&event_queue, &impl->unix_device);
else WARN("failed to find device with id %d\n", id);
}
else if (event->type >= SDL_JOYAXISMOTION && event->type <= SDL_JOYBUTTONUP)
{
id = ((SDL_JoyButtonEvent *)event)->which;
- device = find_device_from_id(id);
- if (device) set_report_from_joystick_event(device, event);
+ impl = find_device_from_id(id);
+ if (impl) set_report_from_joystick_event(impl, event);
else WARN("failed to find device with id %d\n", id);
}
else if (event->type >= SDL_CONTROLLERAXISMOTION && event->type <= SDL_CONTROLLERBUTTONUP)
{
id = ((SDL_ControllerButtonEvent *)event)->which;
- device = find_device_from_id(id);
- if (device) set_report_from_controller_event(device, event);
+ impl = find_device_from_id(id);
+ if (impl) set_report_from_controller_event(impl, event);
else WARN("failed to find device with id %d\n", id);
}
--
2.33.0
2
10
[PATCH 1/7] hidparse.sys: Recompute HIDP_CAPS from the value caps in HidP_GetCaps.
by Rémi Bernon 22 Sep '21
by Rémi Bernon 22 Sep '21
22 Sep '21
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
dlls/hid/hidp.c | 60 ++++++++++++++++++---
dlls/hidparse.sys/main.c | 111 +++++++++++++++------------------------
include/wine/hid.h | 25 ++++++---
3 files changed, 115 insertions(+), 81 deletions(-)
diff --git a/dlls/hid/hidp.c b/dlls/hid/hidp.c
index a1cdb951fd4..acb02246523 100644
--- a/dlls/hid/hidp.c
+++ b/dlls/hid/hidp.c
@@ -44,25 +44,27 @@ static NTSTATUS get_value_caps_range( struct hid_preparsed_data *preparsed, HIDP
switch (report_type)
{
case HidP_Input:
- if (report_len && report_len != preparsed->caps.InputReportByteLength)
+ if (report_len && report_len != preparsed->input_report_byte_length)
return HIDP_STATUS_INVALID_REPORT_LENGTH;
*caps = HID_INPUT_VALUE_CAPS( preparsed );
+ *caps_end = *caps + preparsed->input_caps_count;
break;
case HidP_Output:
- if (report_len && report_len != preparsed->caps.OutputReportByteLength)
+ if (report_len && report_len != preparsed->output_report_byte_length)
return HIDP_STATUS_INVALID_REPORT_LENGTH;
*caps = HID_OUTPUT_VALUE_CAPS( preparsed );
+ *caps_end = *caps + preparsed->output_caps_count;
break;
case HidP_Feature:
- if (report_len && report_len != preparsed->caps.FeatureReportByteLength)
+ if (report_len && report_len != preparsed->feature_report_byte_length)
return HIDP_STATUS_INVALID_REPORT_LENGTH;
*caps = HID_FEATURE_VALUE_CAPS( preparsed );
+ *caps_end = *caps + preparsed->feature_caps_count;
break;
default:
return HIDP_STATUS_INVALID_REPORT_TYPE;
}
- *caps_end = *caps + preparsed->value_caps_count[report_type];
return HIDP_STATUS_SUCCESS;
}
@@ -165,12 +167,58 @@ NTSTATUS WINAPI HidP_GetButtonCaps( HIDP_REPORT_TYPE report_type, HIDP_BUTTON_CA
NTSTATUS WINAPI HidP_GetCaps( PHIDP_PREPARSED_DATA preparsed_data, HIDP_CAPS *caps )
{
struct hid_preparsed_data *preparsed = (struct hid_preparsed_data *)preparsed_data;
+ struct hid_value_caps *it, *end;
TRACE( "preparsed_data %p, caps %p.\n", preparsed_data, caps );
if (!preparsed || preparsed->magic != HID_MAGIC) return HIDP_STATUS_INVALID_PREPARSED_DATA;
- *caps = preparsed->caps;
+ caps->Usage = preparsed->usage;
+ caps->UsagePage = preparsed->usage_page;
+ caps->InputReportByteLength = preparsed->input_report_byte_length;
+ caps->OutputReportByteLength = preparsed->output_report_byte_length;
+ caps->FeatureReportByteLength = preparsed->feature_report_byte_length;
+ caps->NumberLinkCollectionNodes = preparsed->number_link_collection_nodes;
+ caps->NumberInputButtonCaps = 0;
+ caps->NumberInputValueCaps = 0;
+ caps->NumberInputDataIndices = 0;
+ caps->NumberOutputButtonCaps = 0;
+ caps->NumberOutputValueCaps = 0;
+ caps->NumberOutputDataIndices = 0;
+ caps->NumberFeatureButtonCaps = 0;
+ caps->NumberFeatureValueCaps = 0;
+ caps->NumberFeatureDataIndices = 0;
+
+ for (it = HID_INPUT_VALUE_CAPS( preparsed ), end = it + preparsed->input_caps_count;
+ it != end; ++it)
+ {
+ if (!it->usage_min && !it->usage_max) continue;
+ if (it->flags & HID_VALUE_CAPS_IS_BUTTON) caps->NumberInputButtonCaps++;
+ else caps->NumberInputValueCaps++;
+ if (!(it->flags & HID_VALUE_CAPS_IS_RANGE)) caps->NumberInputDataIndices++;
+ else caps->NumberInputDataIndices += it->data_index_max - it->data_index_min + 1;
+ }
+
+ for (it = HID_OUTPUT_VALUE_CAPS( preparsed ), end = it + preparsed->output_caps_count;
+ it != end; ++it)
+ {
+ if (!it->usage_min && !it->usage_max) continue;
+ if (it->flags & HID_VALUE_CAPS_IS_BUTTON) caps->NumberOutputButtonCaps++;
+ else caps->NumberOutputValueCaps++;
+ if (!(it->flags & HID_VALUE_CAPS_IS_RANGE)) caps->NumberOutputDataIndices++;
+ else caps->NumberOutputDataIndices += it->data_index_max - it->data_index_min + 1;
+ }
+
+ for (it = HID_FEATURE_VALUE_CAPS( preparsed ), end = it + preparsed->feature_caps_count;
+ it != end; ++it)
+ {
+ if (!it->usage_min && !it->usage_max) continue;
+ if (it->flags & HID_VALUE_CAPS_IS_BUTTON) caps->NumberFeatureButtonCaps++;
+ else caps->NumberFeatureValueCaps++;
+ if (!(it->flags & HID_VALUE_CAPS_IS_RANGE)) caps->NumberFeatureDataIndices++;
+ else caps->NumberFeatureDataIndices += it->data_index_max - it->data_index_min + 1;
+ }
+
return HIDP_STATUS_SUCCESS;
}
@@ -956,7 +1004,7 @@ NTSTATUS WINAPI HidP_GetLinkCollectionNodes( HIDP_LINK_COLLECTION_NODE *nodes, U
if (!preparsed || preparsed->magic != HID_MAGIC) return HIDP_STATUS_INVALID_PREPARSED_DATA;
- count = *nodes_len = preparsed->caps.NumberLinkCollectionNodes;
+ count = *nodes_len = preparsed->number_link_collection_nodes;
if (capacity < count) return HIDP_STATUS_BUFFER_TOO_SMALL;
for (i = 0; i < count; ++i)
diff --git a/dlls/hidparse.sys/main.c b/dlls/hidparse.sys/main.c
index 3170abc50b5..d1191a20789 100644
--- a/dlls/hidparse.sys/main.c
+++ b/dlls/hidparse.sys/main.c
@@ -116,30 +116,20 @@ static void debug_print_preparsed( struct hid_preparsed_data *data )
if (TRACE_ON( hidp ))
{
- TRACE( "START PREPARSED Data <<< Usage: %i, UsagePage: %i, "
- "InputReportByteLength: %i, tOutputReportByteLength: %i, "
- "FeatureReportByteLength: %i, NumberLinkCollectionNodes: %i, "
- "NumberInputButtonCaps: %i, NumberInputValueCaps: %i, "
- "NumberInputDataIndices: %i, NumberOutputButtonCaps: %i, "
- "NumberOutputValueCaps: %i, NumberOutputDataIndices: %i, "
- "NumberFeatureButtonCaps: %i, NumberFeatureValueCaps: %i, "
- "NumberFeatureDataIndices: %i\n",
- data->caps.Usage, data->caps.UsagePage, data->caps.InputReportByteLength,
- data->caps.OutputReportByteLength, data->caps.FeatureReportByteLength,
- data->caps.NumberLinkCollectionNodes, data->caps.NumberInputButtonCaps,
- data->caps.NumberInputValueCaps, data->caps.NumberInputDataIndices,
- data->caps.NumberOutputButtonCaps, data->caps.NumberOutputValueCaps,
- data->caps.NumberOutputDataIndices, data->caps.NumberFeatureButtonCaps,
- data->caps.NumberFeatureValueCaps, data->caps.NumberFeatureDataIndices );
- end = data->value_caps_count[HidP_Input];
- for (i = 0; i < end; i++) TRACE( "INPUT: %s\n", debugstr_hid_value_caps( HID_INPUT_VALUE_CAPS( data ) + i ) );
- end = data->value_caps_count[HidP_Output];
- for (i = 0; i < end; i++) TRACE( "OUTPUT: %s\n", debugstr_hid_value_caps( HID_OUTPUT_VALUE_CAPS( data ) + i ) );
- end = data->value_caps_count[HidP_Feature];
- for (i = 0; i < end; i++) TRACE( "FEATURE: %s\n", debugstr_hid_value_caps( HID_FEATURE_VALUE_CAPS( data ) + i ) );
- end = data->caps.NumberLinkCollectionNodes;
- for (i = 0; i < end; i++) TRACE( "COLLECTION: %s\n", debugstr_hid_value_caps( HID_COLLECTION_VALUE_CAPS( data ) + i ) );
- TRACE(">>> END Preparsed Data\n");
+ TRACE( "usage %02x:%02x input %u-(%u)-%u, report len %u output %u-(%u)-%u, report len %u "
+ "feature %u-(%u)-%u, report len %u collections %u\n", data->usage_page, data->usage,
+ data->input_caps_start, data->input_caps_count, data->input_caps_end, data->input_report_byte_length,
+ data->output_caps_start, data->output_caps_count, data->output_caps_end, data->output_report_byte_length,
+ data->feature_caps_start, data->feature_caps_count, data->feature_caps_end, data->feature_report_byte_length,
+ data->number_link_collection_nodes );
+ end = data->input_caps_count;
+ for (i = 0; i < end; i++) TRACE( "input %d: %s\n", i, debugstr_hid_value_caps( HID_INPUT_VALUE_CAPS( data ) + i ) );
+ end = data->output_caps_count;
+ for (i = 0; i < end; i++) TRACE( "output %d: %s\n", i, debugstr_hid_value_caps( HID_OUTPUT_VALUE_CAPS( data ) + i ) );
+ end = data->feature_caps_count;
+ for (i = 0; i < end; i++) TRACE( "feature %d: %s\n", i, debugstr_hid_value_caps( HID_FEATURE_VALUE_CAPS( data ) + i ) );
+ end = data->number_link_collection_nodes;
+ for (i = 0; i < end; i++) TRACE( "collection %d: %s\n", i, debugstr_hid_value_caps( HID_COLLECTION_VALUE_CAPS( data ) + i ) );
}
}
@@ -416,7 +406,7 @@ static struct hid_preparsed_data *build_preparsed_data( struct hid_parser_state
{
struct hid_preparsed_data *data;
struct hid_value_caps *caps;
- DWORD i, button, filler, caps_len, size;
+ DWORD caps_len, size;
caps_len = state->caps.NumberInputValueCaps + state->caps.NumberOutputValueCaps +
state->caps.NumberFeatureValueCaps + state->caps.NumberLinkCollectionNodes;
@@ -426,47 +416,30 @@ static struct hid_preparsed_data *build_preparsed_data( struct hid_parser_state
memset( data, 0, size );
data->magic = HID_MAGIC;
data->size = size;
- data->caps = state->caps;
- data->value_caps_count[HidP_Input] = state->caps.NumberInputValueCaps;
- data->value_caps_count[HidP_Output] = state->caps.NumberOutputValueCaps;
- data->value_caps_count[HidP_Feature] = state->caps.NumberFeatureValueCaps;
-
- /* fixup value vs button vs filler counts */
+ data->usage = state->caps.Usage;
+ data->usage_page = state->caps.UsagePage;
+ data->input_caps_start = 0;
+ data->input_caps_count = state->caps.NumberInputValueCaps;
+ data->input_caps_end = data->input_caps_start + data->input_caps_count;
+ data->input_report_byte_length = state->caps.InputReportByteLength;
+ data->output_caps_start = data->input_caps_end;
+ data->output_caps_count = state->caps.NumberOutputValueCaps;
+ data->output_caps_end = data->output_caps_start + data->output_caps_count;
+ data->output_report_byte_length = state->caps.OutputReportByteLength;
+ data->feature_caps_start = data->output_caps_end;
+ data->feature_caps_count = state->caps.NumberFeatureValueCaps;
+ data->feature_caps_end = data->feature_caps_start + data->feature_caps_count;
+ data->feature_report_byte_length = state->caps.FeatureReportByteLength;
+ data->number_link_collection_nodes = state->caps.NumberLinkCollectionNodes;
caps = HID_INPUT_VALUE_CAPS( data );
- memcpy( caps, state->values[0], data->caps.NumberInputValueCaps * sizeof(*caps) );
- for (i = 0, button = 0, filler = 0; i < data->caps.NumberInputValueCaps; ++i)
- {
- if (!caps[i].usage_min && !caps[i].usage_max) filler++;
- else if (caps[i].flags & HID_VALUE_CAPS_IS_BUTTON) button++;
- }
- data->caps.NumberInputButtonCaps = button;
- data->caps.NumberInputValueCaps -= filler + button;
-
+ memcpy( caps, state->values[0], data->input_caps_count * sizeof(*caps) );
caps = HID_OUTPUT_VALUE_CAPS( data );
- memcpy( caps, state->values[1], data->caps.NumberOutputValueCaps * sizeof(*caps) );
- for (i = 0, button = 0, filler = 0; i < data->caps.NumberOutputValueCaps; ++i)
- {
- if (!caps[i].usage_min && !caps[i].usage_max) filler++;
- else if (caps[i].flags & HID_VALUE_CAPS_IS_BUTTON) button++;
- }
- caps += data->caps.NumberOutputValueCaps;
- data->caps.NumberOutputButtonCaps = button;
- data->caps.NumberOutputValueCaps -= filler + button;
-
+ memcpy( caps, state->values[1], data->output_caps_count * sizeof(*caps) );
caps = HID_FEATURE_VALUE_CAPS( data );
- memcpy( caps, state->values[2], data->caps.NumberFeatureValueCaps * sizeof(*caps) );
- for (i = 0, button = 0, filler = 0; i < data->caps.NumberFeatureValueCaps; ++i)
- {
- if (!caps[i].usage_min && !caps[i].usage_max) filler++;
- else if (caps[i].flags & HID_VALUE_CAPS_IS_BUTTON) button++;
- }
- caps += data->caps.NumberFeatureValueCaps;
- data->caps.NumberFeatureButtonCaps = button;
- data->caps.NumberFeatureValueCaps -= filler + button;
-
+ memcpy( caps, state->values[2], data->feature_caps_count * sizeof(*caps) );
caps = HID_COLLECTION_VALUE_CAPS( data );
- memcpy( caps, state->collections, data->caps.NumberLinkCollectionNodes * sizeof(*caps) );
+ memcpy( caps, state->collections, data->number_link_collection_nodes * sizeof(*caps) );
return data;
}
@@ -645,17 +618,17 @@ NTSTATUS WINAPI HidP_GetCollectionDescription( PHIDP_REPORT_DESCRIPTOR report_de
}
device_desc->CollectionDescLength = 1;
- device_desc->CollectionDesc[0].UsagePage = preparsed->caps.UsagePage;
- device_desc->CollectionDesc[0].Usage = preparsed->caps.Usage;
+ device_desc->CollectionDesc[0].UsagePage = preparsed->usage_page;
+ device_desc->CollectionDesc[0].Usage = preparsed->usage;
device_desc->CollectionDesc[0].CollectionNumber = 1;
- device_desc->CollectionDesc[0].InputLength = preparsed->caps.InputReportByteLength;
- device_desc->CollectionDesc[0].OutputLength = preparsed->caps.OutputReportByteLength;
- device_desc->CollectionDesc[0].FeatureLength = preparsed->caps.FeatureReportByteLength;
+ device_desc->CollectionDesc[0].InputLength = preparsed->input_report_byte_length;
+ device_desc->CollectionDesc[0].OutputLength = preparsed->output_report_byte_length;
+ device_desc->CollectionDesc[0].FeatureLength = preparsed->feature_report_byte_length;
device_desc->CollectionDesc[0].PreparsedDataLength = preparsed->size;
device_desc->CollectionDesc[0].PreparsedData = (PHIDP_PREPARSED_DATA)preparsed;
caps = HID_INPUT_VALUE_CAPS( preparsed );
- caps_end = caps + preparsed->value_caps_count[HidP_Input];
+ caps_end = caps + preparsed->input_caps_count;
for (; caps != caps_end; ++caps)
{
len = caps->start_byte * 8 + caps->start_bit + caps->bit_size * caps->report_count;
@@ -664,7 +637,7 @@ NTSTATUS WINAPI HidP_GetCollectionDescription( PHIDP_REPORT_DESCRIPTOR report_de
}
caps = HID_OUTPUT_VALUE_CAPS( preparsed );
- caps_end = caps + preparsed->value_caps_count[HidP_Output];
+ caps_end = caps + preparsed->output_caps_count;
for (; caps != caps_end; ++caps)
{
len = caps->start_byte * 8 + caps->start_bit + caps->bit_size * caps->report_count;
@@ -673,7 +646,7 @@ NTSTATUS WINAPI HidP_GetCollectionDescription( PHIDP_REPORT_DESCRIPTOR report_de
}
caps = HID_FEATURE_VALUE_CAPS( preparsed );
- caps_end = caps + preparsed->value_caps_count[HidP_Feature];
+ caps_end = caps + preparsed->feature_caps_count;
for (; caps != caps_end; ++caps)
{
len = caps->start_byte * 8 + caps->start_bit + caps->bit_size * caps->report_count;
diff --git a/include/wine/hid.h b/include/wine/hid.h
index 43f881bcc52..10fccda07cc 100644
--- a/include/wine/hid.h
+++ b/include/wine/hid.h
@@ -76,14 +76,27 @@ struct hid_preparsed_data
{
DWORD magic;
DWORD size;
- HIDP_CAPS caps;
- USHORT value_caps_count[3];
+ USAGE usage;
+ USAGE usage_page;
+ USHORT input_caps_start;
+ USHORT input_caps_count;
+ USHORT input_caps_end;
+ USHORT input_report_byte_length;
+ USHORT output_caps_start;
+ USHORT output_caps_count;
+ USHORT output_caps_end;
+ USHORT output_report_byte_length;
+ USHORT feature_caps_start;
+ USHORT feature_caps_count;
+ USHORT feature_caps_end;
+ USHORT feature_report_byte_length;
+ USHORT number_link_collection_nodes;
struct hid_value_caps value_caps[1];
};
-#define HID_INPUT_VALUE_CAPS(d) ((d)->value_caps)
-#define HID_OUTPUT_VALUE_CAPS(d) (HID_INPUT_VALUE_CAPS(d) + (d)->value_caps_count[0])
-#define HID_FEATURE_VALUE_CAPS(d) (HID_OUTPUT_VALUE_CAPS(d) + (d)->value_caps_count[1])
-#define HID_COLLECTION_VALUE_CAPS(d) (HID_FEATURE_VALUE_CAPS(d) + (d)->value_caps_count[2])
+#define HID_INPUT_VALUE_CAPS(d) ((d)->value_caps + (d)->input_caps_start)
+#define HID_OUTPUT_VALUE_CAPS(d) ((d)->value_caps + (d)->output_caps_start)
+#define HID_FEATURE_VALUE_CAPS(d) ((d)->value_caps + (d)->feature_caps_start)
+#define HID_COLLECTION_VALUE_CAPS(d) ((d)->value_caps + (d)->feature_caps_end)
#endif /* __WINE_PARSE_H */
--
2.33.0
1
6
22 Sep '21
Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com>
---
dlls/uxtheme/system.c | 2 --
dlls/uxtheme/tests/system.c | 5 -----
2 files changed, 7 deletions(-)
diff --git a/dlls/uxtheme/system.c b/dlls/uxtheme/system.c
index 193e8f80538..18b93435e4c 100644
--- a/dlls/uxtheme/system.c
+++ b/dlls/uxtheme/system.c
@@ -576,8 +576,6 @@ HRESULT WINAPI EnableTheming(BOOL fEnable)
if (bThemeActive && !fEnable)
{
- UXTHEME_RestoreSystemMetrics();
- UXTHEME_SaveSystemMetrics ();
bThemeActive = fEnable;
if(!RegOpenKeyW(HKEY_CURRENT_USER, szThemeManager, &hKey)) {
RegSetValueExW(hKey, L"ThemeActive", 0, REG_SZ, (BYTE *)L"0", 2 * sizeof(WCHAR));
diff --git a/dlls/uxtheme/tests/system.c b/dlls/uxtheme/tests/system.c
index 3d85bffeaf7..f56c3d2c273 100644
--- a/dlls/uxtheme/tests/system.c
+++ b/dlls/uxtheme/tests/system.c
@@ -1195,7 +1195,6 @@ static void test_EnableTheming(void)
size = sizeof(color_string);
ls = RegQueryValueExW(hkey, L"Scrollbar", NULL, NULL, (BYTE *)color_string, &size);
ok(!ls, "RegQueryValueExW failed, ls %#x.\n", ls);
- todo_wine
ok(!lstrcmpW(color_string, new_color_string), "Expected %s, got %s.\n",
wine_dbgstr_w(new_color_string), wine_dbgstr_w(color_string));
@@ -1204,7 +1203,6 @@ static void test_EnableTheming(void)
ok(flat_menu == new_flat_menu, "Expected %d, got %d.\n", new_flat_menu, flat_menu);
ret = SystemParametersInfoW(SPI_GETGRADIENTCAPTIONS, 0, &gradient_caption, 0);
ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
- todo_wine
ok(gradient_caption == new_gradient_caption, "Expected %d, got %d.\n",
new_gradient_caption, gradient_caption);
@@ -1212,13 +1210,11 @@ static void test_EnableTheming(void)
ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICSW, iPaddedBorderWidth);
ret = SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0);
ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
- todo_wine
ok(!memcmp(&ncm, &new_ncm, sizeof(ncm)), "Expected non-client metrics unchanged.\n");
memset(&logfont, 0, sizeof(logfont));
ret = SystemParametersInfoW(SPI_GETICONTITLELOGFONT, sizeof(logfont), &logfont, 0);
ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
- todo_wine
ok(!memcmp(&logfont, &new_logfont, sizeof(logfont)),
"Expected icon title font unchanged.\n");
@@ -1226,7 +1222,6 @@ static void test_EnableTheming(void)
hr = EnableTheming(TRUE);
ok(hr == S_OK, "EnableTheming failed, hr %#x.\n", hr);
is_theme_active = IsThemeActive();
- todo_wine
ok(!is_theme_active || broken(is_theme_active), /* Win8+ can no longer disable theming */
"Expected theming inactive.\n");
--
2.30.2
1
0
22 Sep '21
Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com>
---
dlls/uxtheme/system.c | 12 ++++--------
dlls/uxtheme/tests/system.c | 1 -
2 files changed, 4 insertions(+), 9 deletions(-)
diff --git a/dlls/uxtheme/system.c b/dlls/uxtheme/system.c
index 8ced977c267..193e8f80538 100644
--- a/dlls/uxtheme/system.c
+++ b/dlls/uxtheme/system.c
@@ -571,20 +571,16 @@ BOOL WINAPI IsCompositionActive(void)
HRESULT WINAPI EnableTheming(BOOL fEnable)
{
HKEY hKey;
- WCHAR szEnabled[] = L"0";
TRACE("(%d)\n", fEnable);
- if(fEnable != bThemeActive) {
- if(fEnable)
- UXTHEME_BackupSystemMetrics();
- else
- UXTHEME_RestoreSystemMetrics();
+ if (bThemeActive && !fEnable)
+ {
+ UXTHEME_RestoreSystemMetrics();
UXTHEME_SaveSystemMetrics ();
bThemeActive = fEnable;
- if(bThemeActive) szEnabled[0] = '1';
if(!RegOpenKeyW(HKEY_CURRENT_USER, szThemeManager, &hKey)) {
- RegSetValueExW(hKey, L"ThemeActive", 0, REG_SZ, (BYTE*)szEnabled, sizeof(WCHAR));
+ RegSetValueExW(hKey, L"ThemeActive", 0, REG_SZ, (BYTE *)L"0", 2 * sizeof(WCHAR));
RegCloseKey(hKey);
}
UXTHEME_broadcast_msg (NULL, WM_THEMECHANGED);
diff --git a/dlls/uxtheme/tests/system.c b/dlls/uxtheme/tests/system.c
index a4ace2adfd3..3d85bffeaf7 100644
--- a/dlls/uxtheme/tests/system.c
+++ b/dlls/uxtheme/tests/system.c
@@ -1260,7 +1260,6 @@ static void test_EnableTheming(void)
hr = EnableTheming(TRUE);
ok(hr == S_OK, "EnableTheming failed, hr %#x.\n", hr);
- todo_wine
ok(!IsThemeActive(), "Expected theming inactive.\n");
hr = EnableTheming(FALSE);
--
2.30.2
1
0
Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com>
---
dlls/uxtheme/tests/Makefile.in | 2 +-
dlls/uxtheme/tests/system.c | 173 +++++++++++++++++++++++++++++++++
2 files changed, 174 insertions(+), 1 deletion(-)
diff --git a/dlls/uxtheme/tests/Makefile.in b/dlls/uxtheme/tests/Makefile.in
index 42bdcfaa365..3fd3c23f5d8 100644
--- a/dlls/uxtheme/tests/Makefile.in
+++ b/dlls/uxtheme/tests/Makefile.in
@@ -1,5 +1,5 @@
TESTDLL = uxtheme.dll
-IMPORTS = user32 gdi32 uxtheme
+IMPORTS = advapi32 user32 gdi32 uxtheme
C_SRCS = \
system.c
diff --git a/dlls/uxtheme/tests/system.c b/dlls/uxtheme/tests/system.c
index b088a7a050e..a4ace2adfd3 100644
--- a/dlls/uxtheme/tests/system.c
+++ b/dlls/uxtheme/tests/system.c
@@ -1099,6 +1099,176 @@ done:
pSetThreadDpiAwarenessContext(old_context);
}
+static void test_EnableTheming(void)
+{
+ WCHAR old_color_string[13], new_color_string[13], color_string[13];
+ BOOL old_gradient_caption, new_gradient_caption, gradient_caption;
+ BOOL old_flat_menu, new_flat_menu, flat_menu;
+ LOGFONTW old_logfont, new_logfont, logfont;
+ NONCLIENTMETRICSW old_ncm, new_ncm, ncm;
+ DPI_AWARENESS_CONTEXT old_context = 0;
+ COLORREF old_color, new_color;
+ BOOL is_theme_active, ret;
+ DWORD size, length;
+ HRESULT hr;
+ LSTATUS ls;
+ HKEY hkey;
+
+ if (IsThemeActive())
+ {
+ hr = EnableTheming(TRUE);
+ ok(hr == S_OK, "EnableTheming failed, hr %#x.\n", hr);
+ ok(IsThemeActive(), "Expected theming active.\n");
+
+ /* Only run in interactive mode because once theming is disabled, it can't be turned back on
+ * via EnableTheming() */
+ if (winetest_interactive)
+ {
+ if (pSetThreadDpiAwarenessContext)
+ {
+ old_context = pSetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE);
+ }
+ else if (get_primary_monitor_effective_dpi() != 96)
+ {
+ skip("DPI isn't 96, skipping.\n");
+ return;
+ }
+
+ /* Read current system metrics */
+ old_color = GetSysColor(COLOR_SCROLLBAR);
+ swprintf(old_color_string, ARRAY_SIZE(old_color_string), L"%d %d %d",
+ GetRValue(old_color), GetGValue(old_color), GetBValue(old_color));
+
+ memset(&old_ncm, 0, sizeof(old_ncm));
+ old_ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICSW, iPaddedBorderWidth);
+ ret = SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(old_ncm), &old_ncm, 0);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+
+ memset(&old_logfont, 0, sizeof(old_logfont));
+ ret = SystemParametersInfoW(SPI_GETICONTITLELOGFONT, sizeof(old_logfont), &old_logfont, 0);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+ ret = SystemParametersInfoW(SPI_GETFLATMENU, 0, &old_flat_menu, 0);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+ ret = SystemParametersInfoW(SPI_GETGRADIENTCAPTIONS, 0, &old_gradient_caption, 0);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+
+ /* Write new system metrics to the registry */
+ new_color = ~old_color;
+ new_flat_menu = !old_flat_menu;
+ new_gradient_caption = !old_gradient_caption;
+ memcpy(&new_ncm, &old_ncm, sizeof(new_ncm));
+ new_ncm.iScrollWidth += 5;
+ memcpy(&new_logfont, &old_logfont, sizeof(new_logfont));
+ new_logfont.lfWidth += 5;
+
+ ls = RegOpenKeyExW(HKEY_CURRENT_USER, L"Control Panel\\Colors", 0, KEY_ALL_ACCESS,
+ &hkey);
+ ok(!ls, "RegOpenKeyExW failed, ls %#x.\n", ls);
+
+ length = swprintf(new_color_string, ARRAY_SIZE(new_color_string), L"%d %d %d",
+ GetRValue(new_color), GetGValue(new_color), GetBValue(new_color));
+ ls = RegSetValueExW(hkey, L"Scrollbar", 0, REG_SZ, (BYTE *)new_color_string,
+ (length + 1) * sizeof(WCHAR));
+ ok(!ls, "RegSetValueExW failed, ls %#x.\n", ls);
+
+ ret = SystemParametersInfoW(SPI_SETNONCLIENTMETRICS, sizeof(new_ncm), &new_ncm,
+ SPIF_UPDATEINIFILE);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+ ret = SystemParametersInfoW(SPI_SETICONTITLELOGFONT, sizeof(new_logfont), &new_logfont,
+ SPIF_UPDATEINIFILE);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+ ret = SystemParametersInfoW(SPI_SETFLATMENU, 0, (void *)(INT_PTR)new_flat_menu,
+ SPIF_UPDATEINIFILE);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+ ret = SystemParametersInfoW(SPI_SETGRADIENTCAPTIONS, 0,
+ (void *)(INT_PTR)new_gradient_caption, SPIF_UPDATEINIFILE);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+
+ /* Change theming state */
+ hr = EnableTheming(FALSE);
+ ok(hr == S_OK, "EnableTheming failed, hr %#x.\n", hr);
+ is_theme_active = IsThemeActive();
+ ok(!is_theme_active || broken(is_theme_active), /* Win8+ can no longer disable theming */
+ "Expected theming inactive.\n");
+
+ /* Test that system metrics are unchanged */
+ size = sizeof(color_string);
+ ls = RegQueryValueExW(hkey, L"Scrollbar", NULL, NULL, (BYTE *)color_string, &size);
+ ok(!ls, "RegQueryValueExW failed, ls %#x.\n", ls);
+ todo_wine
+ ok(!lstrcmpW(color_string, new_color_string), "Expected %s, got %s.\n",
+ wine_dbgstr_w(new_color_string), wine_dbgstr_w(color_string));
+
+ ret = SystemParametersInfoW(SPI_GETFLATMENU, 0, &flat_menu, 0);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+ ok(flat_menu == new_flat_menu, "Expected %d, got %d.\n", new_flat_menu, flat_menu);
+ ret = SystemParametersInfoW(SPI_GETGRADIENTCAPTIONS, 0, &gradient_caption, 0);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+ todo_wine
+ ok(gradient_caption == new_gradient_caption, "Expected %d, got %d.\n",
+ new_gradient_caption, gradient_caption);
+
+ memset(&ncm, 0, sizeof(ncm));
+ ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICSW, iPaddedBorderWidth);
+ ret = SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+ todo_wine
+ ok(!memcmp(&ncm, &new_ncm, sizeof(ncm)), "Expected non-client metrics unchanged.\n");
+
+ memset(&logfont, 0, sizeof(logfont));
+ ret = SystemParametersInfoW(SPI_GETICONTITLELOGFONT, sizeof(logfont), &logfont, 0);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+ todo_wine
+ ok(!memcmp(&logfont, &new_logfont, sizeof(logfont)),
+ "Expected icon title font unchanged.\n");
+
+ /* Test that theming cannot be turned on via EnableTheming() */
+ hr = EnableTheming(TRUE);
+ ok(hr == S_OK, "EnableTheming failed, hr %#x.\n", hr);
+ is_theme_active = IsThemeActive();
+ todo_wine
+ ok(!is_theme_active || broken(is_theme_active), /* Win8+ can no longer disable theming */
+ "Expected theming inactive.\n");
+
+ /* Restore system metrics */
+ ls = RegSetValueExW(hkey, L"Scrollbar", 0, REG_SZ, (BYTE *)old_color_string,
+ (lstrlenW(old_color_string) + 1) * sizeof(WCHAR));
+ ok(!ls, "RegSetValueExW failed, ls %#x.\n", ls);
+ ret = SystemParametersInfoW(SPI_SETFLATMENU, 0, (void *)(INT_PTR)old_flat_menu,
+ SPIF_UPDATEINIFILE);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+ ret = SystemParametersInfoW(SPI_SETGRADIENTCAPTIONS, 0,
+ (void *)(INT_PTR)old_gradient_caption, SPIF_UPDATEINIFILE);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+ ret = SystemParametersInfoW(SPI_SETNONCLIENTMETRICS, sizeof(old_ncm), &old_ncm,
+ SPIF_UPDATEINIFILE);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+ ret = SystemParametersInfoW(SPI_SETICONTITLELOGFONT, sizeof(old_logfont), &old_logfont,
+ SPIF_UPDATEINIFILE);
+ ok(ret, "SystemParametersInfoW failed, error %u.\n", GetLastError());
+
+ RegCloseKey(hkey);
+ if (pSetThreadDpiAwarenessContext)
+ pSetThreadDpiAwarenessContext(old_context);
+ }
+ }
+ else
+ {
+ hr = EnableTheming(FALSE);
+ ok(hr == S_OK, "EnableTheming failed, hr %#x.\n", hr);
+ ok(!IsThemeActive(), "Expected theming inactive.\n");
+
+ hr = EnableTheming(TRUE);
+ ok(hr == S_OK, "EnableTheming failed, hr %#x.\n", hr);
+ todo_wine
+ ok(!IsThemeActive(), "Expected theming inactive.\n");
+
+ hr = EnableTheming(FALSE);
+ ok(hr == S_OK, "EnableTheming failed, hr %#x.\n", hr);
+ ok(!IsThemeActive(), "Expected theming inactive.\n");
+ }
+}
+
START_TEST(system)
{
init_funcs();
@@ -1118,4 +1288,7 @@ START_TEST(system)
test_GetThemePartSize();
test_CloseThemeData();
test_buffered_paint();
+
+ /* Test EnableTheming() in the end because it may disable theming */
+ test_EnableTheming();
}
--
2.30.2
1
0
Similar to 7290db3.
Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com>
---
dlls/uxtheme/msstyles.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/dlls/uxtheme/msstyles.c b/dlls/uxtheme/msstyles.c
index 7356f6ea354..f129d998d65 100644
--- a/dlls/uxtheme/msstyles.c
+++ b/dlls/uxtheme/msstyles.c
@@ -733,12 +733,18 @@ struct PARSENONCLIENTSTATE
static inline void parse_init_nonclient (struct PARSENONCLIENTSTATE* state)
{
+ DPI_AWARENESS_CONTEXT old_context;
+
+ old_context = SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_UNAWARE);
+
memset (state, 0, sizeof (*state));
state->metrics.cbSize = sizeof (NONCLIENTMETRICSW);
SystemParametersInfoW (SPI_GETNONCLIENTMETRICS, sizeof (NONCLIENTMETRICSW),
&state->metrics, 0);
SystemParametersInfoW (SPI_GETICONTITLELOGFONT, sizeof (LOGFONTW),
&state->iconTitleFont, 0);
+
+ SetThreadDpiAwarenessContext(old_context);
}
static BOOL parse_handle_nonclient_font (struct PARSENONCLIENTSTATE* state,
--
2.30.2
1
0
Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com>
---
dlls/uxtheme/system.c | 87 +++++++++++++++++++++----------------------
1 file changed, 43 insertions(+), 44 deletions(-)
diff --git a/dlls/uxtheme/system.c b/dlls/uxtheme/system.c
index a467fc8b157..8ced977c267 100644
--- a/dlls/uxtheme/system.c
+++ b/dlls/uxtheme/system.c
@@ -199,39 +199,39 @@ static void UXTHEME_LoadTheme(void)
/***********************************************************************/
-static const char * const SysColorsNames[] =
+static const WCHAR * const SysColorsNames[] =
{
- "Scrollbar", /* COLOR_SCROLLBAR */
- "Background", /* COLOR_BACKGROUND */
- "ActiveTitle", /* COLOR_ACTIVECAPTION */
- "InactiveTitle", /* COLOR_INACTIVECAPTION */
- "Menu", /* COLOR_MENU */
- "Window", /* COLOR_WINDOW */
- "WindowFrame", /* COLOR_WINDOWFRAME */
- "MenuText", /* COLOR_MENUTEXT */
- "WindowText", /* COLOR_WINDOWTEXT */
- "TitleText", /* COLOR_CAPTIONTEXT */
- "ActiveBorder", /* COLOR_ACTIVEBORDER */
- "InactiveBorder", /* COLOR_INACTIVEBORDER */
- "AppWorkSpace", /* COLOR_APPWORKSPACE */
- "Hilight", /* COLOR_HIGHLIGHT */
- "HilightText", /* COLOR_HIGHLIGHTTEXT */
- "ButtonFace", /* COLOR_BTNFACE */
- "ButtonShadow", /* COLOR_BTNSHADOW */
- "GrayText", /* COLOR_GRAYTEXT */
- "ButtonText", /* COLOR_BTNTEXT */
- "InactiveTitleText", /* COLOR_INACTIVECAPTIONTEXT */
- "ButtonHilight", /* COLOR_BTNHIGHLIGHT */
- "ButtonDkShadow", /* COLOR_3DDKSHADOW */
- "ButtonLight", /* COLOR_3DLIGHT */
- "InfoText", /* COLOR_INFOTEXT */
- "InfoWindow", /* COLOR_INFOBK */
- "ButtonAlternateFace", /* COLOR_ALTERNATEBTNFACE */
- "HotTrackingColor", /* COLOR_HOTLIGHT */
- "GradientActiveTitle", /* COLOR_GRADIENTACTIVECAPTION */
- "GradientInactiveTitle", /* COLOR_GRADIENTINACTIVECAPTION */
- "MenuHilight", /* COLOR_MENUHILIGHT */
- "MenuBar", /* COLOR_MENUBAR */
+ L"Scrollbar", /* COLOR_SCROLLBAR */
+ L"Background", /* COLOR_BACKGROUND */
+ L"ActiveTitle", /* COLOR_ACTIVECAPTION */
+ L"InactiveTitle", /* COLOR_INACTIVECAPTION */
+ L"Menu", /* COLOR_MENU */
+ L"Window", /* COLOR_WINDOW */
+ L"WindowFrame", /* COLOR_WINDOWFRAME */
+ L"MenuText", /* COLOR_MENUTEXT */
+ L"WindowText", /* COLOR_WINDOWTEXT */
+ L"TitleText", /* COLOR_CAPTIONTEXT */
+ L"ActiveBorder", /* COLOR_ACTIVEBORDER */
+ L"InactiveBorder", /* COLOR_INACTIVEBORDER */
+ L"AppWorkSpace", /* COLOR_APPWORKSPACE */
+ L"Hilight", /* COLOR_HIGHLIGHT */
+ L"HilightText", /* COLOR_HIGHLIGHTTEXT */
+ L"ButtonFace", /* COLOR_BTNFACE */
+ L"ButtonShadow", /* COLOR_BTNSHADOW */
+ L"GrayText", /* COLOR_GRAYTEXT */
+ L"ButtonText", /* COLOR_BTNTEXT */
+ L"InactiveTitleText", /* COLOR_INACTIVECAPTIONTEXT */
+ L"ButtonHilight", /* COLOR_BTNHIGHLIGHT */
+ L"ButtonDkShadow", /* COLOR_3DDKSHADOW */
+ L"ButtonLight", /* COLOR_3DLIGHT */
+ L"InfoText", /* COLOR_INFOTEXT */
+ L"InfoWindow", /* COLOR_INFOBK */
+ L"ButtonAlternateFace", /* COLOR_ALTERNATEBTNFACE */
+ L"HotTrackingColor", /* COLOR_HOTLIGHT */
+ L"GradientActiveTitle", /* COLOR_GRADIENTACTIVECAPTION */
+ L"GradientInactiveTitle", /* COLOR_GRADIENTINACTIVECAPTION */
+ L"MenuHilight", /* COLOR_MENUHILIGHT */
+ L"MenuBar", /* COLOR_MENUBAR */
};
static const WCHAR strColorKey[] = L"Control Panel\\Colors";
@@ -251,9 +251,9 @@ static const struct BackupSysParam
static void save_sys_colors (HKEY baseKey)
{
- char colorStr[13];
+ WCHAR colorStr[13];
HKEY hKey;
- int i;
+ int i, length;
if (RegCreateKeyExW( baseKey, strColorKey,
0, 0, 0, KEY_ALL_ACCESS,
@@ -262,12 +262,11 @@ static void save_sys_colors (HKEY baseKey)
for (i = 0; i < NUM_SYS_COLORS; i++)
{
COLORREF col = GetSysColor (i);
-
- sprintf (colorStr, "%d %d %d",
- GetRValue (col), GetGValue (col), GetBValue (col));
- RegSetValueExA (hKey, SysColorsNames[i], 0, REG_SZ,
- (BYTE*)colorStr, strlen (colorStr)+1);
+ length = swprintf(colorStr, ARRAY_SIZE(colorStr), L"%d %d %d", GetRValue(col),
+ GetGValue(col), GetBValue(col));
+ RegSetValueExW(hKey, SysColorsNames[i], 0, REG_SZ, (BYTE *)colorStr,
+ (length + 1) * sizeof(WCHAR));
}
RegCloseKey (hKey);
}
@@ -350,14 +349,14 @@ static void UXTHEME_RestoreSystemMetrics(void)
for (i = 0; i < NUM_SYS_COLORS; i++)
{
DWORD type;
- char colorStr[13];
+ WCHAR colorStr[13];
DWORD count = sizeof(colorStr);
-
- if (RegQueryValueExA (colorKey, SysColorsNames[i], 0,
- &type, (LPBYTE) colorStr, &count) == ERROR_SUCCESS)
+
+ if (RegQueryValueExW(colorKey, SysColorsNames[i], 0, &type, (LPBYTE)colorStr,
+ &count) == ERROR_SUCCESS)
{
int r, g, b;
- if (sscanf (colorStr, "%d %d %d", &r, &g, &b) == 3)
+ if (swscanf(colorStr, L"%d %d %d", &r, &g, &b) == 3)
{
sysColsIndices[sysColCount] = i;
sysCols[sysColCount] = RGB(r, g, b);
--
2.30.2
1
0
22 Sep '21
Signed-off-by: Xu Wei <xuwei(a)uniontech.com>
---
dlls/kernel32/tests/volume.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/dlls/kernel32/tests/volume.c b/dlls/kernel32/tests/volume.c
index cb35de6add1..2fe8c1995cf 100644
--- a/dlls/kernel32/tests/volume.c
+++ b/dlls/kernel32/tests/volume.c
@@ -111,6 +111,7 @@ static void test_dos_devices(void)
{
char buf[MAX_PATH], buf2[400];
char drivestr[3];
+ WCHAR drivestrW[3];
HANDLE file;
BOOL ret;
@@ -185,6 +186,21 @@ static void test_dos_devices(void)
ret = QueryDosDeviceA( drivestr, buf, sizeof(buf) );
ok(!ret, "expected failure\n");
ok(GetLastError() == ERROR_FILE_NOT_FOUND, "got error %u\n", GetLastError());
+
+ SetLastError(0);
+ ret = DefineDosDeviceW( DDD_RAW_TARGET_PATH, drivestrW, NULL );
+ ok(!ret, "expected failure\n");
+ ok(GetLastError() == ERROR_INVALID_PARAMETER, "got error %u\n", GetLastError());
+
+ SetLastError(0);
+ ret = DefineDosDeviceW( DDD_RAW_TARGET_PATH, NULL, drivestrW );
+ ok(ret, "got error %u\n", GetLastError());
+
+ SetLastError(0);
+ DefineDosDeviceW( DDD_EXACT_MATCH_ON_REMOVE|DDD_RAW_TARGET_PATH|DDD_REMOVE_DEFINITION,
+ "{00000001-0000-0000-0000-4E6574446576}",
+ "\\Device\\{00000001-0000-0000-0000-4E6574446576}" );
+ ok(ret, "got error %u\n", GetLastError());
}
static void test_FindFirstVolume(void)
--
2.20.1
3
3