commit 3dd2f4a67fb2ac45f336f075779cc3bccec2aac3
parent 89f85312687b7fd1777c936e169e6400cee0a4b4
Author: iff <98851855+iffse@users.noreply.github.com>
Date: Thu, 7 Sep 2023 03:31:35 +0200
commands/input/map_from_region: don't treat 0x prefix as hex identifier
When using the `map_from_region` for pen tables, we will usually make
the available area as big as possible while maintaining the proportions
with the screen.
As most of the tablets uses a 16:10 ratios while the most popular screen
ratios is still 16:9, the argument for most people should be `0x0 1x0.9`
to have the maximum effective area.
However, the argument above won't work because the current code will
treat `0x...` as a hexadecimal number, instead of setting both `x` and
`y` to `0`.
This fix allows the use of the following syntax:
```
input type:tablet_tool {
map_from_region 0x0 1x0.9
}
```
Diffstat:
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/sway/commands/input/map_from_region.c b/sway/commands/input/map_from_region.c
@@ -11,11 +11,21 @@ static bool parse_coords(const char *str, double *x, double *y, bool *mm) {
*mm = false;
char *end;
- *x = strtod(str, &end);
- if (end[0] != 'x') {
- return false;
+
+ // Check for "0x" prefix to avoid strtod treating the string as hex
+ if (str[0] == '0' && str[1] == 'x') {
+ if (strlen(str) < 3) {
+ return false;
+ }
+ *x = 0;
+ end = (char *)str + 2;
+ } else {
+ *x = strtod(str, &end);
+ if (end[0] != 'x') {
+ return false;
+ }
+ ++end;
}
- ++end;
*y = strtod(end, &end);
if (end[0] == 'm') {