mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	output: only advertise current mode
- Regular clients shouldn't care about modes - Modes exposed are missing metadata such as aspect-ratio, interleaved, etc - Modes exposed cannot be pruned [1] - wlr-output-management provides a better API for privileged clients [1]: https://gitlab.freedesktop.org/wayland/wayland/issues/92 Closes: https://github.com/swaywm/wlroots/issues/1099
This commit is contained in:
		
							parent
							
								
									8bb2dc68ea
								
							
						
					
					
						commit
						ff29843d87
					
				
					 1 changed files with 3 additions and 30 deletions
				
			
		| 
						 | 
					@ -26,39 +26,12 @@ static void send_geometry(struct wl_resource *resource) {
 | 
				
			||||||
		output->make, output->model, output->transform);
 | 
							output->make, output->model, output->transform);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void send_all_modes(struct wl_resource *resource) {
 | 
					 | 
				
			||||||
	struct wlr_output *output = wlr_output_from_resource(resource);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	struct wlr_output_mode *mode;
 | 
					 | 
				
			||||||
	wl_list_for_each(mode, &output->modes, link) {
 | 
					 | 
				
			||||||
		uint32_t flags = 0;
 | 
					 | 
				
			||||||
		if (mode->preferred) {
 | 
					 | 
				
			||||||
			flags |= WL_OUTPUT_MODE_PREFERRED;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if (output->current_mode == mode) {
 | 
					 | 
				
			||||||
			flags |= WL_OUTPUT_MODE_CURRENT;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		wl_output_send_mode(resource, flags, mode->width, mode->height,
 | 
					 | 
				
			||||||
			mode->refresh);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (wl_list_empty(&output->modes)) {
 | 
					 | 
				
			||||||
		// Output has no mode, send the current width/height
 | 
					 | 
				
			||||||
		wl_output_send_mode(resource, WL_OUTPUT_MODE_CURRENT,
 | 
					 | 
				
			||||||
			output->width, output->height, output->refresh);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void send_current_mode(struct wl_resource *resource) {
 | 
					static void send_current_mode(struct wl_resource *resource) {
 | 
				
			||||||
	struct wlr_output *output = wlr_output_from_resource(resource);
 | 
						struct wlr_output *output = wlr_output_from_resource(resource);
 | 
				
			||||||
	if (output->current_mode != NULL) {
 | 
						if (output->current_mode != NULL) {
 | 
				
			||||||
		struct wlr_output_mode *mode = output->current_mode;
 | 
							struct wlr_output_mode *mode = output->current_mode;
 | 
				
			||||||
		uint32_t flags = WL_OUTPUT_MODE_CURRENT;
 | 
							wl_output_send_mode(resource, WL_OUTPUT_MODE_CURRENT,
 | 
				
			||||||
		if (mode->preferred) {
 | 
								mode->width, mode->height, mode->refresh);
 | 
				
			||||||
			flags |= WL_OUTPUT_MODE_PREFERRED;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		wl_output_send_mode(resource, flags, mode->width, mode->height,
 | 
					 | 
				
			||||||
			mode->refresh);
 | 
					 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		// Output has no mode
 | 
							// Output has no mode
 | 
				
			||||||
		wl_output_send_mode(resource, WL_OUTPUT_MODE_CURRENT, output->width,
 | 
							wl_output_send_mode(resource, WL_OUTPUT_MODE_CURRENT, output->width,
 | 
				
			||||||
| 
						 | 
					@ -109,7 +82,7 @@ static void output_bind(struct wl_client *wl_client, void *data,
 | 
				
			||||||
	wl_list_insert(&output->resources, wl_resource_get_link(resource));
 | 
						wl_list_insert(&output->resources, wl_resource_get_link(resource));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	send_geometry(resource);
 | 
						send_geometry(resource);
 | 
				
			||||||
	send_all_modes(resource);
 | 
						send_current_mode(resource);
 | 
				
			||||||
	send_scale(resource);
 | 
						send_scale(resource);
 | 
				
			||||||
	send_done(resource);
 | 
						send_done(resource);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue