mirror of
				https://github.com/labwc/labwc.git
				synced 2025-10-29 05:40:24 -04:00 
			
		
		
		
	output: Implement drm_lease_v1
Needed for VR to work properly.
This commit is contained in:
		
							parent
							
								
									b23774e561
								
							
						
					
					
						commit
						57a937bdf2
					
				
					 3 changed files with 43 additions and 0 deletions
				
			
		|  | @ -39,6 +39,7 @@ | |||
| #include <wlr/types/wlr_xcursor_manager.h> | ||||
| #include <wlr/types/wlr_xdg_decoration_v1.h> | ||||
| #include <wlr/types/wlr_xdg_shell.h> | ||||
| #include <wlr/types/wlr_drm_lease_v1.h> | ||||
| #include <wlr/util/log.h> | ||||
| #if HAVE_XWAYLAND | ||||
| #include <wlr/xwayland.h> | ||||
|  | @ -194,6 +195,9 @@ struct server { | |||
| 
 | ||||
| 	struct wlr_foreign_toplevel_manager_v1 *foreign_toplevel_manager; | ||||
| 
 | ||||
| 	struct wlr_drm_lease_v1_manager *drm_lease_manager; | ||||
| 	struct wl_listener drm_lease_request; | ||||
| 
 | ||||
| 	struct wlr_output_power_manager_v1 *output_power_manager_v1; | ||||
| 	struct wl_listener output_power_manager_set_mode; | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										15
									
								
								src/output.c
									
										
									
									
									
								
							
							
						
						
									
										15
									
								
								src/output.c
									
										
									
									
									
								
							|  | @ -10,6 +10,7 @@ | |||
| #include "config.h" | ||||
| #include <assert.h> | ||||
| #include <wlr/types/wlr_buffer.h> | ||||
| #include <wlr/types/wlr_drm_lease_v1.h> | ||||
| #include <wlr/types/wlr_output.h> | ||||
| #include <wlr/types/wlr_xdg_output_v1.h> | ||||
| #include <wlr/types/wlr_scene.h> | ||||
|  | @ -57,6 +58,20 @@ new_output_notify(struct wl_listener *listener, void *data) | |||
| 	struct server *server = wl_container_of(listener, server, new_output); | ||||
| 	struct wlr_output *wlr_output = data; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * If this is a non-desktop output, offer it for leasing. | ||||
| 	 * We may want to do more logic here in future, if we choose | ||||
| 	 * to offer non-desktop outputs. | ||||
| 	 */ | ||||
| 	if (wlr_output->non_desktop) { | ||||
| 		wlr_log(WLR_DEBUG, "Not configuring non-desktop output"); | ||||
| 		if (server->drm_lease_manager) { | ||||
| 			wlr_drm_lease_v1_manager_offer_output(server->drm_lease_manager, | ||||
| 					wlr_output); | ||||
| 		} | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Configures the output created by the backend to use our allocator | ||||
| 	 * and our renderer. Must be done once, before commiting the output | ||||
|  |  | |||
							
								
								
									
										24
									
								
								src/server.c
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								src/server.c
									
										
									
									
									
								
							|  | @ -146,6 +146,19 @@ handle_input_disinhibit(struct wl_listener *listener, void *data) | |||
| 	seat_disinhibit_input(&server->seat); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| handle_drm_lease_request(struct wl_listener *listener, void *data) { | ||||
| 	/* We only offer non-desktop outputs, but in the future we might want to do
 | ||||
| 	 * more logic here. */ | ||||
| 
 | ||||
| 	struct wlr_drm_lease_request_v1 *req = data; | ||||
| 	struct wlr_drm_lease_v1 *lease = wlr_drm_lease_request_v1_grant(req); | ||||
| 	if (!lease) { | ||||
| 		wlr_log(WLR_ERROR, "Failed to grant lease request"); | ||||
| 		wlr_drm_lease_request_v1_reject(req); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void | ||||
| server_init(struct server *server) | ||||
| { | ||||
|  | @ -339,6 +352,17 @@ server_init(struct server *server) | |||
| 	server->foreign_toplevel_manager = | ||||
| 		wlr_foreign_toplevel_manager_v1_create(server->wl_display); | ||||
| 
 | ||||
| 	server->drm_lease_manager= | ||||
| 		wlr_drm_lease_v1_manager_create(server->wl_display, server->backend); | ||||
| 	if (server->drm_lease_manager) { | ||||
| 		server->drm_lease_request.notify = handle_drm_lease_request; | ||||
| 		wl_signal_add(&server->drm_lease_manager->events.request, | ||||
| 				&server->drm_lease_request); | ||||
| 	} else { | ||||
| 		wlr_log(WLR_DEBUG, "Failed to create wlr_drm_lease_device_v1"); | ||||
| 		wlr_log(WLR_INFO, "VR will not be available"); | ||||
| 	} | ||||
| 
 | ||||
| 	server->output_power_manager_v1 = | ||||
| 		wlr_output_power_manager_v1_create(server->wl_display); | ||||
| 	server->output_power_manager_set_mode.notify = | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Joshua Ashton
						Joshua Ashton