mirror of
				https://codeberg.org/dwl/dwl.git
				synced 2025-11-03 09:01:45 -05:00 
			
		
		
		
	Revert "Revert "various improvements to layer surface""
This reverts commit c017916d35.
			
			
This commit is contained in:
		
							parent
							
								
									c017916d35
								
							
						
					
					
						commit
						40b1c0b849
					
				
					 1 changed files with 15 additions and 23 deletions
				
			
		
							
								
								
									
										38
									
								
								dwl.c
									
										
									
									
									
								
							
							
						
						
									
										38
									
								
								dwl.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -783,25 +783,23 @@ commitlayersurfacenotify(struct wl_listener *listener, void *data)
 | 
			
		|||
{
 | 
			
		||||
	LayerSurface *layersurface = wl_container_of(listener, layersurface, surface_commit);
 | 
			
		||||
	struct wlr_layer_surface_v1 *wlr_layer_surface = layersurface->layer_surface;
 | 
			
		||||
	struct wlr_output *wlr_output = wlr_layer_surface->output;
 | 
			
		||||
 | 
			
		||||
	if (!wlr_output || !(layersurface->mon = wlr_output->data))
 | 
			
		||||
	if (!layersurface->mon)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	wlr_scene_node_reparent(layersurface->scene,
 | 
			
		||||
			layers[wlr_layer_surface->current.layer]);
 | 
			
		||||
	if (layers[wlr_layer_surface->current.layer] != layersurface->scene) {
 | 
			
		||||
		wlr_scene_node_reparent(layersurface->scene,
 | 
			
		||||
				layers[wlr_layer_surface->current.layer]);
 | 
			
		||||
		wl_list_remove(&layersurface->link);
 | 
			
		||||
		wl_list_insert(&layersurface->mon->layers[wlr_layer_surface->current.layer],
 | 
			
		||||
				&layersurface->link);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (wlr_layer_surface->current.committed == 0
 | 
			
		||||
			&& layersurface->mapped == wlr_layer_surface->mapped)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	layersurface->mapped = wlr_layer_surface->mapped;
 | 
			
		||||
 | 
			
		||||
	if (layers[wlr_layer_surface->current.layer] != layersurface->scene) {
 | 
			
		||||
		wl_list_remove(&layersurface->link);
 | 
			
		||||
		wl_list_insert(&layersurface->mon->layers[wlr_layer_surface->current.layer],
 | 
			
		||||
			&layersurface->link);
 | 
			
		||||
	}
 | 
			
		||||
	arrangelayers(layersurface->mon);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -868,14 +866,13 @@ createlayersurface(struct wl_listener *listener, void *data)
 | 
			
		|||
	LayerSurface *layersurface;
 | 
			
		||||
	struct wlr_layer_surface_v1_state old_state;
 | 
			
		||||
 | 
			
		||||
	if (!wlr_layer_surface->output) {
 | 
			
		||||
	if (!wlr_layer_surface->output)
 | 
			
		||||
		wlr_layer_surface->output = selmon->wlr_output;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	layersurface = ecalloc(1, sizeof(LayerSurface));
 | 
			
		||||
	layersurface->type = LayerShell;
 | 
			
		||||
	LISTEN(&wlr_layer_surface->surface->events.commit,
 | 
			
		||||
		&layersurface->surface_commit, commitlayersurfacenotify);
 | 
			
		||||
			&layersurface->surface_commit, commitlayersurfacenotify);
 | 
			
		||||
	LISTEN(&wlr_layer_surface->events.destroy, &layersurface->destroy,
 | 
			
		||||
			destroylayersurfacenotify);
 | 
			
		||||
	LISTEN(&wlr_layer_surface->events.map, &layersurface->map,
 | 
			
		||||
| 
						 | 
				
			
			@ -884,8 +881,8 @@ createlayersurface(struct wl_listener *listener, void *data)
 | 
			
		|||
			unmaplayersurfacenotify);
 | 
			
		||||
 | 
			
		||||
	layersurface->layer_surface = wlr_layer_surface;
 | 
			
		||||
	wlr_layer_surface->data = layersurface;
 | 
			
		||||
	layersurface->mon = wlr_layer_surface->output->data;
 | 
			
		||||
	wlr_layer_surface->data = layersurface;
 | 
			
		||||
 | 
			
		||||
	layersurface->scene = wlr_layer_surface->surface->data =
 | 
			
		||||
			wlr_scene_subsurface_tree_create(layers[wlr_layer_surface->pending.layer],
 | 
			
		||||
| 
						 | 
				
			
			@ -1076,11 +1073,8 @@ destroylayersurfacenotify(struct wl_listener *listener, void *data)
 | 
			
		|||
	wl_list_remove(&layersurface->unmap.link);
 | 
			
		||||
	wl_list_remove(&layersurface->surface_commit.link);
 | 
			
		||||
	wlr_scene_node_destroy(layersurface->scene);
 | 
			
		||||
	if (layersurface->layer_surface->output) {
 | 
			
		||||
		if ((layersurface->mon = layersurface->layer_surface->output->data))
 | 
			
		||||
			arrangelayers(layersurface->mon);
 | 
			
		||||
		layersurface->layer_surface->output = NULL;
 | 
			
		||||
	}
 | 
			
		||||
	if (layersurface->mon)
 | 
			
		||||
		arrangelayers(layersurface->mon);
 | 
			
		||||
	free(layersurface);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1380,10 +1374,8 @@ killclient(const Arg *arg)
 | 
			
		|||
void
 | 
			
		||||
maplayersurfacenotify(struct wl_listener *listener, void *data)
 | 
			
		||||
{
 | 
			
		||||
	LayerSurface *layersurface = wl_container_of(listener, layersurface, map);
 | 
			
		||||
	layersurface->mon = layersurface->layer_surface->output->data;
 | 
			
		||||
	wlr_surface_send_enter(layersurface->layer_surface->surface,
 | 
			
		||||
		layersurface->mon->wlr_output);
 | 
			
		||||
	LayerSurface *l = wl_container_of(listener, l, map);
 | 
			
		||||
	wlr_surface_send_enter(l->layer_surface->surface, l->mon->wlr_output);
 | 
			
		||||
	motionnotify(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue