wayland: Use xdg-output to get connector names when older versions of libwayland are in use

Connector names prior to v4 were sent via xdg-output, so use that if an older version of libwayland is present.

Additionally, ensure the output names are actually allocated before comparing the strings.
main
Frank Praznik 2024-04-12 13:58:19 -04:00
parent 60f26182c3
commit f6edc2f603
1 changed files with 15 additions and 6 deletions

View File

@ -255,8 +255,9 @@ static void Wayland_SortOutputs(SDL_VideoData *vid)
/* Sort the outputs by connector name. */
WAYLAND_wl_list_init(&sorted_list);
wl_list_for_each (c, &vid->output_order, link) {
if (c->wl_output_name) {
wl_list_for_each (d, &vid->output_list, link) {
if (SDL_strcmp(c->wl_output_name, d->wl_output_name) == 0) {
if (d->wl_output_name && SDL_strcmp(c->wl_output_name, d->wl_output_name) == 0) {
/* Remove from the current list and Append the next node to the end of the new list. */
WAYLAND_wl_list_remove(&d->link);
WAYLAND_wl_list_insert(sorted_list.prev, &d->link);
@ -264,6 +265,7 @@ static void Wayland_SortOutputs(SDL_VideoData *vid)
}
}
}
}
if (!WAYLAND_wl_list_empty(&vid->output_list)) {
/* If any displays were omitted during the sort, append them to the new list.
@ -565,7 +567,14 @@ static void xdg_output_handle_done(void *data, struct zxdg_output_v1 *xdg_output
static void xdg_output_handle_name(void *data, struct zxdg_output_v1 *xdg_output,
const char *name)
{
SDL_DisplayData *driverdata = (SDL_DisplayData *)data;
/* Deprecated as of wl_output v4. */
if (wl_output_get_version(driverdata->output) < WL_OUTPUT_NAME_SINCE_VERSION &&
driverdata->display == 0) {
SDL_free(driverdata->wl_output_name);
driverdata->wl_output_name = SDL_strdup(name);
}
}
static void xdg_output_handle_description(void *data, struct zxdg_output_v1 *xdg_output,