| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -67,6 +67,9 @@ void launcher_ctx_destroy(struct launcher_ctx *ctx) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						}
 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						wl_list_remove(&ctx->node_destroy.link);
 | 
					 | 
					 | 
					 | 
						wl_list_remove(&ctx->node_destroy.link);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						wl_list_remove(&ctx->token_destroy.link);
 | 
					 | 
					 | 
					 | 
						wl_list_remove(&ctx->token_destroy.link);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						if (ctx->seat) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							wl_list_remove(&ctx->seat_destroy.link);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						wl_list_remove(&ctx->link);
 | 
					 | 
					 | 
					 | 
						wl_list_remove(&ctx->link);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						wlr_xdg_activation_token_v1_destroy(ctx->token);
 | 
					 | 
					 | 
					 | 
						wlr_xdg_activation_token_v1_destroy(ctx->token);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						free(ctx->fallback_name);
 | 
					 | 
					 | 
					 | 
						free(ctx->fallback_name);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -227,6 +230,12 @@ struct launcher_ctx *launcher_ctx_create(struct wlr_xdg_activation_token_v1 *tok
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						return ctx;
 | 
					 | 
					 | 
					 | 
						return ctx;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					static void launch_ctx_handle_seat_destroy(struct wl_listener *listener, void *data) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						struct launcher_ctx *ctx = wl_container_of(listener, ctx, seat_destroy);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						ctx->seat = NULL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						wl_list_remove(&ctx->seat_destroy.link);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					// Creates a context with a new token for the internal launcher
 | 
					 | 
					 | 
					 | 
					// Creates a context with a new token for the internal launcher
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					struct launcher_ctx *launcher_ctx_create_internal(void) {
 | 
					 | 
					 | 
					 | 
					struct launcher_ctx *launcher_ctx_create_internal(void) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						struct sway_seat *seat = input_manager_current_seat();
 | 
					 | 
					 | 
					 | 
						struct sway_seat *seat = input_manager_current_seat();
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -238,13 +247,15 @@ struct launcher_ctx *launcher_ctx_create_internal(void) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						struct wlr_xdg_activation_token_v1 *token =
 | 
					 | 
					 | 
					 | 
						struct wlr_xdg_activation_token_v1 *token =
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							wlr_xdg_activation_token_v1_create(server.xdg_activation_v1);
 | 
					 | 
					 | 
					 | 
							wlr_xdg_activation_token_v1_create(server.xdg_activation_v1);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						token->seat = seat->wlr_seat;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						struct launcher_ctx *ctx = launcher_ctx_create(token, &ws->node);
 | 
					 | 
					 | 
					 | 
						struct launcher_ctx *ctx = launcher_ctx_create(token, &ws->node);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (!ctx) {
 | 
					 | 
					 | 
					 | 
						if (!ctx) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							wlr_xdg_activation_token_v1_destroy(token);
 | 
					 | 
					 | 
					 | 
							wlr_xdg_activation_token_v1_destroy(token);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							return NULL;
 | 
					 | 
					 | 
					 | 
							return NULL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						}
 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						ctx->seat = seat;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						ctx->seat_destroy.notify = launch_ctx_handle_seat_destroy;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						wl_signal_add(&seat->wlr_seat->events.destroy, &ctx->seat_destroy);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						return ctx;
 | 
					 | 
					 | 
					 | 
						return ctx;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |