mirror of
https://github.com/labwc/labwc.git
synced 2025-11-04 13:30:07 -05:00
xdg/wayland-shell: handle set_app_id and set_class events
This commit is contained in:
parent
e140682528
commit
e2ae63a7cf
5 changed files with 38 additions and 6 deletions
|
|
@ -259,6 +259,7 @@ struct view {
|
||||||
struct wl_listener request_maximize;
|
struct wl_listener request_maximize;
|
||||||
struct wl_listener request_fullscreen;
|
struct wl_listener request_fullscreen;
|
||||||
struct wl_listener set_title;
|
struct wl_listener set_title;
|
||||||
|
struct wl_listener set_app_id; /* class on xwayland */
|
||||||
struct wl_listener new_popup; /* xdg-shell only */
|
struct wl_listener new_popup; /* xdg-shell only */
|
||||||
struct wl_listener new_subsurface; /* xdg-shell only */
|
struct wl_listener new_subsurface; /* xdg-shell only */
|
||||||
};
|
};
|
||||||
|
|
@ -337,6 +338,7 @@ void view_for_each_popup_surface(struct view *view,
|
||||||
wlr_surface_iterator_func_t iterator, void *data);
|
wlr_surface_iterator_func_t iterator, void *data);
|
||||||
void view_move_to_edge(struct view *view, const char *direction);
|
void view_move_to_edge(struct view *view, const char *direction);
|
||||||
void view_update_title(struct view *view);
|
void view_update_title(struct view *view);
|
||||||
|
void view_update_app_id(struct view *view);
|
||||||
|
|
||||||
void view_impl_map(struct view *view);
|
void view_impl_map(struct view *view);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,8 @@ view_impl_map(struct view *view)
|
||||||
desktop_focus_and_activate_view(&view->server->seat, view);
|
desktop_focus_and_activate_view(&view->server->seat, view);
|
||||||
desktop_raise_view(view);
|
desktop_raise_view(view);
|
||||||
|
|
||||||
const char *app_id = view->impl->get_string_prop(view, "app_id");
|
|
||||||
if (app_id) {
|
|
||||||
wlr_foreign_toplevel_handle_v1_set_app_id(
|
|
||||||
view->toplevel_handle, app_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
view_update_title(view);
|
view_update_title(view);
|
||||||
|
view_update_app_id(view);
|
||||||
|
|
||||||
damage_all_outputs(view->server);
|
damage_all_outputs(view->server);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
11
src/view.c
11
src/view.c
|
|
@ -242,3 +242,14 @@ view_update_title(struct view *view)
|
||||||
ssd_update_title(view);
|
ssd_update_title(view);
|
||||||
wlr_foreign_toplevel_handle_v1_set_title(view->toplevel_handle, title);
|
wlr_foreign_toplevel_handle_v1_set_title(view->toplevel_handle, title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
view_update_app_id(struct view *view)
|
||||||
|
{
|
||||||
|
const char *app_id = view->impl->get_string_prop(view, "app_id");
|
||||||
|
if (!view->toplevel_handle || !app_id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
wlr_foreign_toplevel_handle_v1_set_app_id(
|
||||||
|
view->toplevel_handle, app_id);
|
||||||
|
}
|
||||||
|
|
|
||||||
12
src/xdg.c
12
src/xdg.c
|
|
@ -160,6 +160,14 @@ handle_set_title(struct wl_listener *listener, void *data)
|
||||||
view_update_title(view);
|
view_update_title(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
handle_set_app_id(struct wl_listener *listener, void *data)
|
||||||
|
{
|
||||||
|
struct view *view = wl_container_of(listener, view, set_app_id);
|
||||||
|
assert(view);
|
||||||
|
view_update_app_id(view);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
xdg_toplevel_view_configure(struct view *view, struct wlr_box geo)
|
xdg_toplevel_view_configure(struct view *view, struct wlr_box geo)
|
||||||
{
|
{
|
||||||
|
|
@ -408,8 +416,12 @@ xdg_surface_new(struct wl_listener *listener, void *data)
|
||||||
view->request_fullscreen.notify = handle_request_fullscreen;
|
view->request_fullscreen.notify = handle_request_fullscreen;
|
||||||
wl_signal_add(&toplevel->events.request_fullscreen,
|
wl_signal_add(&toplevel->events.request_fullscreen,
|
||||||
&view->request_fullscreen);
|
&view->request_fullscreen);
|
||||||
|
|
||||||
view->set_title.notify = handle_set_title;
|
view->set_title.notify = handle_set_title;
|
||||||
wl_signal_add(&toplevel->events.set_title, &view->set_title);
|
wl_signal_add(&toplevel->events.set_title, &view->set_title);
|
||||||
|
|
||||||
|
view->set_app_id.notify = handle_set_app_id;
|
||||||
|
wl_signal_add(&toplevel->events.set_app_id, &view->set_app_id);
|
||||||
|
|
||||||
wl_list_insert(&server->views, &view->link);
|
wl_list_insert(&server->views, &view->link);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,14 @@ handle_set_title(struct wl_listener *listener, void *data)
|
||||||
view_update_title(view);
|
view_update_title(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
handle_set_class(struct wl_listener *listener, void *data)
|
||||||
|
{
|
||||||
|
struct view *view = wl_container_of(listener, view, set_app_id);
|
||||||
|
assert(view);
|
||||||
|
view_update_app_id(view);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
configure(struct view *view, struct wlr_box geo)
|
configure(struct view *view, struct wlr_box geo)
|
||||||
{
|
{
|
||||||
|
|
@ -300,8 +308,12 @@ xwayland_surface_new(struct wl_listener *listener, void *data)
|
||||||
view->request_fullscreen.notify = handle_request_fullscreen;
|
view->request_fullscreen.notify = handle_request_fullscreen;
|
||||||
wl_signal_add(&xsurface->events.request_fullscreen,
|
wl_signal_add(&xsurface->events.request_fullscreen,
|
||||||
&view->request_fullscreen);
|
&view->request_fullscreen);
|
||||||
|
|
||||||
view->set_title.notify = handle_set_title;
|
view->set_title.notify = handle_set_title;
|
||||||
wl_signal_add(&xsurface->events.set_title, &view->set_title);
|
wl_signal_add(&xsurface->events.set_title, &view->set_title);
|
||||||
|
|
||||||
|
view->set_app_id.notify = handle_set_class;
|
||||||
|
wl_signal_add(&xsurface->events.set_class, &view->set_app_id);
|
||||||
|
|
||||||
wl_list_insert(&view->server->views, &view->link);
|
wl_list_insert(&view->server->views, &view->link);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue