On 2017-12-14 05:40 AM, Pekka Paalanen wrote:
From: Pekka Paalanen <pekka.paala...@collabora.co.uk>

Heads may be disconnected or connected and the compositor needs to be
able to know the state to know which heads to take into use.

Currently a single head is automatically created with an output, and
outputs are only ever created as connected and destroyed on
disconnection, so it suffices to set connected to true. In the future,
backends are expected to create heads for both connected and
disconnected connectors, so that a connector can be forced on without it
being actually connected.

Signed-off-by: Pekka Paalanen <pekka.paala...@collabora.co.uk>
---
  libweston/compositor.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++
  libweston/compositor.h | 10 ++++++++
  2 files changed, 74 insertions(+)

diff --git a/libweston/compositor.c b/libweston/compositor.c
index b0d1629e..349803e8 100644
--- a/libweston/compositor.c
+++ b/libweston/compositor.c
@@ -4597,6 +4597,69 @@ weston_head_set_internal(struct weston_head *head)
        head->connection_internal = true;
  }
+/** Store connector status
+ *
+ * \param head The head to modify.
+ * \param connected Whether the head is connected.
+ *
+ * Connectors are created as disconnected. This function can be used to
+ * set the connector status.
+ *
+ * The status should be set to true when a physical connector is connected to
+ * a video sink device like a monitor and to false when the connector is
+ * disconnected. For nested backends, the connection status should reflect the
+ * connection to the parent display server.
+ *
+ * \memberof weston_head
+ * \internal
+ */
+WL_EXPORT void
+weston_head_set_connection_status(struct weston_head *head, bool connected)
+{
+       head->connected = connected;
+}
+
+/** Is the head currently connected?
+ *
+ * \param head The head to query.
+ * \return Connection status.
+ *
+ * Returns true if the head is physically connected to a monitor, or in
+ * case of a nested backend returns true when there is a connection to the
+ * parent display server.
+ *
+ * This is independent from the head being enabled.
+ *
+ * \sa weston_head_is_enabled
+ * \memberof weston_head
+ */
+WL_EXPORT bool
+weston_head_is_connected(struct weston_head *head)
+{
+       return head->connected;
+}
+
+/** Is the head currently enabled?
+ *
+ * \param head The head to query.
+ * \return Video status.
+ *
+ * Returns true if the head is currently transmitting a video stream.
+ *
+ * This is independent of the head being connected.
+ *
+ * \sa weston_head_is_connected
+ * \memberof weston_head
+ */
+WL_EXPORT bool
+weston_head_is_enabled(struct weston_head *head)
+{
+       if (!head->output)
+               return false;
+
+       return head->output->enabled;
+}

I suppose if I'm trying to be as pedantic possible, I wasn't expecting to see this function added from the content of the commit log.

Reviewed-by: Derek Foreman <der...@osg.samsung.com>

And if you decide to split weston_head_is_enabled() into its own patch, that's RB me too. As is the previous "add name to weston_head" patch.

Thanks,
Derek

+
  /* Move other outputs when one is resized so the space remains contiguous. */
  static void
  weston_compositor_reflow_outputs(struct weston_compositor *compositor,
@@ -4968,6 +5031,7 @@ weston_output_init(struct weston_output *output,
        wl_list_init(&output->head_list);
weston_head_init(&output->head, name);
+       weston_head_set_connection_status(&output->head, true);
/* Add some (in)sane defaults which can be used
         * for checking if an output was properly configured
diff --git a/libweston/compositor.h b/libweston/compositor.h
index 02b5fa32..d14dd6dc 100644
--- a/libweston/compositor.h
+++ b/libweston/compositor.h
@@ -168,6 +168,7 @@ struct weston_head {
        bool connection_internal;       /**< embedded monitor (e.g. laptop) */
char *name; /**< head name, e.g. connector name */
+       bool connected;                 /**< is physically connected */
  };
struct weston_output {
@@ -1966,8 +1967,17 @@ weston_head_set_subpixel(struct weston_head *head,
                         enum wl_output_subpixel sp);
void
+weston_head_set_connection_status(struct weston_head *head, bool connected);
+
+void
  weston_head_set_internal(struct weston_head *head);
+bool
+weston_head_is_connected(struct weston_head *head);
+
+bool
+weston_head_is_enabled(struct weston_head *head);
+
  void
  weston_output_set_scale(struct weston_output *output,
                        int32_t scale);


_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to