mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-10-29 05:40:12 -04:00 
			
		
		
		
	rootston: add per-seat views
This commit is contained in:
		
							parent
							
								
									10f3be7384
								
							
						
					
					
						commit
						bb6d34e7a5
					
				
					 12 changed files with 161 additions and 123 deletions
				
			
		|  | @ -77,7 +77,6 @@ static void handle_surface_commit(struct wl_listener *listener, void *data) { | |||
| static void handle_destroy(struct wl_listener *listener, void *data) { | ||||
| 	struct roots_wl_shell_surface *roots_surface = | ||||
| 		wl_container_of(listener, roots_surface, destroy); | ||||
| 	view_teardown(roots_surface->view); | ||||
| 	wl_list_remove(&roots_surface->destroy.link); | ||||
| 	wl_list_remove(&roots_surface->request_move.link); | ||||
| 	wl_list_remove(&roots_surface->request_resize.link); | ||||
|  | @ -88,14 +87,6 @@ static void handle_destroy(struct wl_listener *listener, void *data) { | |||
| 	free(roots_surface); | ||||
| } | ||||
| 
 | ||||
| static int shell_surface_compare_equals(const void *item, const void *cmp_to) { | ||||
| 	const struct roots_view *view = item; | ||||
| 	if (view->type == ROOTS_WL_SHELL_VIEW && view->wl_shell_surface == cmp_to) { | ||||
| 		return 0; | ||||
| 	} | ||||
| 	return -1; | ||||
| } | ||||
| 
 | ||||
| void handle_wl_shell_surface(struct wl_listener *listener, void *data) { | ||||
| 	struct roots_desktop *desktop = | ||||
| 		wl_container_of(listener, desktop, wl_shell_surface); | ||||
|  | @ -138,17 +129,23 @@ void handle_wl_shell_surface(struct wl_listener *listener, void *data) { | |||
| 	view->wlr_surface = surface->surface; | ||||
| 	view->resize = resize; | ||||
| 	view->close = close; | ||||
| 	view->desktop = desktop; | ||||
| 	roots_surface->view = view; | ||||
| 	wlr_list_add(desktop->views, view); | ||||
| 	view_init(view, desktop); | ||||
| 
 | ||||
| 	view_setup(view); | ||||
| 
 | ||||
| 	if (surface->state == WLR_WL_SHELL_SURFACE_STATE_TRANSIENT) { | ||||
| 		// we need to map it relative to the parent
 | ||||
| 		int i = wlr_list_seq_find(desktop->views, shell_surface_compare_equals, | ||||
| 			surface->parent); | ||||
| 		if (i != -1) { | ||||
| 			struct roots_view *parent = desktop->views->items[i]; | ||||
| 		// We need to map it relative to the parent
 | ||||
| 		bool found = false; | ||||
| 		struct roots_view *parent; | ||||
| 		wl_list_for_each(parent, &desktop->views, link) { | ||||
| 			if (parent->type == ROOTS_WL_SHELL_VIEW && | ||||
| 					parent->wl_shell_surface == surface->parent) { | ||||
| 				found = true; | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		if (found) { | ||||
| 			view_move(view, | ||||
| 				parent->x + surface->transient_state->x, | ||||
| 				parent->y + surface->transient_state->y); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 emersion
						emersion