This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository enlightenment.

View the commit online.

commit 98a9609f8c98eb244acee947f42ed6a241923e61
Author: Nekobit <[email protected]>
AuthorDate: Thu Mar 9 22:14:12 2023 -0500

    xinput: Add support for flat mouse acceleration and Hi-Res scrolling
    
    Flat mouse accel is fairly obvious.
    Hi-Res scrolling is an option that is useful on certain mice that technically support 'pixel-perfect' scrolling, but still 'click' like regular mice would when you scroll. Some mice are designed to use pixel-perfect scrolling, so keeping it optional is useful.
---
 data/config/default/e.src                         |  3 ++
 data/config/standard/e.src                        |  3 ++
 data/config/tiling/e.src                          |  3 ++
 src/bin/e_comp_x_devices.c                        | 43 ++++++++++++++++++++---
 src/bin/e_config.c                                |  3 ++
 src/bin/e_config.h                                |  3 ++
 src/modules/conf_interaction/e_int_config_mouse.c | 26 +++++++++++---
 7 files changed, 75 insertions(+), 9 deletions(-)

diff --git a/data/config/default/e.src b/data/config/default/e.src
index 5f91c8a35..dbb95387f 100644
--- a/data/config/default/e.src
+++ b/data/config/default/e.src
@@ -139,6 +139,8 @@ group "E_Config" struct {
   value "clientlist_max_caption_len" int: 2;
   value "mouse_hand" int: 1;
   value "mouse_accel" double: 0.0;
+  value "mouse_flat_accel" uchar: 0;
+  value "mouse_hires_scroll" uchar: 1;
   value "mouse_accel_threshold" int: 4;
   value "mouse_natural_scroll" uchar: 0;
   value "mouse_emulate_middle_button" uchar: 1;
@@ -146,6 +148,7 @@ group "E_Config" struct {
   value "touch_natural_scroll" uchar: 0;
   value "touch_emulate_middle_button" uchar: 1;
   value "touch_tap_to_click" uchar: 0;
+  value "touch_flat_accel" uchar: 0;
   value "touch_clickpad" uchar: 1;
   value "touch_scrolling_2finger" uchar: 1;
   value "touch_scrolling_edge" uchar: 0;
diff --git a/data/config/standard/e.src b/data/config/standard/e.src
index d83c804d6..8e982c93f 100644
--- a/data/config/standard/e.src
+++ b/data/config/standard/e.src
@@ -137,6 +137,8 @@ group "E_Config" struct {
     value "clientlist_max_caption_len" int: 2;
     value "mouse_hand" int: 1;
     value "mouse_accel" double: 0.0;
+    value "mouse_flat_accel" uchar: 0;
+    value "mouse_hires_scroll" uchar: 1;
     value "mouse_accel_threshold" int: 4;
     value "mouse_natural_scroll" uchar: 0;
     value "mouse_emulate_middle_button" uchar: 1;
@@ -144,6 +146,7 @@ group "E_Config" struct {
     value "touch_natural_scroll" uchar: 0;
     value "touch_emulate_middle_button" uchar: 1;
     value "touch_tap_to_click" uchar: 0;
+    value "touch_flat_accel" uchar: 0;
     value "touch_clickpad" uchar: 1;
     value "touch_scrolling_2finger" uchar: 1;
     value "touch_scrolling_edge" uchar: 0;
diff --git a/data/config/tiling/e.src b/data/config/tiling/e.src
index 75f59a81d..53f713500 100644
--- a/data/config/tiling/e.src
+++ b/data/config/tiling/e.src
@@ -138,12 +138,15 @@ group "E_Config" struct {
     value "mouse_hand" int: 1;
     value "mouse_accel" double: 0.0;
     value "mouse_accel_threshold" int: 4;
+    value "mouse_flat_accel" uchar: 0;
+    value "mouse_hires_scroll" uchar: 1;
     value "mouse_natural_scroll" uchar: 0;
     value "mouse_emulate_middle_button" uchar: 1;
     value "touch_accel" double: 0.0;
     value "touch_natural_scroll" uchar: 0;
     value "touch_emulate_middle_button" uchar: 1;
     value "touch_tap_to_click" uchar: 0;
+    value "touch_flat_accel" uchar: 0;
     value "touch_clickpad" uchar: 1;
     value "touch_scrolling_2finger" uchar: 1;
     value "touch_scrolling_edge" uchar: 0;
diff --git a/src/bin/e_comp_x_devices.c b/src/bin/e_comp_x_devices.c
index c84e692c1..404701175 100644
--- a/src/bin/e_comp_x_devices.c
+++ b/src/bin/e_comp_x_devices.c
@@ -144,11 +144,44 @@ _handle_dev_prop(int dev_slot, const char *dev, const char *prop, Device_Flags d
           }
         free(val);
      }
-// not for now - default
-//   else if (!strcmp(prop, "libinput Accel Profile Enabled"))
-//     {
-//        // 1 bool, 0 = adaptive, 1 = flat
-//     }
+   else if (!strcmp(prop, "libinput Accel Profile Enabled"))
+     {
+        // 1 bool, 0 = adaptive, 1 = flat
+        unsigned char cfval = 0;
+        unsigned char *val = ecore_x_input_device_property_get
+          (dev_slot, prop, &num, &fmt, &size);
+        if (dev_flags == DEVICE_FLAG_TOUCHPAD)
+          cfval = e_config->touch_flat_accel;
+        else
+          cfval = e_config->mouse_flat_accel;
+        
+        if ((val) && (size == 8) && (num == 2) && ((cfval == 1 && val[0] == 1) ||
+                                                   (cfval == 0 && val[0] == 0)))
+          {
+             // Does a little flip-flop for each variable
+             val[0] = !cfval;
+             val[1] =  cfval;
+             printf("DEV: change [%s] [%s] -> %i, %i\n", dev, prop, val[0], val[1]);
+             ecore_x_input_device_property_set
+               (dev_slot, prop, val, num, fmt, size);
+          }
+        free(val);
+     }
+   else if (!strcmp(prop, "libinput High Resolution Wheel Scroll Enabled"))
+     {
+        unsigned char cfval = e_config->mouse_hires_scroll;
+        unsigned char *val = ecore_x_input_device_property_get
+          (dev_slot, prop, &num, &fmt, &size);
+        
+        if ((val) && (size == 8) && (num == 1) && ((cfval != val[0]))
+          {
+             val[0] = cfval;
+             printf("DEV: change [%s] [%s] -> %i\n", dev, prop, val[0]);
+             ecore_x_input_device_property_set
+               (dev_slot, prop, val, num, fmt, size);
+          }
+        free(val);
+     }   
 // do via button mapping for now - not sure about this evdev can't do this
 //   else if (!strcmp(prop, "libinput Left Handed Enabled"))
 //     {
diff --git a/src/bin/e_config.c b/src/bin/e_config.c
index 4a76d2335..cee67ffb9 100644
--- a/src/bin/e_config.c
+++ b/src/bin/e_config.c
@@ -855,8 +855,10 @@ _e_config_edd_init(Eina_Bool old)
    E_CONFIG_VAL(D, T, mouse_hand, INT);
 
    E_CONFIG_VAL(D, T, mouse_accel, DOUBLE);
+   E_CONFIG_VAL(D, T, mouse_flat_accel, UCHAR);
    E_CONFIG_VAL(D, T, mouse_accel_threshold, INT);
    E_CONFIG_VAL(D, T, mouse_natural_scroll, UCHAR);
+   E_CONFIG_VAL(D, T, mouse_hires_scroll, UCHAR);
    E_CONFIG_VAL(D, T, mouse_emulate_middle_button, UCHAR);
 
    E_CONFIG_VAL(D, T, touch_accel, DOUBLE);
@@ -864,6 +866,7 @@ _e_config_edd_init(Eina_Bool old)
    E_CONFIG_VAL(D, T, touch_emulate_middle_button, UCHAR);
    E_CONFIG_VAL(D, T, touch_tap_to_click, UCHAR);
    E_CONFIG_VAL(D, T, touch_clickpad, UCHAR);
+   E_CONFIG_VAL(D, T, touch_flat_accel, UCHAR);
    E_CONFIG_VAL(D, T, touch_scrolling_2finger, UCHAR);
    E_CONFIG_VAL(D, T, touch_scrolling_edge, UCHAR);
    E_CONFIG_VAL(D, T, touch_scrolling_circular, UCHAR);
diff --git a/src/bin/e_config.h b/src/bin/e_config.h
index bfef8486a..d7250739b 100644
--- a/src/bin/e_config.h
+++ b/src/bin/e_config.h
@@ -245,12 +245,15 @@ struct _E_Config
    int                       mouse_hand; //GUI
    double                    mouse_accel; // GUI
    int                       mouse_accel_threshold; // GUI
+   unsigned char             mouse_flat_accel; // GUI
    unsigned char             mouse_natural_scroll; // GUI
+   unsigned char             mouse_hires_scroll; // GUI
    unsigned char             mouse_emulate_middle_button; // GUI
 
    double                    touch_accel; // GUI
    unsigned char             touch_natural_scroll; // GUI
    unsigned char             touch_emulate_middle_button; // GUI
+   unsigned char             touch_flat_accel; // GUI
    unsigned char             touch_tap_to_click; // GUI
    unsigned char             touch_clickpad; // GUI
    unsigned char             touch_scrolling_2finger; // GUI
diff --git a/src/modules/conf_interaction/e_int_config_mouse.c b/src/modules/conf_interaction/e_int_config_mouse.c
index 24a095da7..76f82160c 100644
--- a/src/modules/conf_interaction/e_int_config_mouse.c
+++ b/src/modules/conf_interaction/e_int_config_mouse.c
@@ -10,10 +10,10 @@ struct _E_Config_Dialog_Data
 {
    E_Config_Dialog *cfd;
 
-   int        show_cursor;
-   int        idle_cursor;
-   int        use_e_cursor;
-   int        cursor_size;
+   int show_cursor;
+   int idle_cursor;
+   int use_e_cursor;
+   int cursor_size;
 
    struct
    {
@@ -24,12 +24,15 @@ struct _E_Config_Dialog_Data
 
    double mouse_accel;
    double mouse_accel_threshold;
+   int mouse_flat_accel;
    int mouse_natural_scroll;
+   int mouse_hires_scroll;
    int mouse_emulate_middle_button;
 
    double touch_accel;
    int touch_natural_scroll;
    int touch_emulate_middle_button;
+   int touch_flat_accel;
    int touch_tap_to_click;
    int touch_clickpad;
    int touch_scrolling_2finger;
@@ -73,12 +76,15 @@ _fill_data(E_Config_Dialog_Data *cfdata)
    cfdata->mouse_hand = e_config->mouse_hand;
 
    cfdata->mouse_accel = e_config->mouse_accel;
+   cfdata->mouse_flat_accel = e_config->mouse_flat_accel;
    cfdata->mouse_accel_threshold = e_config->mouse_accel_threshold;
    cfdata->mouse_natural_scroll = e_config->mouse_natural_scroll;
+   cfdata->mouse_hires_scroll = e_config->mouse_hires_scroll;
    cfdata->mouse_emulate_middle_button = e_config->mouse_emulate_middle_button;
 
    cfdata->touch_accel = e_config->touch_accel;
    cfdata->touch_natural_scroll = e_config->touch_natural_scroll;
+   cfdata->touch_flat_accel = e_config->touch_flat_accel;
    cfdata->touch_emulate_middle_button = e_config->touch_emulate_middle_button;
    cfdata->touch_tap_to_click = e_config->touch_tap_to_click;
    cfdata->touch_clickpad = e_config->touch_clickpad;
@@ -112,9 +118,12 @@ _basic_check_changed(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfd
             EINA_DBL_EQ(cfdata->mouse_accel_threshold, e_config->mouse_accel_threshold) &&
             (cfdata->mouse_natural_scroll == e_config->mouse_natural_scroll) &&
             (cfdata->mouse_emulate_middle_button == e_config->mouse_emulate_middle_button) &&
+            (cfdata->mouse_hires_scroll == e_config->mouse_hires_scroll) &&
+            (cfdata->mouse_flat_accel == e_config->mouse_flat_accel) &&
             EINA_DBL_EQ(cfdata->touch_accel, e_config->touch_accel) &&
             (cfdata->touch_natural_scroll == e_config->touch_natural_scroll) &&
             (cfdata->touch_emulate_middle_button == e_config->touch_emulate_middle_button) &&
+            (cfdata->touch_flat_accel == e_config->touch_flat_accel) &&
             (cfdata->touch_tap_to_click == e_config->touch_tap_to_click) &&
             (cfdata->touch_clickpad == e_config->touch_clickpad) &&
             (cfdata->touch_scrolling_2finger == e_config->touch_scrolling_2finger) &&
@@ -144,11 +153,14 @@ _basic_apply_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata
 
    e_config->mouse_accel = cfdata->mouse_accel;
    e_config->mouse_accel_threshold = cfdata->mouse_accel_threshold;
+   e_config->mouse_flat_accel = cfdata->mouse_flat_accel;
+   e_config->mouse_hires_scroll = cfdata->mouse_hires_scroll;
    e_config->mouse_natural_scroll = cfdata->mouse_natural_scroll;
    e_config->mouse_emulate_middle_button = cfdata->mouse_emulate_middle_button;
 
    e_config->touch_accel = cfdata->touch_accel;
    e_config->touch_natural_scroll = cfdata->touch_natural_scroll;
+   e_config->touch_flat_accel = cfdata->touch_flat_accel;
    e_config->touch_emulate_middle_button = cfdata->touch_emulate_middle_button;
    e_config->touch_tap_to_click = cfdata->touch_tap_to_click;
    e_config->touch_clickpad = cfdata->touch_clickpad;
@@ -255,6 +267,8 @@ _basic_create_widgets(E_Config_Dialog *cfd EINA_UNUSED, Evas *evas, E_Config_Dia
    e_widget_list_object_append(ol, of, 1, 0, 0.5);
 
    of = e_widget_framelist_add(evas, _("Acceleration"), 0);
+   ob = e_widget_check_add(evas, _("Flat acceleration"), &(cfdata->mouse_flat_accel));
+   e_widget_framelist_object_append(of, ob);
    ob = e_widget_slider_add(evas, 1, 0, _("%1.1f"), -1.0, 1.0, 0.1, 0,
                             &(cfdata->mouse_accel), NULL, 100);
    e_widget_framelist_object_append(of, ob);
@@ -278,6 +292,8 @@ _basic_create_widgets(E_Config_Dialog *cfd EINA_UNUSED, Evas *evas, E_Config_Dia
 
    oc = e_widget_check_add(evas, _("Natural scrolling"), &(cfdata->mouse_natural_scroll));
    e_widget_framelist_object_append(of, oc);
+   oc = e_widget_check_add(evas, _("Hi-Res scrolling"), &(cfdata->mouse_hires_scroll));
+   e_widget_framelist_object_append(of, oc);
 
    e_widget_list_object_append(ol, of, 1, 0, 0.5);
    e_widget_toolbook_page_append(otb, NULL, _("Mouse"), ol,
@@ -289,6 +305,8 @@ _basic_create_widgets(E_Config_Dialog *cfd EINA_UNUSED, Evas *evas, E_Config_Dia
 
    of = e_widget_framelist_add(evas, _("Acceleration"), 0);
 
+   ob = e_widget_check_add(evas, _("Flat acceleration"), &(cfdata->touch_flat_accel));
+   e_widget_framelist_object_append(of, ob);
    ob = e_widget_slider_add(evas, 1, 0, _("%1.1f"), -1.0, 1.0, 0.1, 0,
                             &(cfdata->touch_accel), NULL, 100);
    e_widget_framelist_object_append(of, ob);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to