mirror of
https://github.com/labwc/labwc.git
synced 2026-03-31 07:11:19 -04:00
view: only focus topmost view if unmapped view was focused
The unmap() handlers should only call desktop_focus_topmost_view() if the unmapped view was the focused view. Unmapping a view that was not focused should not change the focus. I expect this rarely had any effect in practice; it would only matter in a focus-follows-mouse config where some view other than the one on top was focused. But it still seems better to fix. Rather than repeating the logic in two places, create a small view_impl_unmap() helper. Perhaps more common "unmap" logic could be moved there in future.
This commit is contained in:
parent
8920e546db
commit
b053c9e375
4 changed files with 12 additions and 2 deletions
|
|
@ -19,6 +19,7 @@ void view_impl_move_to_front(struct view *view);
|
||||||
void view_impl_move_to_back(struct view *view);
|
void view_impl_move_to_back(struct view *view);
|
||||||
void view_impl_move_sub_views(struct view *parent, enum z_direction z_direction);
|
void view_impl_move_sub_views(struct view *parent, enum z_direction z_direction);
|
||||||
void view_impl_map(struct view *view);
|
void view_impl_map(struct view *view);
|
||||||
|
void view_impl_unmap(struct view *view);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Updates view geometry at commit based on current position/size,
|
* Updates view geometry at commit based on current position/size,
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,15 @@ view_impl_map(struct view *view)
|
||||||
view_get_string_prop(view, "title"));
|
view_get_string_prop(view, "title"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
view_impl_unmap(struct view *view)
|
||||||
|
{
|
||||||
|
struct seat *seat = &view->server->seat;
|
||||||
|
if (seat->seat->keyboard_state.focused_surface == view->surface) {
|
||||||
|
desktop_focus_topmost_view(view->server);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
resizing_edge(struct view *view, uint32_t edge)
|
resizing_edge(struct view *view, uint32_t edge)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -554,7 +554,7 @@ xdg_toplevel_view_unmap(struct view *view, bool client_request)
|
||||||
view->mapped = false;
|
view->mapped = false;
|
||||||
wlr_scene_node_set_enabled(&view->scene_tree->node, false);
|
wlr_scene_node_set_enabled(&view->scene_tree->node, false);
|
||||||
wl_list_remove(&view->commit.link);
|
wl_list_remove(&view->commit.link);
|
||||||
desktop_focus_topmost_view(view->server);
|
view_impl_unmap(view);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -531,7 +531,7 @@ xwayland_view_unmap(struct view *view, bool client_request)
|
||||||
view->mapped = false;
|
view->mapped = false;
|
||||||
wl_list_remove(&view->commit.link);
|
wl_list_remove(&view->commit.link);
|
||||||
wlr_scene_node_set_enabled(&view->scene_tree->node, false);
|
wlr_scene_node_set_enabled(&view->scene_tree->node, false);
|
||||||
desktop_focus_topmost_view(view->server);
|
view_impl_unmap(view);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the view was explicitly unmapped by the client (rather
|
* If the view was explicitly unmapped by the client (rather
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue