mirror of
https://github.com/X11Libre/xf86-input-libinput.git
synced 2026-04-14 10:54:17 +00:00
Compare commits
19 Commits
xlibre-xf8
...
incubate
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
62f01c47f3 | ||
|
|
d8536737f1 | ||
|
|
c65932fa4a | ||
|
|
7389ff0bda | ||
|
|
28aa704a2e | ||
|
|
64ba08fc54 | ||
|
|
b695a892d3 | ||
|
|
b952981d05 | ||
|
|
060022b4b3 | ||
|
|
3f1207ebeb | ||
|
|
1ca5d08407 | ||
|
|
7721621c89 | ||
|
|
8644b2724a | ||
|
|
559204d69b | ||
|
|
1b581c5739 | ||
|
|
d1984c55d7 | ||
|
|
ef54aca082 | ||
|
|
40e01ab7be | ||
|
|
e732b6a8e7 |
@@ -43,6 +43,8 @@ m4_ifndef([XORG_MACROS_VERSION],
|
|||||||
XORG_MACROS_VERSION(1.8)
|
XORG_MACROS_VERSION(1.8)
|
||||||
XORG_DEFAULT_OPTIONS
|
XORG_DEFAULT_OPTIONS
|
||||||
|
|
||||||
|
CFLAGS="$CFLAGS -Wno-declaration-after-statement"
|
||||||
|
|
||||||
# Obtain compiler/linker options from server and required extensions
|
# Obtain compiler/linker options from server and required extensions
|
||||||
PKG_CHECK_MODULES(XORG, [xorg-server >= 1.19] xproto [inputproto >= 2.2])
|
PKG_CHECK_MODULES(XORG, [xorg-server >= 1.19] xproto [inputproto >= 2.2])
|
||||||
PKG_CHECK_MODULES(LIBINPUT, [libinput >= 1.11.0])
|
PKG_CHECK_MODULES(LIBINPUT, [libinput >= 1.11.0])
|
||||||
|
|||||||
@@ -59,36 +59,6 @@ next_word(const char **state, size_t *len, const char *separators)
|
|||||||
return next;
|
return next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return a null-terminated string array with the contents of argv
|
|
||||||
* duplicated.
|
|
||||||
*
|
|
||||||
* Use strv_free() to free the array.
|
|
||||||
*
|
|
||||||
* @return A null-terminated string array or NULL on errors
|
|
||||||
*/
|
|
||||||
char**
|
|
||||||
strv_from_argv(int argc, char **argv)
|
|
||||||
{
|
|
||||||
char **strv = NULL;
|
|
||||||
|
|
||||||
assert(argc >= 0);
|
|
||||||
|
|
||||||
if (argc == 0)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
strv = zalloc((argc + 1) * sizeof *strv);
|
|
||||||
for (int i = 0; i < argc; i++) {
|
|
||||||
char *copy = safe_strdup(argv[i]);
|
|
||||||
if (!copy) {
|
|
||||||
strv_free(strv);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
strv[i] = copy;
|
|
||||||
}
|
|
||||||
return strv;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a null-terminated string array with the tokens in the input
|
* Return a null-terminated string array with the tokens in the input
|
||||||
* string, e.g. "one two\tthree" with a separator list of " \t" will return
|
* string, e.g. "one two\tthree" with a separator list of " \t" will return
|
||||||
@@ -122,7 +92,9 @@ strv_from_string(const char *in, const char *separators, size_t *num_elements)
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t strv_len = nelems + 1; /* NULL-terminated */
|
size_t strv_len = nelems + 1; /* NULL-terminated */
|
||||||
char **strv = zalloc(strv_len * sizeof *strv);
|
char **strv = calloc(strv_len, sizeof(*strv));
|
||||||
|
if (!strv)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
size_t idx = 0;
|
size_t idx = 0;
|
||||||
const char *word;
|
const char *word;
|
||||||
@@ -142,103 +114,3 @@ strv_from_string(const char *in, const char *separators, size_t *num_elements)
|
|||||||
|
|
||||||
return strv;
|
return strv;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return a newly allocated string with all elements joined by the
|
|
||||||
* joiner, same as Python's string.join() basically.
|
|
||||||
* A strv of ["one", "two", "three", NULL] with a joiner of ", " results
|
|
||||||
* in "one, two, three".
|
|
||||||
*
|
|
||||||
* An empty strv ([NULL]) returns NULL, same for passing NULL as either
|
|
||||||
* argument.
|
|
||||||
*
|
|
||||||
* @param strv Input string array
|
|
||||||
* @param joiner Joiner between the elements in the final string
|
|
||||||
*
|
|
||||||
* @return A null-terminated string joining all elements
|
|
||||||
*/
|
|
||||||
char *
|
|
||||||
strv_join(char **strv, const char *joiner)
|
|
||||||
{
|
|
||||||
char **s;
|
|
||||||
char *str;
|
|
||||||
size_t slen = 0;
|
|
||||||
size_t count = 0;
|
|
||||||
|
|
||||||
if (!strv || !joiner)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (strv[0] == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
for (s = strv, count = 0; *s; s++, count++) {
|
|
||||||
slen += strlen(*s);
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(slen < 1000);
|
|
||||||
assert(strlen(joiner) < 1000);
|
|
||||||
assert(count > 0);
|
|
||||||
assert(count < 100);
|
|
||||||
|
|
||||||
slen += (count - 1) * strlen(joiner);
|
|
||||||
|
|
||||||
str = zalloc(slen + 1); /* trailing \0 */
|
|
||||||
for (s = strv; *s; s++) {
|
|
||||||
strcat(str, *s);
|
|
||||||
--count;
|
|
||||||
if (count > 0)
|
|
||||||
strcat(str, joiner);
|
|
||||||
}
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return a pointer to the basename within filename.
|
|
||||||
* If the filename the empty string or a directory (i.e. the last char of
|
|
||||||
* filename is '/') NULL is returned.
|
|
||||||
*/
|
|
||||||
const char *
|
|
||||||
safe_basename(const char *filename)
|
|
||||||
{
|
|
||||||
const char *basename;
|
|
||||||
|
|
||||||
if (*filename == '\0')
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
basename = strrchr(filename, '/');
|
|
||||||
if (basename == NULL)
|
|
||||||
return filename;
|
|
||||||
|
|
||||||
if (*(basename + 1) == '\0')
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
return basename + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Similar to basename() but returns the trunk only without the (last)
|
|
||||||
* trailing suffix, so that:
|
|
||||||
*
|
|
||||||
* - foo.c returns foo
|
|
||||||
* - foo.a.b returns foo.a
|
|
||||||
* - foo returns foo
|
|
||||||
* - foo/ returns ""
|
|
||||||
*
|
|
||||||
* @return an allocated string representing the trunk name of the file
|
|
||||||
*/
|
|
||||||
char *
|
|
||||||
trunkname(const char *filename)
|
|
||||||
{
|
|
||||||
const char *base = safe_basename(filename);
|
|
||||||
char *suffix;
|
|
||||||
|
|
||||||
if (base == NULL)
|
|
||||||
return safe_strdup("");
|
|
||||||
|
|
||||||
suffix = rindex(base, '.');
|
|
||||||
if (suffix == NULL)
|
|
||||||
return safe_strdup(base);
|
|
||||||
else
|
|
||||||
return strndup(base, suffix-base);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -43,120 +43,6 @@
|
|||||||
|
|
||||||
#include "util-macros.h"
|
#include "util-macros.h"
|
||||||
|
|
||||||
static inline bool
|
|
||||||
streq(const char *str1, const char *str2)
|
|
||||||
{
|
|
||||||
/* one NULL, one not NULL is always false */
|
|
||||||
if (str1 && str2)
|
|
||||||
return strcmp(str1, str2) == 0;
|
|
||||||
return str1 == str2;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool
|
|
||||||
strneq(const char *str1, const char *str2, int n)
|
|
||||||
{
|
|
||||||
/* one NULL, one not NULL is always false */
|
|
||||||
if (str1 && str2)
|
|
||||||
return strncmp(str1, str2, n) == 0;
|
|
||||||
return str1 == str2;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void *
|
|
||||||
zalloc(size_t size)
|
|
||||||
{
|
|
||||||
void *p;
|
|
||||||
|
|
||||||
/* We never need to alloc anything more than 1,5 MB so we can assume
|
|
||||||
* if we ever get above that something's going wrong */
|
|
||||||
if (size > 1536 * 1024)
|
|
||||||
assert(!"bug: internal malloc size limit exceeded");
|
|
||||||
|
|
||||||
p = calloc(1, size);
|
|
||||||
if (!p)
|
|
||||||
abort();
|
|
||||||
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* strdup guaranteed to succeed. If the input string is NULL, the output
|
|
||||||
* string is NULL. If the input string is a string pointer, we strdup or
|
|
||||||
* abort on failure.
|
|
||||||
*/
|
|
||||||
static inline char*
|
|
||||||
safe_strdup(const char *str)
|
|
||||||
{
|
|
||||||
char *s;
|
|
||||||
|
|
||||||
if (!str)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
s = strdup(str);
|
|
||||||
if (!s)
|
|
||||||
abort();
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool
|
|
||||||
safe_atoi_base(const char *str, int *val, int base)
|
|
||||||
{
|
|
||||||
char *endptr;
|
|
||||||
long v;
|
|
||||||
|
|
||||||
assert(base == 10 || base == 16 || base == 8);
|
|
||||||
|
|
||||||
errno = 0;
|
|
||||||
v = strtol(str, &endptr, base);
|
|
||||||
if (errno > 0)
|
|
||||||
return false;
|
|
||||||
if (str == endptr)
|
|
||||||
return false;
|
|
||||||
if (*str != '\0' && *endptr != '\0')
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (v > INT_MAX || v < INT_MIN)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*val = v;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool
|
|
||||||
safe_atoi(const char *str, int *val)
|
|
||||||
{
|
|
||||||
return safe_atoi_base(str, val, 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool
|
|
||||||
safe_atou_base(const char *str, unsigned int *val, int base)
|
|
||||||
{
|
|
||||||
char *endptr;
|
|
||||||
unsigned long v;
|
|
||||||
|
|
||||||
assert(base == 10 || base == 16 || base == 8);
|
|
||||||
|
|
||||||
errno = 0;
|
|
||||||
v = strtoul(str, &endptr, base);
|
|
||||||
if (errno > 0)
|
|
||||||
return false;
|
|
||||||
if (str == endptr)
|
|
||||||
return false;
|
|
||||||
if (*str != '\0' && *endptr != '\0')
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if ((long)v < 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*val = v;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool
|
|
||||||
safe_atou(const char *str, unsigned int *val)
|
|
||||||
{
|
|
||||||
return safe_atou_base(str, val, 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
safe_atod(const char *str, double *val)
|
safe_atod(const char *str, double *val)
|
||||||
{
|
{
|
||||||
@@ -211,9 +97,7 @@ safe_atod(const char *str, double *val)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
char **strv_from_argv(int argc, char **argv);
|
|
||||||
char **strv_from_string(const char *in, const char *separator, size_t *num_elements);
|
char **strv_from_string(const char *in, const char *separator, size_t *num_elements);
|
||||||
char *strv_join(char **strv, const char *joiner);
|
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
strv_free(char **strv) {
|
strv_free(char **strv) {
|
||||||
@@ -253,7 +137,10 @@ double_array_from_string(const char *in,
|
|||||||
if(!strv)
|
if(!strv)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
double *numv = zalloc(sizeof(double) * nelem);
|
double *numv = calloc(nelem, sizeof(double));
|
||||||
|
if (!numv)
|
||||||
|
goto out;
|
||||||
|
|
||||||
for (size_t idx = 0; idx < nelem; idx++) {
|
for (size_t idx = 0; idx < nelem; idx++) {
|
||||||
double val;
|
double val;
|
||||||
if (!safe_atod(strv[idx], &val))
|
if (!safe_atod(strv[idx], &val))
|
||||||
@@ -271,150 +158,3 @@ out:
|
|||||||
free(numv);
|
free(numv);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct key_value_str{
|
|
||||||
char *key;
|
|
||||||
char *value;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct key_value_double {
|
|
||||||
double key;
|
|
||||||
double value;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline ssize_t
|
|
||||||
kv_double_from_string(const char *string,
|
|
||||||
const char *pair_separator,
|
|
||||||
const char *kv_separator,
|
|
||||||
struct key_value_double **result_out)
|
|
||||||
|
|
||||||
{
|
|
||||||
struct key_value_double *result = NULL;
|
|
||||||
|
|
||||||
if (!pair_separator || pair_separator[0] == '\0' ||
|
|
||||||
!kv_separator || kv_separator[0] == '\0')
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
size_t npairs;
|
|
||||||
char **pairs = strv_from_string(string, pair_separator, &npairs);
|
|
||||||
if (!pairs || npairs == 0)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
result = zalloc(npairs * sizeof *result);
|
|
||||||
|
|
||||||
for (size_t idx = 0; idx < npairs; idx++) {
|
|
||||||
char *pair = pairs[idx];
|
|
||||||
size_t nelem;
|
|
||||||
char **kv = strv_from_string(pair, kv_separator, &nelem);
|
|
||||||
double k, v;
|
|
||||||
|
|
||||||
if (!kv || nelem != 2 ||
|
|
||||||
!safe_atod(kv[0], &k) ||
|
|
||||||
!safe_atod(kv[1], &v)) {
|
|
||||||
strv_free(kv);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
result[idx].key = k;
|
|
||||||
result[idx].value = v;
|
|
||||||
|
|
||||||
strv_free(kv);
|
|
||||||
}
|
|
||||||
|
|
||||||
strv_free(pairs);
|
|
||||||
|
|
||||||
*result_out = result;
|
|
||||||
|
|
||||||
return npairs;
|
|
||||||
|
|
||||||
error:
|
|
||||||
strv_free(pairs);
|
|
||||||
free(result);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Strip any of the characters in what from the beginning and end of the
|
|
||||||
* input string.
|
|
||||||
*
|
|
||||||
* @return a newly allocated string with none of "what" at the beginning or
|
|
||||||
* end of string
|
|
||||||
*/
|
|
||||||
static inline char *
|
|
||||||
strstrip(const char *input, const char *what)
|
|
||||||
{
|
|
||||||
char *str, *last;
|
|
||||||
|
|
||||||
str = safe_strdup(&input[strspn(input, what)]);
|
|
||||||
|
|
||||||
last = str;
|
|
||||||
|
|
||||||
for (char *c = str; *c != '\0'; c++) {
|
|
||||||
if (!strchr(what, *c))
|
|
||||||
last = c + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
*last = '\0';
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return true if str ends in suffix, false otherwise. If the suffix is the
|
|
||||||
* empty string, strendswith() always returns false.
|
|
||||||
*/
|
|
||||||
static inline bool
|
|
||||||
strendswith(const char *str, const char *suffix)
|
|
||||||
{
|
|
||||||
size_t slen = strlen(str);
|
|
||||||
size_t suffixlen = strlen(suffix);
|
|
||||||
size_t offset;
|
|
||||||
|
|
||||||
if (slen == 0 || suffixlen == 0 || suffixlen > slen)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
offset = slen - suffixlen;
|
|
||||||
return strneq(&str[offset], suffix, suffixlen);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool
|
|
||||||
strstartswith(const char *str, const char *prefix)
|
|
||||||
{
|
|
||||||
size_t prefixlen = strlen(prefix);
|
|
||||||
|
|
||||||
return prefixlen > 0 ? strneq(str, prefix, strlen(prefix)) : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *
|
|
||||||
safe_basename(const char *filename);
|
|
||||||
|
|
||||||
char *
|
|
||||||
trunkname(const char *filename);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return a copy of str with all % converted to %% to make the string
|
|
||||||
* acceptable as printf format.
|
|
||||||
*/
|
|
||||||
static inline char *
|
|
||||||
str_sanitize(const char *str)
|
|
||||||
{
|
|
||||||
if (!str)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (!strchr(str, '%'))
|
|
||||||
return strdup(str);
|
|
||||||
|
|
||||||
size_t slen = min(strlen(str), 512);
|
|
||||||
char *sanitized = zalloc(2 * slen + 1);
|
|
||||||
const char *src = str;
|
|
||||||
char *dst = sanitized;
|
|
||||||
|
|
||||||
for (size_t i = 0; i < slen; i++) {
|
|
||||||
if (*src == '%')
|
|
||||||
*dst++ = '%';
|
|
||||||
*dst++ = *src++;
|
|
||||||
}
|
|
||||||
*dst = '\0';
|
|
||||||
|
|
||||||
return sanitized;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -141,6 +141,10 @@ struct accel_points {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct xf86libinput_pressure_range {
|
||||||
|
float min, max;
|
||||||
|
};
|
||||||
|
|
||||||
struct xf86libinput {
|
struct xf86libinput {
|
||||||
InputInfoPtr pInfo;
|
InputInfoPtr pInfo;
|
||||||
char *path;
|
char *path;
|
||||||
@@ -199,9 +203,7 @@ struct xf86libinput {
|
|||||||
|
|
||||||
float rotation_angle;
|
float rotation_angle;
|
||||||
struct bezier_control_point pressurecurve[4];
|
struct bezier_control_point pressurecurve[4];
|
||||||
struct range {
|
struct xf86libinput_pressure_range pressure_range;
|
||||||
float min, max;
|
|
||||||
} pressure_range;
|
|
||||||
struct ratio {
|
struct ratio {
|
||||||
int x, y;
|
int x, y;
|
||||||
} area;
|
} area;
|
||||||
@@ -467,7 +469,7 @@ xf86libinput_set_pressurecurve(struct xf86libinput *driver_data,
|
|||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
xf86libinput_set_pressure_range(struct xf86libinput *driver_data,
|
xf86libinput_set_pressure_range(struct xf86libinput *driver_data,
|
||||||
const struct range *rangeopt)
|
const struct xf86libinput_pressure_range *rangeopt)
|
||||||
{
|
{
|
||||||
#if HAVE_LIBINPUT_PRESSURE_RANGE
|
#if HAVE_LIBINPUT_PRESSURE_RANGE
|
||||||
struct libinput_tablet_tool *tool = driver_data->tablet_tool;
|
struct libinput_tablet_tool *tool = driver_data->tablet_tool;
|
||||||
@@ -939,7 +941,7 @@ LibinputApplyConfigPressureRange(DeviceIntPtr dev,
|
|||||||
#if HAVE_LIBINPUT_PRESSURE_RANGE
|
#if HAVE_LIBINPUT_PRESSURE_RANGE
|
||||||
InputInfoPtr pInfo = dev->public.devicePrivate;
|
InputInfoPtr pInfo = dev->public.devicePrivate;
|
||||||
struct libinput_tablet_tool *tool = driver_data->tablet_tool;
|
struct libinput_tablet_tool *tool = driver_data->tablet_tool;
|
||||||
struct range *rangeopt = &driver_data->options.pressure_range;
|
struct xf86libinput_pressure_range *rangeopt = &driver_data->options.pressure_range;
|
||||||
|
|
||||||
if (!subdevice_has_capabilities(dev, CAP_TABLET_TOOL))
|
if (!subdevice_has_capabilities(dev, CAP_TABLET_TOOL))
|
||||||
return;
|
return;
|
||||||
@@ -2739,6 +2741,12 @@ xf86libinput_handle_event(struct libinput_event *event)
|
|||||||
break;
|
break;
|
||||||
case LIBINPUT_EVENT_SWITCH_TOGGLE:
|
case LIBINPUT_EVENT_SWITCH_TOGGLE:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// new libinput events we don't handle yet
|
||||||
|
case LIBINPUT_EVENT_GESTURE_HOLD_BEGIN:
|
||||||
|
case LIBINPUT_EVENT_GESTURE_HOLD_END:
|
||||||
|
case LIBINPUT_EVENT_TABLET_PAD_KEY:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
@@ -3685,7 +3693,7 @@ out:
|
|||||||
static void
|
static void
|
||||||
xf86libinput_parse_pressure_range_option(InputInfoPtr pInfo,
|
xf86libinput_parse_pressure_range_option(InputInfoPtr pInfo,
|
||||||
struct xf86libinput *driver_data,
|
struct xf86libinput *driver_data,
|
||||||
struct range *rangeopt)
|
struct xf86libinput_pressure_range *rangeopt)
|
||||||
{
|
{
|
||||||
#if HAVE_LIBINPUT_PRESSURE_RANGE
|
#if HAVE_LIBINPUT_PRESSURE_RANGE
|
||||||
struct libinput_tablet_tool *tool = driver_data->tablet_tool;
|
struct libinput_tablet_tool *tool = driver_data->tablet_tool;
|
||||||
@@ -5384,7 +5392,7 @@ LibinputSetPropertyPressureRange(DeviceIntPtr dev,
|
|||||||
InputInfoPtr pInfo = dev->public.devicePrivate;
|
InputInfoPtr pInfo = dev->public.devicePrivate;
|
||||||
struct xf86libinput *driver_data = pInfo->private;
|
struct xf86libinput *driver_data = pInfo->private;
|
||||||
float *vals;
|
float *vals;
|
||||||
struct range rangeopt = { 0.0, 1.0 };
|
struct xf86libinput_pressure_range rangeopt = { 0.0, 1.0 };
|
||||||
|
|
||||||
if (val->format != 32 || val->size != 2 || val->type != prop_float)
|
if (val->format != 32 || val->size != 2 || val->type != prop_float)
|
||||||
return BadMatch;
|
return BadMatch;
|
||||||
@@ -6663,7 +6671,7 @@ LibinputInitPressureRangeProperty(DeviceIntPtr dev,
|
|||||||
{
|
{
|
||||||
#if HAVE_LIBINPUT_PRESSURE_RANGE
|
#if HAVE_LIBINPUT_PRESSURE_RANGE
|
||||||
struct libinput_tablet_tool *tool = driver_data->tablet_tool;
|
struct libinput_tablet_tool *tool = driver_data->tablet_tool;
|
||||||
const struct range *rangeopt = &driver_data->options.pressure_range;
|
const struct xf86libinput_pressure_range *rangeopt = &driver_data->options.pressure_range;
|
||||||
float data[2] = {
|
float data[2] = {
|
||||||
rangeopt->min,
|
rangeopt->min,
|
||||||
rangeopt->max,
|
rangeopt->max,
|
||||||
|
|||||||
Reference in New Issue
Block a user