output: introduce wlr_output_set_name
wlroots picks names for all outputs, but it might be desirable for compositor to override it. For instance, Sway will use a headless output as a fallback in case no outputs are connected. Sway wants to clearly label the fallback output as such and label "real" headless outputs starting from HEADLESS-1.
This commit is contained in:
		
							parent
							
								
									1fbd13ec79
								
							
						
					
					
						commit
						36a2b19485
					
				|  | @ -1299,8 +1299,7 @@ void scan_drm_connectors(struct wlr_drm_backend *drm, | |||
| 			wlr_output_init(&wlr_conn->output, &drm->backend, &output_impl, | ||||
| 				drm->display); | ||||
| 
 | ||||
| 			memcpy(wlr_conn->output.name, wlr_conn->name, | ||||
| 				sizeof(wlr_conn->output.name)); | ||||
| 			wlr_output_set_name(&wlr_conn->output, wlr_conn->name); | ||||
| 
 | ||||
| 			wlr_conn->output.phys_width = drm_conn->mmWidth; | ||||
| 			wlr_conn->output.phys_height = drm_conn->mmHeight; | ||||
|  |  | |||
|  | @ -116,8 +116,10 @@ struct wlr_output *wlr_headless_add_output(struct wlr_backend *wlr_backend, | |||
| 	output_set_custom_mode(output, width, height, 0); | ||||
| 	strncpy(wlr_output->make, "headless", sizeof(wlr_output->make)); | ||||
| 	strncpy(wlr_output->model, "headless", sizeof(wlr_output->model)); | ||||
| 	snprintf(wlr_output->name, sizeof(wlr_output->name), "HEADLESS-%zd", | ||||
| 		++backend->last_output_num); | ||||
| 
 | ||||
| 	char name[64]; | ||||
| 	snprintf(name, sizeof(name), "HEADLESS-%zd", ++backend->last_output_num); | ||||
| 	wlr_output_set_name(wlr_output, name); | ||||
| 
 | ||||
| 	char description[128]; | ||||
| 	snprintf(description, sizeof(description), | ||||
|  |  | |||
|  | @ -520,8 +520,10 @@ struct wlr_output *wlr_wl_output_create(struct wlr_backend *wlr_backend) { | |||
| 	wlr_output_update_custom_mode(wlr_output, 1280, 720, 0); | ||||
| 	strncpy(wlr_output->make, "wayland", sizeof(wlr_output->make)); | ||||
| 	strncpy(wlr_output->model, "wayland", sizeof(wlr_output->model)); | ||||
| 	snprintf(wlr_output->name, sizeof(wlr_output->name), "WL-%zd", | ||||
| 		++backend->last_output_num); | ||||
| 
 | ||||
| 	char name[64]; | ||||
| 	snprintf(name, sizeof(name), "WL-%zd", ++backend->last_output_num); | ||||
| 	wlr_output_set_name(wlr_output, name); | ||||
| 
 | ||||
| 	char description[128]; | ||||
| 	snprintf(description, sizeof(description), | ||||
|  |  | |||
|  | @ -512,8 +512,10 @@ struct wlr_output *wlr_x11_output_create(struct wlr_backend *backend) { | |||
| 
 | ||||
| 	wlr_output_update_custom_mode(wlr_output, 1024, 768, 0); | ||||
| 
 | ||||
| 	snprintf(wlr_output->name, sizeof(wlr_output->name), "X11-%zd", | ||||
| 		++x11->last_output_num); | ||||
| 	char name[64]; | ||||
| 	snprintf(name, sizeof(name), "X11-%zd", ++x11->last_output_num); | ||||
| 	wlr_output_set_name(wlr_output, name); | ||||
| 
 | ||||
| 	parse_xcb_setup(wlr_output, x11->xcb); | ||||
| 
 | ||||
| 	char description[128]; | ||||
|  |  | |||
|  | @ -118,7 +118,7 @@ struct wlr_output { | |||
| 	struct wl_global *global; | ||||
| 	struct wl_list resources; | ||||
| 
 | ||||
| 	char name[24]; | ||||
| 	char *name; | ||||
| 	char *description; // may be NULL
 | ||||
| 	char make[56]; | ||||
| 	char model[16]; | ||||
|  | @ -336,6 +336,17 @@ void wlr_output_set_render_format(struct wlr_output *output, uint32_t format); | |||
| void wlr_output_set_scale(struct wlr_output *output, float scale); | ||||
| void wlr_output_set_subpixel(struct wlr_output *output, | ||||
| 	enum wl_output_subpixel subpixel); | ||||
| /**
 | ||||
|  * Set the output name. | ||||
|  * | ||||
|  * Output names are subject to the following rules: | ||||
|  * | ||||
|  * - Each output name must be unique. | ||||
|  * - The name cannot change after the output has been advertised to clients. | ||||
|  * | ||||
|  * For more details, see the protocol documentation for wl_output.name. | ||||
|  */ | ||||
| void wlr_output_set_name(struct wlr_output *output, const char *name); | ||||
| void wlr_output_set_description(struct wlr_output *output, const char *desc); | ||||
| /**
 | ||||
|  * Schedule a done event. | ||||
|  |  | |||
|  | @ -324,6 +324,13 @@ void wlr_output_set_subpixel(struct wlr_output *output, | |||
| 	wlr_output_schedule_done(output); | ||||
| } | ||||
| 
 | ||||
| void wlr_output_set_name(struct wlr_output *output, const char *name) { | ||||
| 	assert(output->global == NULL); | ||||
| 
 | ||||
| 	free(output->name); | ||||
| 	output->name = strdup(name); | ||||
| } | ||||
| 
 | ||||
| void wlr_output_set_description(struct wlr_output *output, const char *desc) { | ||||
| 	if (output->description != NULL && desc != NULL && | ||||
| 			strcmp(output->description, desc) == 0) { | ||||
|  | @ -420,6 +427,7 @@ void wlr_output_destroy(struct wlr_output *output) { | |||
| 		wl_event_source_remove(output->idle_done); | ||||
| 	} | ||||
| 
 | ||||
| 	free(output->name); | ||||
| 	free(output->description); | ||||
| 
 | ||||
| 	pixman_region32_fini(&output->pending.damage); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue