From 50ea41cb04a865392f3cbe358b2eb29c5cb9eeb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Camilla=20L=C3=B6wy?= Date: Tue, 14 Jun 2022 18:20:56 +0200 Subject: [PATCH] Wayland: Add support for wl_output::name We now use wl_output::name as the GLFW monitor name, on compositors that provide this event. (cherry picked from commit 209f6cf0935412e067e6595790cf3d3d5866923d) --- README.md | 1 + src/wl_monitor.c | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0ecbcab3..5437853a 100644 --- a/README.md +++ b/README.md @@ -139,6 +139,7 @@ information on what to include when reporting a bug. - [X11] Bugfix: A malformed response during selection transfer could cause a segfault - [X11] Bugfix: Some calls would reset Xlib to the default error handler (#2108) - [Wayland] Added support for file path drop events (#2040) + - [Wayland] Added support for more human-readable monitor names where available - [Wayland] Removed support for the deprecated wl\_shell protocol - [Wayland] Bugfix: `glfwSetClipboardString` would fail if set to result of `glfwGetClipboardString` diff --git a/src/wl_monitor.c b/src/wl_monitor.c index f11fb874..52cab9ad 100644 --- a/src/wl_monitor.c +++ b/src/wl_monitor.c @@ -53,7 +53,8 @@ static void outputHandleGeometry(void* userData, monitor->widthMM = physicalWidth; monitor->heightMM = physicalHeight; - snprintf(monitor->name, sizeof(monitor->name), "%s %s", make, model); + if (strlen(monitor->name) == 0) + snprintf(monitor->name, sizeof(monitor->name), "%s %s", make, model); } static void outputHandleMode(void* userData, @@ -106,12 +107,33 @@ static void outputHandleScale(void* userData, monitor->wl.scale = factor; } +#ifdef WL_OUTPUT_NAME_SINCE_VERSION + +void outputHandleName(void* userData, struct wl_output* wl_output, const char* name) +{ + struct _GLFWmonitor* monitor = userData; + + strncpy(monitor->name, name, sizeof(monitor->name) - 1); +} + +void outputHandleDescription(void* userData, + struct wl_output* wl_output, + const char* description) +{ +} + +#endif // WL_OUTPUT_NAME_SINCE_VERSION + static const struct wl_output_listener outputListener = { outputHandleGeometry, outputHandleMode, outputHandleDone, outputHandleScale, +#ifdef WL_OUTPUT_NAME_SINCE_VERSION + outputHandleName, + outputHandleDescription, +#endif }; @@ -128,10 +150,16 @@ void _glfwAddOutputWayland(uint32_t name, uint32_t version) return; } +#ifdef WL_OUTPUT_NAME_SINCE_VERSION + version = _glfw_min(version, WL_OUTPUT_NAME_SINCE_VERSION); +#else + version = 2; +#endif + struct wl_output* output = wl_registry_bind(_glfw.wl.registry, name, &wl_output_interface, - 2); + version); if (!output) return;