From 72034b9a07776e26cc2c83f519549c457c3452f7 Mon Sep 17 00:00:00 2001 From: Frank Praznik Date: Thu, 12 Oct 2023 11:54:18 -0400 Subject: [PATCH] wayland: Fix primary selection handling when the protocol isn't supported The primary selection protocol is optional, so the function pointers to the internal Wayland functions should only be set if the protocol is supported. This allows graceful fall-back to the generic SDL implementation in other cases. Fixes the clipboard tests under Weston. --- src/video/wayland/SDL_waylandclipboard.c | 2 +- src/video/wayland/SDL_waylandvideo.c | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/video/wayland/SDL_waylandclipboard.c b/src/video/wayland/SDL_waylandclipboard.c index 0346b2cf5..75c358809 100644 --- a/src/video/wayland/SDL_waylandclipboard.c +++ b/src/video/wayland/SDL_waylandclipboard.c @@ -107,7 +107,7 @@ int Wayland_SetPrimarySelectionText(SDL_VideoDevice *_this, const char *text) { SDL_VideoData *video_data = _this->driverdata; SDL_WaylandPrimarySelectionDevice *primary_selection_device = NULL; - int status = 0; + int status = -1; if (video_data->input != NULL && video_data->input->primary_selection_device != NULL) { primary_selection_device = video_data->input->primary_selection_device; diff --git a/src/video/wayland/SDL_waylandvideo.c b/src/video/wayland/SDL_waylandvideo.c index 09b836808..92f03263d 100644 --- a/src/video/wayland/SDL_waylandvideo.c +++ b/src/video/wayland/SDL_waylandvideo.c @@ -230,9 +230,6 @@ static SDL_VideoDevice *Wayland_CreateDevice(void) device->SetClipboardData = Wayland_SetClipboardData; device->GetClipboardData = Wayland_GetClipboardData; device->HasClipboardData = Wayland_HasClipboardData; - device->SetPrimarySelectionText = Wayland_SetPrimarySelectionText; - device->GetPrimarySelectionText = Wayland_GetPrimarySelectionText; - device->HasPrimarySelectionText = Wayland_HasPrimarySelectionText; device->StartTextInput = Wayland_StartTextInput; device->StopTextInput = Wayland_StopTextInput; device->SetTextInputRect = Wayland_SetTextInputRect; @@ -912,6 +909,12 @@ int Wayland_VideoInit(SDL_VideoDevice *_this) Wayland_InitKeyboard(_this); + if (data->primary_selection_device_manager) { + _this->SetPrimarySelectionText = Wayland_SetPrimarySelectionText; + _this->GetPrimarySelectionText = Wayland_GetPrimarySelectionText; + _this->HasPrimarySelectionText = Wayland_HasPrimarySelectionText; + } + data->initializing = SDL_FALSE; return 0;