From: Alexandros Frantzis alexandros.frantzis@collabora.com
--- dlls/winewayland.drv/display.c | 10 ++++++++-- dlls/winewayland.drv/waylanddrv.h | 11 +++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/dlls/winewayland.drv/display.c b/dlls/winewayland.drv/display.c index 99dc92e0e5a..f94ad73f1dc 100644 --- a/dlls/winewayland.drv/display.c +++ b/dlls/winewayland.drv/display.c @@ -211,13 +211,19 @@ static void wayland_add_device_gpu(const struct gdi_device_manager *device_manag }
static void wayland_add_device_adapter(const struct gdi_device_manager *device_manager, - void *param, INT output_id) + void *param, INT output_id, + struct output_info *output_info) { struct gdi_adapter adapter; adapter.id = output_id; adapter.state_flags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP; if (output_id == 0) adapter.state_flags |= DISPLAY_DEVICE_PRIMARY_DEVICE; + if (!asciiz_to_unicodez(adapter.virtual_id, output_info->output->name, + sizeof(adapter.virtual_id) / sizeof(WCHAR))) + { + WARN("output name too long, truncating\n"); + }
TRACE("id=0x%s state_flags=0x%x\n", wine_dbgstr_longlong(adapter.id), (UINT)adapter.state_flags); @@ -307,7 +313,7 @@ BOOL WAYLAND_UpdateDisplayDevices(const struct gdi_device_manager *device_manage
wl_array_for_each(output_info, &output_info_array) { - wayland_add_device_adapter(device_manager, param, output_id); + wayland_add_device_adapter(device_manager, param, output_id, output_info); wayland_add_device_monitor(device_manager, param, output_info); wayland_add_device_modes(device_manager, param, output_info); output_id++; diff --git a/dlls/winewayland.drv/waylanddrv.h b/dlls/winewayland.drv/waylanddrv.h index 995275768a5..3dfe341b623 100644 --- a/dlls/winewayland.drv/waylanddrv.h +++ b/dlls/winewayland.drv/waylanddrv.h @@ -310,6 +310,17 @@ static inline LRESULT send_message(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp
RGNDATA *get_region_data(HRGN region);
+/* Returns TRUE if dst contains a complete unicode copy of src, FALSE if truncation + * occurred. If n > 0 dst is always NULL terminated. */ +static inline BOOL asciiz_to_unicodez(WCHAR *dst, const char *src, size_t n) +{ + WCHAR *p = dst; + if (!n) return FALSE; + while (n && *src) { *p++ = *src++; n--; } + if (!n) p[-1] = 0; else *p = 0; + return !!n; +} + /********************************************************************** * USER driver functions */