rootston: xdg-shell*: Fix get_size() for newly-mapped views
The user-visible issue is that newly-mapped xdg-shell* windows would
sometimes start with their top-left-corner, rather than their center, in
the center of the screen. This is because get_size() would
conservatively fall back on (width, height) == (0, 0) if both
set_window_geometry() had not been called, and it found
view->wlr_surface to be NULL.
But, view->wlr_surface is only set to non-NULL in view_map(). We call
get_size() before this. Fortunately, the wlr_surface in question is
accessible via view->xdg_shell{,_v6}->surface, so always fall back on
that. We can assert its presence instead of further falling back on
(width, height) == (0, 0).
Signed-off-by: Genki Sky <sky@genki.is>
			
			
This commit is contained in:
		
							parent
							
								
									d1cf9acbd5
								
							
						
					
					
						commit
						32013abae6
					
				| 
						 | 
					@ -135,11 +135,10 @@ static void get_size(const struct roots_view *view, struct wlr_box *box) {
 | 
				
			||||||
	if (surface->geometry.width > 0 && surface->geometry.height > 0) {
 | 
						if (surface->geometry.width > 0 && surface->geometry.height > 0) {
 | 
				
			||||||
		box->width = surface->geometry.width;
 | 
							box->width = surface->geometry.width;
 | 
				
			||||||
		box->height = surface->geometry.height;
 | 
							box->height = surface->geometry.height;
 | 
				
			||||||
	} else if (view->wlr_surface != NULL) {
 | 
					 | 
				
			||||||
		box->width = view->wlr_surface->current->width;
 | 
					 | 
				
			||||||
		box->height = view->wlr_surface->current->height;
 | 
					 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		box->width = box->height = 0;
 | 
							assert(surface->surface);
 | 
				
			||||||
 | 
							box->width = surface->surface->current->width;
 | 
				
			||||||
 | 
							box->height = surface->surface->current->height;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -136,11 +136,10 @@ static void get_size(const struct roots_view *view, struct wlr_box *box) {
 | 
				
			||||||
	if (surface->geometry.width > 0 && surface->geometry.height > 0) {
 | 
						if (surface->geometry.width > 0 && surface->geometry.height > 0) {
 | 
				
			||||||
		box->width = surface->geometry.width;
 | 
							box->width = surface->geometry.width;
 | 
				
			||||||
		box->height = surface->geometry.height;
 | 
							box->height = surface->geometry.height;
 | 
				
			||||||
	} else if (view->wlr_surface != NULL) {
 | 
					 | 
				
			||||||
		box->width = view->wlr_surface->current->width;
 | 
					 | 
				
			||||||
		box->height = view->wlr_surface->current->height;
 | 
					 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		box->width = box->height = 0;
 | 
							assert(surface->surface);
 | 
				
			||||||
 | 
							box->width = surface->surface->current->width;
 | 
				
			||||||
 | 
							box->height = surface->surface->current->height;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue