Commit 555c548c authored by Matt Hoosier's avatar Matt Hoosier Committed by Quentin Glidic

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

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's avatarMatt Hoosier <matt.hoosier@gmail.com>
Reviewed-by: Quentin Glidic's avatarQuentin Glidic <sardemff7+git@sardemff7.net>
parent 037f056e
......@@ -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_metadata_listener(struct weston_desktop_surface *surface,
struct wl_listener *listener);
void *
weston_desktop_surface_get_user_data(struct weston_desktop_surface *surface);
......
......@@ -64,6 +64,7 @@ struct weston_desktop_surface {
char *title;
char *app_id;
pid_t pid;
struct wl_signal metadata_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->metadata_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_metadata_listener(struct weston_desktop_surface *surface,
struct wl_listener *listener)
{
wl_signal_add(&surface->metadata_signal, listener);
}
struct weston_desktop_surface *
weston_desktop_surface_from_client_link(struct wl_list *link)
{
......@@ -679,28 +689,32 @@ void
weston_desktop_surface_set_title(struct weston_desktop_surface *surface,
const char *title)
{
char *tmp;
char *tmp, *old;
tmp = strdup(title);
if (tmp == NULL)
return;
free(surface->title);
old = surface->title;
surface->title = tmp;
wl_signal_emit(&surface->metadata_signal, surface);
free(old);
}
void
weston_desktop_surface_set_app_id(struct weston_desktop_surface *surface,
const char *app_id)
{
char *tmp;
char *tmp, *old;
tmp = strdup(app_id);
if (tmp == NULL)
return;
free(surface->app_id);
old = surface->app_id;
surface->app_id = tmp;
wl_signal_emit(&surface->metadata_signal, surface);
free(old);
}
void
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment