mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
view: remove server->last_raised_view
We were skipping in view_move_to_front() if the raised view is already
cached as server->last_raised_view. But this was prone to bugs that
windows cannot be raised even though they are actually not placed at the
top in the scene.
This happened when a window is mapped but view_move_to_front() is not
called in view_impl_map() for some reason. Example cases were:
- a window is minimized before being mapped (#2627)
- a window is mapped while window switcher is active (#2629)
Also, this problem was the root cause of #1640 and #2582, though they are
already fixed.
Therefore, this commit removes server->last_raised_view. In order to
eliminate unnecessary communications between labwc and xwayland (ref:
db591d1), I'll introduce another caching mechanism in the next commit.
This commit is contained in:
parent
2404297f2d
commit
de49054d75
3 changed files with 0 additions and 26 deletions
|
|
@ -292,11 +292,6 @@ struct server {
|
|||
* Note that active_view is synced with foreign-toplevel clients.
|
||||
*/
|
||||
struct view *active_view;
|
||||
/*
|
||||
* Most recently raised view. Used to avoid unnecessarily
|
||||
* raising the same view over and over.
|
||||
*/
|
||||
struct view *last_raised_view;
|
||||
|
||||
struct ssd_hover_state *ssd_hover_state;
|
||||
|
||||
|
|
|
|||
|
|
@ -66,9 +66,6 @@ view_impl_unmap(struct view *view)
|
|||
if (view == server->active_view) {
|
||||
desktop_focus_topmost_view(server);
|
||||
}
|
||||
if (view == server->last_raised_view) {
|
||||
server->last_raised_view = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
|
|
|
|||
18
src/view.c
18
src/view.c
|
|
@ -2251,7 +2251,6 @@ move_to_front(struct view *view)
|
|||
if (view->impl->move_to_front) {
|
||||
view->impl->move_to_front(view);
|
||||
}
|
||||
view->server->last_raised_view = view;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -2260,9 +2259,6 @@ move_to_back(struct view *view)
|
|||
if (view->impl->move_to_back) {
|
||||
view->impl->move_to_back(view);
|
||||
}
|
||||
if (view == view->server->last_raised_view) {
|
||||
view->server->last_raised_view = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -2275,16 +2271,6 @@ void
|
|||
view_move_to_front(struct view *view)
|
||||
{
|
||||
assert(view);
|
||||
/*
|
||||
* This function is called often, generally on every mouse
|
||||
* button press (more often for focus-follows-mouse). Avoid
|
||||
* unnecessarily raising the same view over and over, or
|
||||
* attempting to raise a root view above its own sub-view.
|
||||
*/
|
||||
struct view *last = view->server->last_raised_view;
|
||||
if (view == last || (last && view == view_get_root(last))) {
|
||||
return;
|
||||
}
|
||||
|
||||
struct view *root = view_get_root(view);
|
||||
assert(root);
|
||||
|
|
@ -2539,10 +2525,6 @@ view_destroy(struct view *view)
|
|||
server->session_lock_manager->last_active_view = NULL;
|
||||
}
|
||||
|
||||
if (server->last_raised_view == view) {
|
||||
server->last_raised_view = NULL;
|
||||
}
|
||||
|
||||
if (server->seat.pressed.view == view) {
|
||||
seat_reset_pressed(&server->seat);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue