summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/conversion_main_loop.c')
-rw-r--r--src/server/conversion_main_loop.c45
1 files changed, 37 insertions, 8 deletions
diff --git a/src/server/conversion_main_loop.c b/src/server/conversion_main_loop.c
index 937fc68..f9af4f8 100644
--- a/src/server/conversion_main_loop.c
+++ b/src/server/conversion_main_loop.c
@@ -42,6 +42,7 @@ static void convert_input
if (input_type == EV_REL)
{
+ struct relabsd_axis * axis;
unsigned int abs_code;
enum relabsd_axis_name axis_name;
@@ -53,14 +54,15 @@ static void convert_input
return;
}
- switch
- (
- relabsd_axis_filter_new_value
- (
- relabsd_parameters_get_axis(axis_name, &(server->parameters)),
- &value
- )
- )
+ axis = relabsd_parameters_get_axis(axis_name, &(server->parameters));
+ axis_name = relabsd_axis_get_convert_to(axis);
+
+ if (axis_name != RELABSD_UNKNOWN)
+ {
+ abs_code = relabsd_axis_name_to_evdev_abs(axis_name);
+ }
+
+ switch (relabsd_axis_filter_new_value(axis, &value))
{
case -1:
/* Doesn't want the event to be transmitted. */
@@ -93,6 +95,33 @@ static void convert_input
return;
}
}
+ else if (input_type == EV_ABS)
+ {
+ enum relabsd_axis_name axis_name;
+
+ axis_name = relabsd_axis_name_from_evdev_abs(input_code);
+
+ if (axis_name != RELABSD_UNKNOWN)
+ {
+ struct relabsd_axis * axis;
+
+ axis = relabsd_parameters_get_axis(axis_name, &(server->parameters));
+ axis_name = relabsd_axis_get_convert_to(axis);
+
+ if (axis_name != RELABSD_UNKNOWN)
+ {
+ input_code = relabsd_axis_name_to_evdev_abs(axis_name);
+ }
+ }
+
+ (void) relabsd_virtual_device_write_evdev_event
+ (
+ &(server->virtual_device),
+ input_type,
+ input_code,
+ value
+ );
+ }
else
{
/* Any other event is retransmitted as is. */