{
if (view->ssd.tree) {
/* SSD was hidden. Just enable it */
- wlr_log(WLR_ERROR, "Unhiding SSD");
wlr_scene_node_set_enabled(&view->ssd.tree->node, true);
return;
}
- wlr_log(WLR_ERROR, "Creating SSD");
view->ssd.tree = wlr_scene_tree_create(&view->scene_tree->node);
wlr_scene_node_lower_to_bottom(&view->ssd.tree->node);
ssd_extents_create(view);
return;
}
- wlr_log(WLR_ERROR, "Destroying SSD");
-
/* Maybe reset focused view */
if (view->server->ssd_focused_view == view) {
view->server->ssd_focused_view = NULL;
static void
xdg_toplevel_view_map(struct view *view)
{
+ if (view->mapped) {
+ return;
+ }
view->mapped = true;
view->surface = view->xdg_surface->surface;
+ wlr_scene_node_set_enabled(&view->scene_tree->node, true);
if (!view->been_mapped) {
struct wlr_xdg_toplevel_requested *requested =
&view->xdg_surface->toplevel->requested;
{
if (view->mapped) {
view->mapped = false;
- damage_all_outputs(view->server);
- wlr_scene_node_destroy(view->scene_node);
- ssd_hide(view);
+ wlr_scene_node_set_enabled(&view->scene_tree->node, false);
wl_list_remove(&view->commit.link);
desktop_focus_topmost_mapped_view(view->server);
}
view->xdg_surface = xdg_surface;
view->scene_tree = wlr_scene_tree_create(&view->server->view_tree->node);
+ wlr_scene_node_set_enabled(&view->scene_tree->node, false);
view->scene_node = wlr_scene_xdg_surface_create(
&view->scene_tree->node, view->xdg_surface);
if (!view->scene_node) {
- wlr_scene_node_destroy(&view->scene_tree->node);
- view->scene_tree = NULL;
+ /* TODO: might need further clean up */
wl_resource_post_no_memory(view->surface->resource);
- /* TODO: should we free(view) here? */
return;
}
view->scene_tree->node.data = view;
static void
map(struct view *view)
{
+ if (view->mapped) {
+ return;
+ }
view->mapped = true;
+ wlr_scene_node_set_enabled(&view->scene_tree->node, true);
if (!view->fullscreen && view->xwayland_surface->fullscreen) {
view_set_fullscreen(view, true, NULL);
}
view->w = view->xwayland_surface->width;
view->h = view->xwayland_surface->height;
}
- view->surface = view->xwayland_surface->surface;
- view->scene_node = wlr_scene_subsurface_tree_create(
- &view->scene_tree->node, view->surface);
- if (!view->scene_node) {
- wlr_scene_node_destroy(&view->scene_tree->node);
- view->scene_tree = NULL;
- wl_resource_post_no_memory(view->surface->resource);
- /* TODO: should we free(view) here? */
- return;
+ if (view->surface != view->xwayland_surface->surface) {
+ view->surface = view->xwayland_surface->surface;
+ view->scene_node = wlr_scene_subsurface_tree_create(
+ &view->scene_tree->node, view->surface);
+ if (!view->scene_node) {
+ /* TODO: might need further clean up */
+ wl_resource_post_no_memory(view->surface->resource);
+ return;
+ }
}
- view->scene_tree->node.data = view;
view->ssd.enabled = want_deco(view);
{
if (view->mapped) {
view->mapped = false;
- damage_all_outputs(view->server);
+ wlr_scene_node_set_enabled(&view->scene_tree->node, false);
wl_list_remove(&view->commit.link);
- ssd_hide(view);
desktop_focus_topmost_mapped_view(view->server);
}
}
view->xwayland_surface = xsurface;
view->scene_tree = wlr_scene_tree_create(&view->server->view_tree->node);
+ view->scene_tree->node.data = view;
xsurface->data = view;
view->map.notify = handle_map;