diff options
| author | Tadeo Kondrak <me@tadeo.ca> | 2019-11-01 11:37:29 -0600 | 
|---|---|---|
| committer | Simon Ser <contact@emersion.fr> | 2019-11-17 13:34:24 +0100 | 
| commit | 7f54495b5e62a65627cdb61f099e241f0594a6d9 (patch) | |
| tree | a0480453d0721ab7df31a43c1e45c7fd7dbeb3d5 | |
| parent | 4829f1c26a521a4ef6659d91505112cc0be8d237 (diff) | |
| download | sway-7f54495b5e62a65627cdb61f099e241f0594a6d9.tar.xz | |
Use an enum instead of a marker string for map_to_
| -rw-r--r-- | include/sway/config.h | 8 | ||||
| -rw-r--r-- | sway/commands/input/map_to_output.c | 1 | ||||
| -rw-r--r-- | sway/commands/input/map_to_region.c | 4 | ||||
| -rw-r--r-- | sway/config/input.c | 3 | ||||
| -rw-r--r-- | sway/input/seat.c | 67 | 
5 files changed, 44 insertions, 39 deletions
diff --git a/include/sway/config.h b/include/sway/config.h index 0a010c6d..6892c946 100644 --- a/include/sway/config.h +++ b/include/sway/config.h @@ -108,6 +108,12 @@ struct calibration_matrix {  	float matrix[6];  }; +enum input_config_mapped_to { +	MAPPED_TO_DEFAULT, +	MAPPED_TO_OUTPUT, +	MAPPED_TO_REGION +}; +  /**   * options for input devices   */ @@ -147,6 +153,8 @@ struct input_config {  	int xkb_capslock;  	struct input_config_mapped_from_region *mapped_from_region; + +	enum input_config_mapped_to mapped_to;  	char *mapped_to_output;  	struct wlr_box *mapped_to_region; diff --git a/sway/commands/input/map_to_output.c b/sway/commands/input/map_to_output.c index 6d623186..f60fb7d5 100644 --- a/sway/commands/input/map_to_output.c +++ b/sway/commands/input/map_to_output.c @@ -16,6 +16,7 @@ struct cmd_results *input_cmd_map_to_output(int argc, char **argv) {  		return cmd_results_new(CMD_FAILURE, "No input device defined.");  	} +	ic->mapped_to = MAPPED_TO_OUTPUT;  	ic->mapped_to_output = strdup(argv[0]);  	return cmd_results_new(CMD_SUCCESS, NULL); diff --git a/sway/commands/input/map_to_region.c b/sway/commands/input/map_to_region.c index e0b69ed5..e85495e5 100644 --- a/sway/commands/input/map_to_region.c +++ b/sway/commands/input/map_to_region.c @@ -15,9 +15,7 @@ struct cmd_results *input_cmd_map_to_region(int argc, char **argv) {  		return cmd_results_new(CMD_FAILURE, "No input device defined");  	} -	// This is used to clear the current output mapping. -	ic->mapped_to_output = strdup(""); - +	ic->mapped_to = MAPPED_TO_REGION;  	ic->mapped_to_region = calloc(1, sizeof(struct wlr_box));  	const char *errstr; diff --git a/sway/config/input.c b/sway/config/input.c index 294ed08f..0993e9ab 100644 --- a/sway/config/input.c +++ b/sway/config/input.c @@ -134,6 +134,9 @@ void merge_input_config(struct input_config *dst, struct input_config *src) {  		memcpy(dst->mapped_from_region, src->mapped_from_region,  			sizeof(struct input_config_mapped_from_region));  	} +	if (src->mapped_to) { +		dst->mapped_to = src->mapped_to; +	}  	if (src->mapped_to_output) {  		free(dst->mapped_to_output);  		dst->mapped_to_output = strdup(src->mapped_to_output); diff --git a/sway/input/seat.c b/sway/input/seat.c index 5fc23a19..f486d5e7 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c @@ -575,62 +575,57 @@ static void seat_reset_input_config(struct sway_seat *seat,  static void seat_apply_input_config(struct sway_seat *seat,  		struct sway_seat_device *sway_device) { -	const char *mapped_to_output = NULL; -	struct wlr_box *mapped_to_region = NULL; - -	struct input_config *ic = input_device_get_config( -			sway_device->input_device); -	if (ic != NULL) { -		sway_log(SWAY_DEBUG, "Applying input config to %s", -			sway_device->input_device->identifier); - -		// We use an empty string as a marker to clear the mapped_to_output -		// property, because a NULL set in a handler_context isn't preserved. -		if (ic->mapped_to_output != NULL && ic->mapped_to_output[0] == '\0') { -			free(ic->mapped_to_output); -			ic->mapped_to_output = NULL; -			wlr_cursor_map_input_to_output(seat->cursor->cursor, -				sway_device->input_device->wlr_device, NULL); -		} +	struct input_config *ic = +		input_device_get_config(sway_device->input_device); +	if (ic == NULL) { +		return; +	} -		mapped_to_output = ic->mapped_to_output; -		if (mapped_to_output != NULL) { -			// Output has just been set, clear region setting. -			free(ic->mapped_to_region); -			ic->mapped_to_region = NULL; -			wlr_cursor_map_input_to_region(seat->cursor->cursor, -				sway_device->input_device->wlr_device, NULL); -		} +	sway_log(SWAY_DEBUG, "Applying input config to %s", +		sway_device->input_device->identifier); -		mapped_to_region = ic->mapped_to_region; -	} +	const char *mapped_to_output = ic->mapped_to_output; +	struct wlr_box *mapped_to_region = ic->mapped_to_region; -	if (mapped_to_output == NULL && mapped_to_region == NULL) { +	switch (ic->mapped_to) { +	case MAPPED_TO_DEFAULT:  		mapped_to_output = sway_device->input_device->wlr_device->output_name; -	} - -	if (mapped_to_output != NULL) { +		if (mapped_to_output == NULL) { +			return; +		} +		/* fallthrough */ +	case MAPPED_TO_OUTPUT:  		sway_log(SWAY_DEBUG, "Mapping input device %s to output %s",  			sway_device->input_device->identifier, mapped_to_output);  		if (strcmp("*", mapped_to_output) == 0) {  			wlr_cursor_map_input_to_output(seat->cursor->cursor,  				sway_device->input_device->wlr_device, NULL); +			wlr_cursor_map_input_to_region(seat->cursor->cursor, +				sway_device->input_device->wlr_device, NULL);  			sway_log(SWAY_DEBUG, "Reset output mapping");  			return;  		}  		struct sway_output *output = output_by_name_or_id(mapped_to_output); -		if (output) { -			wlr_cursor_map_input_to_output(seat->cursor->cursor, -				sway_device->input_device->wlr_device, output->wlr_output); -			sway_log(SWAY_DEBUG, "Mapped to output %s", output->wlr_output->name); +		if (!output) { +			return;  		} -	} else if (mapped_to_region != NULL) { +		wlr_cursor_map_input_to_output(seat->cursor->cursor, +			sway_device->input_device->wlr_device, output->wlr_output); +		wlr_cursor_map_input_to_region(seat->cursor->cursor, +			sway_device->input_device->wlr_device, NULL); +		sway_log(SWAY_DEBUG, +			"Mapped to output %s", output->wlr_output->name); +		return; +	case MAPPED_TO_REGION:  		sway_log(SWAY_DEBUG, "Mapping input device %s to %d,%d %dx%d",  			sway_device->input_device->identifier,  			mapped_to_region->x, mapped_to_region->y,  			mapped_to_region->width, mapped_to_region->height); +		wlr_cursor_map_input_to_output(seat->cursor->cursor, +			sway_device->input_device->wlr_device, NULL);  		wlr_cursor_map_input_to_region(seat->cursor->cursor,  			sway_device->input_device->wlr_device, mapped_to_region); +		return;  	}  }  | 
