From bdc5174f683bc2b298dc74144dd932fdfbc635e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 15 Dec 2025 13:25:26 +0800 Subject: [PATCH] DisplayServer (Linux): upgrades kde-output-device-v2 wayland protocol files (again) Fixes #2093 --- .../kde-output-device-v2-client-protocol.h | 55 +++++++++++++++++++ .../wayland/kde-output-device-v2-protocol.c | 10 ++-- .../displayserver/linux/wayland/kde-output.c | 1 + 3 files changed, 62 insertions(+), 4 deletions(-) diff --git a/src/detection/displayserver/linux/wayland/kde-output-device-v2-client-protocol.h b/src/detection/displayserver/linux/wayland/kde-output-device-v2-client-protocol.h index 9e824fce9..bec7f9e37 100644 --- a/src/detection/displayserver/linux/wayland/kde-output-device-v2-client-protocol.h +++ b/src/detection/displayserver/linux/wayland/kde-output-device-v2-client-protocol.h @@ -239,6 +239,11 @@ enum kde_output_device_v2_capability { * @since 17 */ KDE_OUTPUT_DEVICE_V2_CAPABILITY_SHARPNESS = 0x1000, + /** + * if this outputdevice supports custom modes + * @since 18 + */ + KDE_OUTPUT_DEVICE_V2_CAPABILITY_CUSTOM_MODES = 0x2000, }; /** * @ingroup iface_kde_output_device_v2 @@ -280,6 +285,10 @@ enum kde_output_device_v2_capability { * @ingroup iface_kde_output_device_v2 */ #define KDE_OUTPUT_DEVICE_V2_CAPABILITY_SHARPNESS_SINCE_VERSION 17 +/** + * @ingroup iface_kde_output_device_v2 + */ +#define KDE_OUTPUT_DEVICE_V2_CAPABILITY_CUSTOM_MODES_SINCE_VERSION 18 #endif /* KDE_OUTPUT_DEVICE_V2_CAPABILITY_ENUM */ #ifndef KDE_OUTPUT_DEVICE_V2_VRR_POLICY_ENUM @@ -794,6 +803,23 @@ struct kde_output_device_v2_listener { void (*sharpness)(void *data, struct kde_output_device_v2 *kde_output_device_v2, uint32_t sharpness); + /** + * output priority + * + * Describes the position of the output in the output order list, + * with lower values being earlier in the list. There's no specific + * value the list has to start at, this value is only used in + * sorting outputs. + * + * Note that the output order protocol is not sufficient for this, + * as an output may not be in the output order if it's disabled or + * mirroring another screen. + * @param priority priority + * @since 18 + */ + void (*priority)(void *data, + struct kde_output_device_v2 *kde_output_device_v2, + uint32_t priority); }; /** @@ -943,6 +969,10 @@ kde_output_device_v2_add_listener(struct kde_output_device_v2 *kde_output_device * @ingroup iface_kde_output_device_v2 */ #define KDE_OUTPUT_DEVICE_V2_SHARPNESS_SINCE_VERSION 17 +/** + * @ingroup iface_kde_output_device_v2 + */ +#define KDE_OUTPUT_DEVICE_V2_PRIORITY_SINCE_VERSION 18 /** @ingroup iface_kde_output_device_v2 */ @@ -972,6 +1002,18 @@ kde_output_device_v2_destroy(struct kde_output_device_v2 *kde_output_device_v2) wl_proxy_destroy((struct wl_proxy *) kde_output_device_v2); } +#ifndef KDE_OUTPUT_DEVICE_MODE_V2_FLAGS_ENUM +#define KDE_OUTPUT_DEVICE_MODE_V2_FLAGS_ENUM +/** + * @ingroup iface_kde_output_device_mode_v2 + * mode flags + */ +enum kde_output_device_mode_v2_flags { + KDE_OUTPUT_DEVICE_MODE_V2_FLAGS_CUSTOM = 0x1, + KDE_OUTPUT_DEVICE_MODE_V2_FLAGS_REDUCED_BLANKING = 0x2, +}; +#endif /* KDE_OUTPUT_DEVICE_MODE_V2_FLAGS_ENUM */ + /** * @ingroup iface_kde_output_device_mode_v2 * @struct kde_output_device_mode_v2_listener @@ -1017,6 +1059,15 @@ struct kde_output_device_mode_v2_listener { */ void (*removed)(void *data, struct kde_output_device_mode_v2 *kde_output_device_mode_v2); + /** + * mode flags + * + * This event describes the mode's flags. + * @since 19 + */ + void (*flags)(void *data, + struct kde_output_device_mode_v2 *kde_output_device_mode_v2, + uint32_t flags); }; /** @@ -1046,6 +1097,10 @@ kde_output_device_mode_v2_add_listener(struct kde_output_device_mode_v2 *kde_out * @ingroup iface_kde_output_device_mode_v2 */ #define KDE_OUTPUT_DEVICE_MODE_V2_REMOVED_SINCE_VERSION 1 +/** + * @ingroup iface_kde_output_device_mode_v2 + */ +#define KDE_OUTPUT_DEVICE_MODE_V2_FLAGS_SINCE_VERSION 19 /** @ingroup iface_kde_output_device_mode_v2 */ diff --git a/src/detection/displayserver/linux/wayland/kde-output-device-v2-protocol.c b/src/detection/displayserver/linux/wayland/kde-output-device-v2-protocol.c index 889d37254..1c4fe0ef5 100644 --- a/src/detection/displayserver/linux/wayland/kde-output-device-v2-protocol.c +++ b/src/detection/displayserver/linux/wayland/kde-output-device-v2-protocol.c @@ -67,12 +67,13 @@ static const struct wl_message kde_output_device_v2_events[] = { { "automatic_max_bits_per_color_limit", "15u", kde_output_device_v2_types + 0 }, { "edr_policy", "16u", kde_output_device_v2_types + 0 }, { "sharpness", "17u", kde_output_device_v2_types + 0 }, + { "priority", "18u", kde_output_device_v2_types + 0 }, }; WL_EXPORT const struct wl_interface kde_output_device_v2_interface = { - "kde_output_device_v2", 17, + "kde_output_device_v2", 19, 0, NULL, - 34, kde_output_device_v2_events, + 35, kde_output_device_v2_events, }; static const struct wl_message kde_output_device_mode_v2_events[] = { @@ -80,12 +81,13 @@ static const struct wl_message kde_output_device_mode_v2_events[] = { { "refresh", "i", kde_output_device_v2_types + 0 }, { "preferred", "", kde_output_device_v2_types + 0 }, { "removed", "", kde_output_device_v2_types + 0 }, + { "flags", "19u", kde_output_device_v2_types + 0 }, }; WL_EXPORT const struct wl_interface kde_output_device_mode_v2_interface = { - "kde_output_device_mode_v2", 1, + "kde_output_device_mode_v2", 19, 0, NULL, - 4, kde_output_device_mode_v2_events, + 5, kde_output_device_mode_v2_events, }; #endif diff --git a/src/detection/displayserver/linux/wayland/kde-output.c b/src/detection/displayserver/linux/wayland/kde-output.c index 9b18f9061..7d986ba14 100644 --- a/src/detection/displayserver/linux/wayland/kde-output.c +++ b/src/detection/displayserver/linux/wayland/kde-output.c @@ -178,6 +178,7 @@ static struct kde_output_device_v2_listener outputListener = { .automatic_max_bits_per_color_limit = (void*) stubListener, .edr_policy = (void*) stubListener, .sharpness = (void*) stubListener, + .priority = (void*) stubListener, }; const char* ffWaylandHandleKdeOutput(WaylandData* wldata, struct wl_registry* registry, uint32_t name, uint32_t version)