[v2] libweston-desktop: add signal for title/app-id changes

Submitted by Matt Hoosier on Sept. 5, 2017, 1:05 p.m.

Details

Message ID 20170905130549.3242-1-matt.hoosier@gmail.com
State New
Headers show
Series "libweston-desktop: add signal for title/app-id changes" ( rev: 1 ) in Wayland

Not browsing as part of any series.

Commit Message

Matt Hoosier Sept. 5, 2017, 1:05 p.m.
As discussed on
https://lists.freedesktop.org/archives/wayland-devel/2017-August/034720.html,
it's useful for the shell implementation to know when these change,
for example to relay the information on to taskbars or similar.

To avoid ABI changes or the need to make the weston_desktop_surface
definition public, new functions are introduced for attaching
listeners to these signals.

Signed-off-by: Matt Hoosier <matt.hoosier@gmail.com>
---
 libweston-desktop/libweston-desktop.h |  3 +++
 libweston-desktop/surface.c           | 12 ++++++++++++
 2 files changed, 15 insertions(+)

Patch hide | download patch | download mbox

diff --git a/libweston-desktop/libweston-desktop.h b/libweston-desktop/libweston-desktop.h
index 03b04c7b..c43568ac 100644
--- a/libweston-desktop/libweston-desktop.h
+++ b/libweston-desktop/libweston-desktop.h
@@ -164,6 +164,9 @@  weston_desktop_surface_set_size(struct weston_desktop_surface *surface,
 				int32_t width, int32_t height);
 void
 weston_desktop_surface_close(struct weston_desktop_surface *surface);
+void
+weston_desktop_surface_add_title_listener(struct weston_desktop_surface *surface,
+					  struct wl_listener *listener);
 
 void *
 weston_desktop_surface_get_user_data(struct weston_desktop_surface *surface);
diff --git a/libweston-desktop/surface.c b/libweston-desktop/surface.c
index d3be9364..d00ba5d6 100644
--- a/libweston-desktop/surface.c
+++ b/libweston-desktop/surface.c
@@ -64,6 +64,7 @@  struct weston_desktop_surface {
 		char *title;
 		char *app_id;
 		pid_t pid;
+		struct wl_signal title_signal;
 	};
 	struct {
 		struct weston_desktop_surface *parent;
@@ -287,6 +288,8 @@  weston_desktop_surface_create(struct weston_desktop *desktop,
 	wl_list_init(&surface->view_list);
 	wl_list_init(&surface->grab_link);
 
+	wl_signal_init(&surface->title_signal);
+
 	return surface;
 }
 
@@ -511,6 +514,13 @@  weston_desktop_surface_close(struct weston_desktop_surface *surface)
 					       surface->implementation_data);
 }
 
+WL_EXPORT void
+weston_desktop_surface_add_title_listener(struct weston_desktop_surface *surface,
+					  struct wl_listener *listener)
+{
+	wl_signal_add(&surface->title_signal, listener);
+}
+
 struct weston_desktop_surface *
 weston_desktop_surface_from_client_link(struct wl_list *link)
 {
@@ -687,6 +697,7 @@  weston_desktop_surface_set_title(struct weston_desktop_surface *surface,
 
 	free(surface->title);
 	surface->title = tmp;
+	wl_signal_emit(&surface->title_signal, surface);
 }
 
 void
@@ -701,6 +712,7 @@  weston_desktop_surface_set_app_id(struct weston_desktop_surface *surface,
 
 	free(surface->app_id);
 	surface->app_id = tmp;
+	wl_signal_emit(&surface->title_signal, surface);
 }
 
 void

Comments

Ping

On Tue, Sep 5, 2017 at 8:05 AM, Matt Hoosier <matt.hoosier@gmail.com> wrote:
> As discussed on
> https://lists.freedesktop.org/archives/wayland-devel/2017-August/034720.html,
> it's useful for the shell implementation to know when these change,
> for example to relay the information on to taskbars or similar.
>
> To avoid ABI changes or the need to make the weston_desktop_surface
> definition public, new functions are introduced for attaching
> listeners to these signals.
>
> Signed-off-by: Matt Hoosier <matt.hoosier@gmail.com>
> ---
>  libweston-desktop/libweston-desktop.h |  3 +++
>  libweston-desktop/surface.c           | 12 ++++++++++++
>  2 files changed, 15 insertions(+)
>
> diff --git a/libweston-desktop/libweston-desktop.h b/libweston-desktop/libweston-desktop.h
> index 03b04c7b..c43568ac 100644
> --- a/libweston-desktop/libweston-desktop.h
> +++ b/libweston-desktop/libweston-desktop.h
> @@ -164,6 +164,9 @@ weston_desktop_surface_set_size(struct weston_desktop_surface *surface,
>                                 int32_t width, int32_t height);
>  void
>  weston_desktop_surface_close(struct weston_desktop_surface *surface);
> +void
> +weston_desktop_surface_add_title_listener(struct weston_desktop_surface *surface,
> +                                         struct wl_listener *listener);
>
>  void *
>  weston_desktop_surface_get_user_data(struct weston_desktop_surface *surface);
> diff --git a/libweston-desktop/surface.c b/libweston-desktop/surface.c
> index d3be9364..d00ba5d6 100644
> --- a/libweston-desktop/surface.c
> +++ b/libweston-desktop/surface.c
> @@ -64,6 +64,7 @@ struct weston_desktop_surface {
>                 char *title;
>                 char *app_id;
>                 pid_t pid;
> +               struct wl_signal title_signal;
>         };
>         struct {
>                 struct weston_desktop_surface *parent;
> @@ -287,6 +288,8 @@ weston_desktop_surface_create(struct weston_desktop *desktop,
>         wl_list_init(&surface->view_list);
>         wl_list_init(&surface->grab_link);
>
> +       wl_signal_init(&surface->title_signal);
> +
>         return surface;
>  }
>
> @@ -511,6 +514,13 @@ weston_desktop_surface_close(struct weston_desktop_surface *surface)
>                                                surface->implementation_data);
>  }
>
> +WL_EXPORT void
> +weston_desktop_surface_add_title_listener(struct weston_desktop_surface *surface,
> +                                         struct wl_listener *listener)
> +{
> +       wl_signal_add(&surface->title_signal, listener);
> +}
> +
>  struct weston_desktop_surface *
>  weston_desktop_surface_from_client_link(struct wl_list *link)
>  {
> @@ -687,6 +697,7 @@ weston_desktop_surface_set_title(struct weston_desktop_surface *surface,
>
>         free(surface->title);
>         surface->title = tmp;
> +       wl_signal_emit(&surface->title_signal, surface);
>  }
>
>  void
> @@ -701,6 +712,7 @@ weston_desktop_surface_set_app_id(struct weston_desktop_surface *surface,
>
>         free(surface->app_id);
>         surface->app_id = tmp;
> +       wl_signal_emit(&surface->title_signal, surface);
>  }
>
>  void
> --
> 2.13.3
>