~emersion/public-inbox

This thread contains a patchset. You're looking at the original emails, but you may wish to use the patch review UI. Review patch
1

[PATCH wlr-randr] Support wlr-output-management version 2

Details
Message ID
<20220628181120.10809-1-mail@isaacfreund.com>
DKIM signature
pass
Download raw message
Patch: +110 -7
If the server advertises version 2, wlr-randr now prints the output
head's make/model/serial in addition to the current information.

On it's own this patch isn't terribly useful, but it allows us to
implement upcoming version 3 protocol additions.
---
 main.c                                        | 34 +++++++-
 .../wlr-output-management-unstable-v1.xml     | 83 +++++++++++++++++--
 2 files changed, 110 insertions(+), 7 deletions(-)

diff --git a/main.c b/main.c
index 5dc4456..349a214 100644
--- a/main.c
+++ b/main.c
@@ -29,6 +29,7 @@ struct randr_head {
	struct wl_list link;

	char *name, *description;
	char *make, *model, *serial_number;
	int32_t phys_width, phys_height; // mm
	struct wl_list modes;

@@ -67,11 +68,20 @@ static void print_state(struct randr_state *state) {
	struct randr_head *head;
	wl_list_for_each(head, &state->heads, link) {
		printf("%s \"%s\"\n", head->name, head->description);

		if (zwlr_output_manager_v1_get_version(state->output_manager) >= 2) {
			printf("  Make: %s\n", head->make);
			printf("  Model: %s\n", head->model);
			printf("  Serial: %s\n", head->serial_number);
		}

		if (head->phys_width > 0 && head->phys_height > 0) {
			printf("  Physical size: %dx%d mm\n",
				head->phys_width, head->phys_height);
		}

		printf("  Enabled: %s\n", head->enabled ? "yes" : "no");

		if (!wl_list_empty(&head->modes)) {
			printf("  Modes:\n");
			struct randr_mode *mode;
@@ -300,6 +310,24 @@ static void head_handle_finished(void *data,
	free(head);
}

static void head_handle_make(void *data,
		struct zwlr_output_head_v1 *wlr_head, const char *make) {
	struct randr_head *head = data;
	head->make = strdup(make);
}

static void head_handle_model(void *data,
		struct zwlr_output_head_v1 *wlr_head, const char *model) {
	struct randr_head *head = data;
	head->model = strdup(model);
}

static void head_handle_serial_number(void *data,
		struct zwlr_output_head_v1 *wlr_head, const char *serial_number) {
	struct randr_head *head = data;
	head->serial_number = strdup(serial_number);
}

static const struct zwlr_output_head_v1_listener head_listener = {
	.name = head_handle_name,
	.description = head_handle_description,
@@ -311,6 +339,9 @@ static const struct zwlr_output_head_v1_listener head_listener = {
	.transform = head_handle_transform,
	.scale = head_handle_scale,
	.finished = head_handle_finished,
	.make = head_handle_make,
	.model = head_handle_model,
	.serial_number = head_handle_serial_number,
};

static void output_manager_handle_head(void *data,
@@ -350,8 +381,9 @@ static void registry_handle_global(void *data, struct wl_registry *registry,
	struct randr_state *state = data;

	if (strcmp(interface, zwlr_output_manager_v1_interface.name) == 0) {
		uint32_t version_to_bind = version <= 2 ? version : 2;
		state->output_manager = wl_registry_bind(registry, name,
			&zwlr_output_manager_v1_interface, 1);
			&zwlr_output_manager_v1_interface, version_to_bind);
		zwlr_output_manager_v1_add_listener(state->output_manager,
			&output_manager_listener, state);
	}
diff --git a/protocol/wlr-output-management-unstable-v1.xml b/protocol/wlr-output-management-unstable-v1.xml
index 35f7ca4..bf0cc93 100644
--- a/protocol/wlr-output-management-unstable-v1.xml
+++ b/protocol/wlr-output-management-unstable-v1.xml
@@ -39,7 +39,7 @@
    interface version number is reset.
  </description>

  <interface name="zwlr_output_manager_v1" version="1">
  <interface name="zwlr_output_manager_v1" version="2">
    <description summary="output device configuration manager">
      This interface is a manager that allows reading and writing the current
      output device configuration.
@@ -115,7 +115,7 @@
      </description>
    </request>

    <event name="finished">
    <event name="finished" type="destructor">
      <description summary="the compositor has finished with the manager">
        This event indicates that the compositor is done sending manager events.
        The compositor will destroy the object immediately after sending this
@@ -125,7 +125,7 @@
    </event>
  </interface>

  <interface name="zwlr_output_head_v1" version="1">
  <interface name="zwlr_output_head_v1" version="2">
    <description summary="output device">
      A head is an output device. The difference between a wl_output object and
      a head is that heads are advertised even if they are turned off. A head
@@ -257,9 +257,80 @@
        resources associated with it.
      </description>
    </event>

    <!-- Version 2 additions -->
    <event name="make" since="2">
      <description summary="head manufacturer">
        This event describes the manufacturer of the head.

        This must report the same make as the wl_output interface does in its
        geometry event.

        Together with the model and serial_number events the purpose is to
        allow clients to recognize heads from previous sessions and for example
        load head-specific configurations back.

        It is not guaranteed this event will be ever sent. A reason for that
        can be that the compositor does not have information about the make of
        the head or the definition of a make is not sensible in the current
        setup, for example in a virtual session. Clients can still try to
        identify the head by available information from other events but should
        be aware that there is an increased risk of false positives.

        It is not recommended to display the make string in UI to users. For
        that the string provided by the description event should be preferred.
      </description>
      <arg name="make" type="string"/>
    </event>

    <event name="model" since="2">
      <description summary="head model">
        This event describes the model of the head.

        This must report the same model as the wl_output interface does in its
        geometry event.

        Together with the make and serial_number events the purpose is to
        allow clients to recognize heads from previous sessions and for example
        load head-specific configurations back.

        It is not guaranteed this event will be ever sent. A reason for that
        can be that the compositor does not have information about the model of
        the head or the definition of a model is not sensible in the current
        setup, for example in a virtual session. Clients can still try to
        identify the head by available information from other events but should
        be aware that there is an increased risk of false positives.

        It is not recommended to display the model string in UI to users. For
        that the string provided by the description event should be preferred.
      </description>
      <arg name="model" type="string"/>
    </event>

    <event name="serial_number" since="2">
      <description summary="head serial number">
        This event describes the serial number of the head.

        Together with the make and model events the purpose is to allow clients
        to recognize heads from previous sessions and for example load head-
        specific configurations back.

        It is not guaranteed this event will be ever sent. A reason for that
        can be that the compositor does not have information about the serial
        number of the head or the definition of a serial number is not sensible
        in the current setup. Clients can still try to identify the head by
        available information from other events but should be aware that there
        is an increased risk of false positives.

        It is not recommended to display the serial_number string in UI to
        users. For that the string provided by the description event should be
        preferred.
      </description>
      <arg name="serial_number" type="string"/>
    </event>
  </interface>

  <interface name="zwlr_output_mode_v1" version="1">
  <interface name="zwlr_output_mode_v1" version="2">
    <description summary="output mode">
      This object describes an output mode.

@@ -305,7 +376,7 @@
    </event>
  </interface>

  <interface name="zwlr_output_configuration_v1" version="1">
  <interface name="zwlr_output_configuration_v1" version="2">
    <description summary="output configuration">
      This object is used by the client to describe a full output configuration.

@@ -423,7 +494,7 @@
    </request>
  </interface>

  <interface name="zwlr_output_configuration_head_v1" version="1">
  <interface name="zwlr_output_configuration_head_v1" version="2">
    <description summary="head configuration">
      This object is used by the client to update a single head's configuration.

-- 
2.36.1
Details
Message ID
<4KsSggwYApnwORxX5A_7pYo0vrq1-17axWoCMCn9XI1ZCgrbeQJyt-Gk-IWq5sGNMpK3udgSD3a9YFIJGyzKzUA64naHBLmLaUx596Tj4DA=@emersion.fr>
In-Reply-To
<20220628181120.10809-1-mail@isaacfreund.com> (view parent)
DKIM signature
pass
Download raw message
Pushed, thanks!
Reply to thread Export thread (mbox)