view: call wlr_foreign_toplevel_handle_v1_set_app_id() on map

Fix issue #74

Add view-impl.c with view_impl_map() containing common code for xdg-shell
and xwayland-shell.
This commit is contained in:
Johan Malm 2021-10-16 21:26:57 +01:00
parent 4d44659c08
commit e140682528
5 changed files with 31 additions and 6 deletions

View file

@ -338,6 +338,8 @@ void view_for_each_popup_surface(struct view *view,
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_impl_map(struct view *view);
void foreign_toplevel_handle_create(struct view *view); void foreign_toplevel_handle_create(struct view *view);
/* /*

View file

@ -17,6 +17,7 @@ labwc_sources = files(
'theme.c', 'theme.c',
'view.c', 'view.c',
'view-child.c', 'view-child.c',
'view-impl.c',
'xdg.c', 'xdg.c',
'xdg-deco.c', 'xdg-deco.c',
'xdg-popup.c', 'xdg-popup.c',

22
src/view-impl.c Normal file
View file

@ -0,0 +1,22 @@
// SPDX-License-Identifier: GPL-2.0-only
/* view-impl.c: common code for shell view->impl functions */
#include <stdio.h>
#include <strings.h>
#include "labwc.h"
void
view_impl_map(struct view *view)
{
desktop_focus_and_activate_view(&view->server->seat, 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);
damage_all_outputs(view->server);
}

View file

@ -343,9 +343,7 @@ xdg_toplevel_view_map(struct view *view)
wl_signal_add(&view->surface->events.new_subsurface, wl_signal_add(&view->surface->events.new_subsurface,
&view->new_subsurface); &view->new_subsurface);
desktop_focus_and_activate_view(&view->server->seat, view); view_impl_map(view);
desktop_raise_view(view);
damage_all_outputs(view->server);
} }
static void static void

View file

@ -146,6 +146,10 @@ get_string_prop(struct view *view, const char *prop)
if (!strcmp(prop, "class")) { if (!strcmp(prop, "class")) {
return view->xwayland_surface->class; return view->xwayland_surface->class;
} }
/* We give 'class' for wlr_foreign_toplevel_handle_v1_set_app_id() */
if (!strcmp(prop, "app_id")) {
return view->xwayland_surface->class;
}
return ""; return "";
} }
@ -208,9 +212,7 @@ map(struct view *view)
&view->commit); &view->commit);
view->commit.notify = handle_commit; view->commit.notify = handle_commit;
desktop_focus_and_activate_view(&view->server->seat, view); view_impl_map(view);
desktop_raise_view(view);
damage_all_outputs(view->server);
} }
static void static void