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 <matt.hoosier@gmail.com> Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net>
This commit is contained in:
parent
037f056ec3
commit
555c548c7e
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user