surface: fix place_below handling
If a subsurface is being placed below a subsurface right above it, this should be a noop. However, `node` pointed to the subsurface that was moved, which resulted in `subsurface->parent_pending_link` being inserted into itself, breaking parent's pending subsurface list. This commit separates finding the requested node and getting it's `prev` field, fixing the issue.
This commit is contained in:
		
							parent
							
								
									cdd9a60f72
								
							
						
					
					
						commit
						109405729b
					
				|  | @ -961,7 +961,7 @@ static void subsurface_handle_place_below(struct wl_client *client, | |||
| 
 | ||||
| 	struct wl_list *node; | ||||
| 	if (sibling_surface == subsurface->parent) { | ||||
| 		node = subsurface->parent->subsurfaces_pending_below.prev; | ||||
| 		node = &subsurface->parent->subsurfaces_pending_below; | ||||
| 	} else { | ||||
| 		struct wlr_subsurface *sibling = | ||||
| 			subsurface_find_sibling(subsurface, sibling_surface); | ||||
|  | @ -972,11 +972,11 @@ static void subsurface_handle_place_below(struct wl_client *client, | |||
| 				"place_below", wl_resource_get_id(sibling_resource)); | ||||
| 			return; | ||||
| 		} | ||||
| 		node = sibling->parent_pending_link.prev; | ||||
| 		node = &sibling->parent_pending_link; | ||||
| 	} | ||||
| 
 | ||||
| 	wl_list_remove(&subsurface->parent_pending_link); | ||||
| 	wl_list_insert(node, &subsurface->parent_pending_link); | ||||
| 	wl_list_insert(node->prev, &subsurface->parent_pending_link); | ||||
| 
 | ||||
| 	subsurface->reordered = true; | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue