Linux (Wayland): drops zwlr-output.c

It doesn't expose much more functions than `wl-output`
This commit is contained in:
Carter Li
2026-06-17 15:10:24 +08:00
parent bf0133fe60
commit e84195bca0
6 changed files with 0 additions and 1700 deletions
-12
View File
@@ -598,9 +598,7 @@ if(LINUX)
src/detection/displayserver/linux/drm.c
src/detection/displayserver/linux/wayland/wayland.c
src/detection/displayserver/linux/wayland/global-output.c
src/detection/displayserver/linux/wayland/zwlr-output.c
src/detection/displayserver/linux/wayland/kde-output.c
src/detection/displayserver/linux/wayland/wlr-output-management-unstable-v1-protocol.c
src/detection/displayserver/linux/wayland/kde-output-device-v2-protocol.c
src/detection/displayserver/linux/wayland/kde-output-order-v1-protocol.c
src/detection/displayserver/linux/wayland/xdg-output-unstable-v1-protocol.c
@@ -759,9 +757,7 @@ elseif(FreeBSD)
src/detection/displayserver/linux/drm.c
src/detection/displayserver/linux/wayland/wayland.c
src/detection/displayserver/linux/wayland/global-output.c
src/detection/displayserver/linux/wayland/zwlr-output.c
src/detection/displayserver/linux/wayland/kde-output.c
src/detection/displayserver/linux/wayland/wlr-output-management-unstable-v1-protocol.c
src/detection/displayserver/linux/wayland/kde-output-device-v2-protocol.c
src/detection/displayserver/linux/wayland/kde-output-order-v1-protocol.c
src/detection/displayserver/linux/wayland/xdg-output-unstable-v1-protocol.c
@@ -855,9 +851,7 @@ elseif(NetBSD)
src/detection/displayserver/linux/drm.c
src/detection/displayserver/linux/wayland/wayland.c
src/detection/displayserver/linux/wayland/global-output.c
src/detection/displayserver/linux/wayland/zwlr-output.c
src/detection/displayserver/linux/wayland/kde-output.c
src/detection/displayserver/linux/wayland/wlr-output-management-unstable-v1-protocol.c
src/detection/displayserver/linux/wayland/kde-output-device-v2-protocol.c
src/detection/displayserver/linux/wayland/kde-output-order-v1-protocol.c
src/detection/displayserver/linux/wayland/xdg-output-unstable-v1-protocol.c
@@ -940,9 +934,7 @@ elseif(OpenBSD)
src/detection/displayserver/linux/drm.c
src/detection/displayserver/linux/wayland/wayland.c
src/detection/displayserver/linux/wayland/global-output.c
src/detection/displayserver/linux/wayland/zwlr-output.c
src/detection/displayserver/linux/wayland/kde-output.c
src/detection/displayserver/linux/wayland/wlr-output-management-unstable-v1-protocol.c
src/detection/displayserver/linux/wayland/kde-output-device-v2-protocol.c
src/detection/displayserver/linux/wayland/kde-output-order-v1-protocol.c
src/detection/displayserver/linux/wayland/xdg-output-unstable-v1-protocol.c
@@ -1185,9 +1177,7 @@ elseif(SunOS)
src/detection/displayserver/linux/drm.c
src/detection/displayserver/linux/wayland/wayland.c
src/detection/displayserver/linux/wayland/global-output.c
src/detection/displayserver/linux/wayland/zwlr-output.c
src/detection/displayserver/linux/wayland/kde-output.c
src/detection/displayserver/linux/wayland/wlr-output-management-unstable-v1-protocol.c
src/detection/displayserver/linux/wayland/kde-output-device-v2-protocol.c
src/detection/displayserver/linux/wayland/kde-output-order-v1-protocol.c
src/detection/displayserver/linux/wayland/xdg-output-unstable-v1-protocol.c
@@ -1339,8 +1329,6 @@ elseif(GNU)
src/detection/displayserver/linux/drm.c
src/detection/displayserver/linux/wayland/wayland.c
src/detection/displayserver/linux/wayland/global-output.c
src/detection/displayserver/linux/wayland/zwlr-output.c
src/detection/displayserver/linux/wayland/wlr-output-management-unstable-v1-protocol.c
src/detection/displayserver/linux/wmde.c
src/detection/displayserver/linux/xcb.c
src/detection/displayserver/linux/xlib.c
@@ -13,7 +13,6 @@
#include "common/properties.h"
#include "wayland.h"
#include "wlr-output-management-unstable-v1-client-protocol.h"
#include "kde-output-device-v2-client-protocol.h"
#include "kde-output-order-v1-client-protocol.h"
#include "xdg-output-unstable-v1-client-protocol.h"
@@ -86,11 +85,6 @@ static void waylandGlobalAddListener(void* data, struct wl_registry* registry, u
if (ffWaylandHandleGlobalOutput(wldata, registry, name, version) != NULL) {
wldata->protocolType = FF_WAYLAND_PROTOCOL_TYPE_NONE;
}
} else if ((wldata->protocolType == FF_WAYLAND_PROTOCOL_TYPE_NONE || wldata->protocolType == FF_WAYLAND_PROTOCOL_TYPE_ZWLR) && ffStrEquals(interface, zwlr_output_manager_v1_interface.name)) {
wldata->protocolType = FF_WAYLAND_PROTOCOL_TYPE_ZWLR;
if (ffWaylandHandleZwlrOutput(wldata, registry, name, version) != NULL) {
wldata->protocolType = FF_WAYLAND_PROTOCOL_TYPE_NONE;
}
} else if ((wldata->protocolType == FF_WAYLAND_PROTOCOL_TYPE_NONE || wldata->protocolType == FF_WAYLAND_PROTOCOL_TYPE_KDE) && ffStrEquals(interface, kde_output_device_v2_interface.name)) {
wldata->protocolType = FF_WAYLAND_PROTOCOL_TYPE_KDE;
if (ffWaylandHandleKdeOutput(wldata, registry, name, version) != NULL) {
@@ -16,7 +16,6 @@ static inline uint32_t min(uint32_t a, uint32_t b) {
typedef enum FF_A_PACKED WaylandProtocolType {
FF_WAYLAND_PROTOCOL_TYPE_NONE,
FF_WAYLAND_PROTOCOL_TYPE_GLOBAL,
FF_WAYLAND_PROTOCOL_TYPE_ZWLR,
FF_WAYLAND_PROTOCOL_TYPE_KDE,
} WaylandProtocolType;
@@ -81,7 +80,6 @@ void ffWaylandOutputDescriptionListener(void* data, FF_A_UNUSED void* output, co
uint32_t ffWaylandHandleRotation(WaylandDisplay* display);
const char* ffWaylandHandleGlobalOutput(WaylandData* wldata, struct wl_registry* registry, uint32_t name, uint32_t version);
const char* ffWaylandHandleZwlrOutput(WaylandData* wldata, struct wl_registry* registry, uint32_t name, uint32_t version);
const char* ffWaylandHandleKdeOutput(WaylandData* wldata, struct wl_registry* registry, uint32_t name, uint32_t version);
const char* ffWaylandHandleKdeOutputOrder(WaylandData* wldata, struct wl_registry* registry, uint32_t name, uint32_t version);
const char* ffWaylandHandleZxdgOutput(WaylandData* wldata, struct wl_registry* registry, uint32_t name, uint32_t version);
@@ -1,176 +0,0 @@
#ifdef FF_HAVE_WAYLAND
/* Generated by wayland-scanner 1.24.0 */
/*
* Copyright © 2019 Purism SPC
*
* Permission to use, copy, modify, distribute, and sell this
* software and its documentation for any purpose is hereby granted
* without fee, provided that the above copyright notice appear in
* all copies and that both that copyright notice and this permission
* notice appear in supporting documentation, and that the name of
* the copyright holders not be used in advertising or publicity
* pertaining to distribution of the software without specific,
* written prior permission. The copyright holders make no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied
* warranty.
*
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
* SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
* THIS SOFTWARE.
*/
#include <stdbool.h>
#include <stdlib.h>
#include <stdint.h>
#include <wayland-util.h>
#ifndef __has_attribute
#define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */
#endif
#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4)
#define WL_PRIVATE __attribute__((visibility("hidden")))
#else
#define WL_PRIVATE
#endif
extern const struct wl_interface zwlr_output_configuration_head_v1_interface;
extern const struct wl_interface zwlr_output_configuration_v1_interface;
extern const struct wl_interface zwlr_output_head_v1_interface;
extern const struct wl_interface zwlr_output_mode_v1_interface;
static const struct wl_interface* wlr_output_management_unstable_v1_types[] = {
NULL,
NULL,
NULL,
&zwlr_output_configuration_v1_interface,
NULL,
&zwlr_output_head_v1_interface,
&zwlr_output_mode_v1_interface,
&zwlr_output_mode_v1_interface,
&zwlr_output_configuration_head_v1_interface,
&zwlr_output_head_v1_interface,
&zwlr_output_head_v1_interface,
&zwlr_output_mode_v1_interface,
};
static const struct wl_message zwlr_output_manager_v1_requests[] = {
{ "create_configuration", "nu", wlr_output_management_unstable_v1_types + 3 },
{ "stop", "", wlr_output_management_unstable_v1_types + 0 },
};
static const struct wl_message zwlr_output_manager_v1_events[] = {
{ "head", "n", wlr_output_management_unstable_v1_types + 5 },
{ "done", "u", wlr_output_management_unstable_v1_types + 0 },
{ "finished", "", wlr_output_management_unstable_v1_types + 0 },
};
WL_PRIVATE const struct wl_interface zwlr_output_manager_v1_interface = {
"zwlr_output_manager_v1",
4,
2,
zwlr_output_manager_v1_requests,
3,
zwlr_output_manager_v1_events,
};
static const struct wl_message zwlr_output_head_v1_requests[] = {
{ "release", "3", wlr_output_management_unstable_v1_types + 0 },
};
static const struct wl_message zwlr_output_head_v1_events[] = {
{ "name", "s", wlr_output_management_unstable_v1_types + 0 },
{ "description", "s", wlr_output_management_unstable_v1_types + 0 },
{ "physical_size", "ii", wlr_output_management_unstable_v1_types + 0 },
{ "mode", "n", wlr_output_management_unstable_v1_types + 6 },
{ "enabled", "i", wlr_output_management_unstable_v1_types + 0 },
{ "current_mode", "o", wlr_output_management_unstable_v1_types + 7 },
{ "position", "ii", wlr_output_management_unstable_v1_types + 0 },
{ "transform", "i", wlr_output_management_unstable_v1_types + 0 },
{ "scale", "f", wlr_output_management_unstable_v1_types + 0 },
{ "finished", "", wlr_output_management_unstable_v1_types + 0 },
{ "make", "2s", wlr_output_management_unstable_v1_types + 0 },
{ "model", "2s", wlr_output_management_unstable_v1_types + 0 },
{ "serial_number", "2s", wlr_output_management_unstable_v1_types + 0 },
{ "adaptive_sync", "4u", wlr_output_management_unstable_v1_types + 0 },
};
WL_PRIVATE const struct wl_interface zwlr_output_head_v1_interface = {
"zwlr_output_head_v1",
4,
1,
zwlr_output_head_v1_requests,
14,
zwlr_output_head_v1_events,
};
static const struct wl_message zwlr_output_mode_v1_requests[] = {
{ "release", "3", wlr_output_management_unstable_v1_types + 0 },
};
static const struct wl_message zwlr_output_mode_v1_events[] = {
{ "size", "ii", wlr_output_management_unstable_v1_types + 0 },
{ "refresh", "i", wlr_output_management_unstable_v1_types + 0 },
{ "preferred", "", wlr_output_management_unstable_v1_types + 0 },
{ "finished", "", wlr_output_management_unstable_v1_types + 0 },
};
WL_PRIVATE const struct wl_interface zwlr_output_mode_v1_interface = {
"zwlr_output_mode_v1",
3,
1,
zwlr_output_mode_v1_requests,
4,
zwlr_output_mode_v1_events,
};
static const struct wl_message zwlr_output_configuration_v1_requests[] = {
{ "enable_head", "no", wlr_output_management_unstable_v1_types + 8 },
{ "disable_head", "o", wlr_output_management_unstable_v1_types + 10 },
{ "apply", "", wlr_output_management_unstable_v1_types + 0 },
{ "test", "", wlr_output_management_unstable_v1_types + 0 },
{ "destroy", "", wlr_output_management_unstable_v1_types + 0 },
};
static const struct wl_message zwlr_output_configuration_v1_events[] = {
{ "succeeded", "", wlr_output_management_unstable_v1_types + 0 },
{ "failed", "", wlr_output_management_unstable_v1_types + 0 },
{ "cancelled", "", wlr_output_management_unstable_v1_types + 0 },
};
WL_PRIVATE const struct wl_interface zwlr_output_configuration_v1_interface = {
"zwlr_output_configuration_v1",
4,
5,
zwlr_output_configuration_v1_requests,
3,
zwlr_output_configuration_v1_events,
};
static const struct wl_message zwlr_output_configuration_head_v1_requests[] = {
{ "set_mode", "o", wlr_output_management_unstable_v1_types + 11 },
{ "set_custom_mode", "iii", wlr_output_management_unstable_v1_types + 0 },
{ "set_position", "ii", wlr_output_management_unstable_v1_types + 0 },
{ "set_transform", "i", wlr_output_management_unstable_v1_types + 0 },
{ "set_scale", "f", wlr_output_management_unstable_v1_types + 0 },
{ "set_adaptive_sync", "4u", wlr_output_management_unstable_v1_types + 0 },
};
WL_PRIVATE const struct wl_interface zwlr_output_configuration_head_v1_interface = {
"zwlr_output_configuration_head_v1",
4,
6,
zwlr_output_configuration_head_v1_requests,
0,
NULL,
};
#endif
@@ -1,212 +0,0 @@
#ifdef FF_HAVE_WAYLAND
#include "wayland.h"
#include "wlr-output-management-unstable-v1-client-protocol.h"
static void waylandZwlrTransformListener(void* data, FF_A_UNUSED struct zwlr_output_head_v1* zwlr_output_head_v1, int32_t transform) {
WaylandDisplay* wldata = (WaylandDisplay*) data;
wldata->transform = (enum wl_output_transform) transform;
}
static void waylandZwlrScaleListener(void* data, FF_A_UNUSED struct zwlr_output_head_v1* zwlr_output_head_v1, wl_fixed_t scale) {
WaylandDisplay* wldata = (WaylandDisplay*) data;
wldata->dpi = (uint32_t) scale * 3 / 8; // wl_fixed_to_double(scale) * 96;
}
typedef struct WaylandZwlrMode {
int32_t width;
int32_t height;
int32_t refreshRate;
bool preferred;
struct zwlr_output_mode_v1* pMode;
} WaylandZwlrMode;
static void waylandZwlrModeSizeListener(void* data, FF_A_UNUSED struct zwlr_output_mode_v1* zwlr_output_mode_v1, int32_t width, int32_t height) {
WaylandZwlrMode* mode = (WaylandZwlrMode*) data;
mode->width = width;
mode->height = height;
}
static void waylandZwlrModeRefreshListener(void* data, FF_A_UNUSED struct zwlr_output_mode_v1* zwlr_output_mode_v1, int32_t rate) {
WaylandZwlrMode* mode = (WaylandZwlrMode*) data;
mode->refreshRate = rate;
}
static void waylandZwlrModePreferredListener(void* data, FF_A_UNUSED struct zwlr_output_mode_v1* zwlr_output_mode_v1) {
WaylandZwlrMode* mode = (WaylandZwlrMode*) data;
mode->preferred = true;
}
static const struct zwlr_output_mode_v1_listener modeListener = {
.size = waylandZwlrModeSizeListener,
.refresh = waylandZwlrModeRefreshListener,
.preferred = waylandZwlrModePreferredListener,
.finished = (void*) stubListener,
};
static void waylandZwlrModeListener(void* data, FF_A_UNUSED struct zwlr_output_head_v1* zwlr_output_head_v1, struct zwlr_output_mode_v1* mode) {
WaylandDisplay* wldata = (WaylandDisplay*) data;
if (!wldata->internal) {
return;
}
WaylandZwlrMode* newMode = FF_LIST_ADD(WaylandZwlrMode, *(FFlist*) wldata->internal);
*newMode = (WaylandZwlrMode) { .pMode = mode };
// Strangely, the listener is called only in this function, but not in `waylandZwlrCurrentModeListener`
wldata->parent->ffwl_proxy_add_listener((struct wl_proxy*) mode, (void (**)(void)) &modeListener, newMode);
}
static void waylandZwlrCurrentModeListener(void* data, FF_A_UNUSED struct zwlr_output_head_v1* zwlr_output_head_v1, struct zwlr_output_mode_v1* mode) {
// waylandZwlrModeListener is always run before this
WaylandDisplay* wldata = (WaylandDisplay*) data;
if (!wldata->internal) {
return;
}
int set = 0;
FF_LIST_FOR_EACH (WaylandZwlrMode, m, *(FFlist*) wldata->internal) {
if (m->pMode == mode) {
wldata->width = m->width;
wldata->height = m->height;
wldata->refreshRate = m->refreshRate;
if (++set == 2) {
break;
}
}
if (m->preferred) {
wldata->preferredWidth = m->width;
wldata->preferredHeight = m->height;
wldata->preferredRefreshRate = m->refreshRate;
if (++set == 2) {
break;
}
}
}
}
static void waylandZwlrPhysicalSizeListener(void* data, FF_A_UNUSED struct zwlr_output_head_v1* zwlr_output_head_v1, int32_t width, int32_t height) {
WaylandDisplay* wldata = (WaylandDisplay*) data;
wldata->physicalWidth = width;
wldata->physicalHeight = height;
}
static void waylandZwlrEnabledListener(void* data, FF_A_UNUSED struct zwlr_output_head_v1* zwlr_output_head_v1, bool enabled) {
WaylandDisplay* wldata = (WaylandDisplay*) data;
if (!enabled) {
wldata->internal = NULL;
}
}
static const struct zwlr_output_head_v1_listener headListener = {
.name = (void*) ffWaylandOutputNameListener,
.description = (void*) ffWaylandOutputDescriptionListener,
.physical_size = waylandZwlrPhysicalSizeListener,
.mode = waylandZwlrModeListener,
.enabled = (void*) waylandZwlrEnabledListener,
.current_mode = waylandZwlrCurrentModeListener,
.position = (void*) stubListener,
.transform = waylandZwlrTransformListener,
.scale = waylandZwlrScaleListener,
.finished = (void*) stubListener,
.make = (void*) stubListener,
.model = (void*) stubListener,
.serial_number = (void*) stubListener,
.adaptive_sync = (void*) stubListener,
};
static void waylandHandleZwlrHead(void* data, FF_A_UNUSED struct zwlr_output_manager_v1* zwlr_output_manager_v1, struct zwlr_output_head_v1* head) {
WaylandData* wldata = data;
FF_LIST_AUTO_DESTROY modes = ffListCreate();
WaylandDisplay display = {
.parent = wldata,
.transform = WL_OUTPUT_TRANSFORM_NORMAL,
.type = FF_DISPLAY_TYPE_UNKNOWN,
.name = ffStrbufCreate(),
.description = ffStrbufCreate(),
.edidName = ffStrbufCreate(),
.internal = &modes,
};
wldata->ffwl_proxy_add_listener((struct wl_proxy*) head, (void (**)(void)) &headListener, &display);
wldata->ffwl_display_roundtrip(wldata->display);
if (display.width <= 0 || display.height <= 0 || !display.internal) {
return;
}
uint32_t rotation = ffWaylandHandleRotation(&display);
FFDisplayResult* item = ffdsAppendDisplay(wldata->result,
(uint32_t) display.width,
(uint32_t) display.height,
display.refreshRate / 1000.0,
(uint32_t) display.dpi,
(uint32_t) display.preferredWidth,
(uint32_t) display.preferredHeight,
display.preferredRefreshRate / 1000.0,
rotation,
display.edidName.length
? &display.edidName
: display.description.length && !ffStrbufContain(&display.description, &display.name)
? &display.description
: &display.name,
display.type,
false,
display.id,
(uint32_t) display.physicalWidth,
(uint32_t) display.physicalHeight,
"wayland-zwlr");
if (item) {
if (display.hdrSupported) {
item->hdrStatus = FF_DISPLAY_HDR_STATUS_SUPPORTED;
} else if (display.hdrInfoAvailable) {
item->hdrStatus = FF_DISPLAY_HDR_STATUS_UNSUPPORTED;
} else {
item->hdrStatus = FF_DISPLAY_HDR_STATUS_UNKNOWN;
}
item->manufactureYear = display.myear;
item->manufactureWeek = display.mweek;
item->serial = display.serial;
}
ffStrbufDestroy(&display.description);
ffStrbufDestroy(&display.name);
ffStrbufDestroy(&display.edidName);
// These must be released manually
FF_LIST_FOR_EACH (WaylandZwlrMode, m, modes) {
wldata->ffwl_proxy_destroy((void*) m->pMode);
}
wldata->ffwl_proxy_destroy((void*) head);
}
static const struct zwlr_output_manager_v1_listener outputListener = {
.head = waylandHandleZwlrHead,
.done = (void*) stubListener,
.finished = (void*) stubListener,
};
const char* ffWaylandHandleZwlrOutput(WaylandData* wldata, struct wl_registry* registry, uint32_t name, uint32_t version) {
uint32_t bindVersion = min(version, ZWLR_OUTPUT_MANAGER_V1_HEAD_SINCE_VERSION);
struct wl_proxy* output = wldata->ffwl_proxy_marshal_constructor_versioned((struct wl_proxy*) registry, WL_REGISTRY_BIND, &zwlr_output_manager_v1_interface, bindVersion, name, zwlr_output_manager_v1_interface.name, bindVersion, NULL);
if (output == NULL) {
return "Failed to bind zwlr_output_manager_v1";
}
if (wldata->ffwl_proxy_add_listener(output, (void (**)(void)) &outputListener, wldata) < 0) {
wldata->ffwl_proxy_destroy(output);
return "Failed to add listener to zwlr_output_manager_v1";
}
if (wldata->ffwl_display_roundtrip(wldata->display) < 0) {
wldata->ffwl_proxy_destroy(output);
return "Failed to roundtrip display";
}
wldata->ffwl_proxy_destroy(output);
return NULL;
}
#endif