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);
 | 
						LayerSurface *layersurface = wl_container_of(listener, layersurface, surface_commit);
 | 
				
			||||||
	struct wlr_layer_surface_v1 *wlr_layer_surface = layersurface->layer_surface;
 | 
						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;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wlr_scene_node_reparent(layersurface->scene,
 | 
						if (layers[wlr_layer_surface->current.layer] != layersurface->scene) {
 | 
				
			||||||
			layers[wlr_layer_surface->current.layer]);
 | 
							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
 | 
						if (wlr_layer_surface->current.committed == 0
 | 
				
			||||||
			&& layersurface->mapped == wlr_layer_surface->mapped)
 | 
								&& layersurface->mapped == wlr_layer_surface->mapped)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					 | 
				
			||||||
	layersurface->mapped = wlr_layer_surface->mapped;
 | 
						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);
 | 
						arrangelayers(layersurface->mon);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -868,14 +866,13 @@ createlayersurface(struct wl_listener *listener, void *data)
 | 
				
			||||||
	LayerSurface *layersurface;
 | 
						LayerSurface *layersurface;
 | 
				
			||||||
	struct wlr_layer_surface_v1_state old_state;
 | 
						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;
 | 
							wlr_layer_surface->output = selmon->wlr_output;
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	layersurface = ecalloc(1, sizeof(LayerSurface));
 | 
						layersurface = ecalloc(1, sizeof(LayerSurface));
 | 
				
			||||||
	layersurface->type = LayerShell;
 | 
						layersurface->type = LayerShell;
 | 
				
			||||||
	LISTEN(&wlr_layer_surface->surface->events.commit,
 | 
						LISTEN(&wlr_layer_surface->surface->events.commit,
 | 
				
			||||||
		&layersurface->surface_commit, commitlayersurfacenotify);
 | 
								&layersurface->surface_commit, commitlayersurfacenotify);
 | 
				
			||||||
	LISTEN(&wlr_layer_surface->events.destroy, &layersurface->destroy,
 | 
						LISTEN(&wlr_layer_surface->events.destroy, &layersurface->destroy,
 | 
				
			||||||
			destroylayersurfacenotify);
 | 
								destroylayersurfacenotify);
 | 
				
			||||||
	LISTEN(&wlr_layer_surface->events.map, &layersurface->map,
 | 
						LISTEN(&wlr_layer_surface->events.map, &layersurface->map,
 | 
				
			||||||
| 
						 | 
					@ -884,8 +881,8 @@ createlayersurface(struct wl_listener *listener, void *data)
 | 
				
			||||||
			unmaplayersurfacenotify);
 | 
								unmaplayersurfacenotify);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	layersurface->layer_surface = wlr_layer_surface;
 | 
						layersurface->layer_surface = wlr_layer_surface;
 | 
				
			||||||
	wlr_layer_surface->data = layersurface;
 | 
					 | 
				
			||||||
	layersurface->mon = wlr_layer_surface->output->data;
 | 
						layersurface->mon = wlr_layer_surface->output->data;
 | 
				
			||||||
 | 
						wlr_layer_surface->data = layersurface;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	layersurface->scene = wlr_layer_surface->surface->data =
 | 
						layersurface->scene = wlr_layer_surface->surface->data =
 | 
				
			||||||
			wlr_scene_subsurface_tree_create(layers[wlr_layer_surface->pending.layer],
 | 
								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->unmap.link);
 | 
				
			||||||
	wl_list_remove(&layersurface->surface_commit.link);
 | 
						wl_list_remove(&layersurface->surface_commit.link);
 | 
				
			||||||
	wlr_scene_node_destroy(layersurface->scene);
 | 
						wlr_scene_node_destroy(layersurface->scene);
 | 
				
			||||||
	if (layersurface->layer_surface->output) {
 | 
						if (layersurface->mon)
 | 
				
			||||||
		if ((layersurface->mon = layersurface->layer_surface->output->data))
 | 
							arrangelayers(layersurface->mon);
 | 
				
			||||||
			arrangelayers(layersurface->mon);
 | 
					 | 
				
			||||||
		layersurface->layer_surface->output = NULL;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	free(layersurface);
 | 
						free(layersurface);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1380,10 +1374,8 @@ killclient(const Arg *arg)
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
maplayersurfacenotify(struct wl_listener *listener, void *data)
 | 
					maplayersurfacenotify(struct wl_listener *listener, void *data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	LayerSurface *layersurface = wl_container_of(listener, layersurface, map);
 | 
						LayerSurface *l = wl_container_of(listener, l, map);
 | 
				
			||||||
	layersurface->mon = layersurface->layer_surface->output->data;
 | 
						wlr_surface_send_enter(l->layer_surface->surface, l->mon->wlr_output);
 | 
				
			||||||
	wlr_surface_send_enter(layersurface->layer_surface->surface,
 | 
					 | 
				
			||||||
		layersurface->mon->wlr_output);
 | 
					 | 
				
			||||||
	motionnotify(0);
 | 
						motionnotify(0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue