mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05: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
				
			
		
							
								
								
									
										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