diff options
-rw-r--r-- | include/synaptics.h | 59 | ||||
-rw-r--r-- | src/alpscomm.c | 3 | ||||
-rw-r--r-- | src/eventcomm.c | 4 | ||||
-rw-r--r-- | src/properties.c | 6 | ||||
-rw-r--r-- | src/ps2comm.c | 3 | ||||
-rw-r--r-- | src/psmcomm.c | 3 | ||||
-rw-r--r-- | src/synaptics.c | 130 | ||||
-rw-r--r-- | src/synapticsstr.h | 71 | ||||
-rw-r--r-- | src/synproto.h | 4 |
9 files changed, 147 insertions, 136 deletions
diff --git a/include/synaptics.h b/include/synaptics.h index 28031d5..e4a6086 100644 --- a/include/synaptics.h +++ b/include/synaptics.h @@ -75,65 +75,6 @@ typedef struct _SynapticsSHM /* Probed hardware properties */ struct SynapticsHwInfo synhw; - - /* Parameter data */ - int left_edge, right_edge, top_edge, bottom_edge; /* edge coordinates absolute */ - int finger_low, finger_high, finger_press; /* finger detection values in Z-values */ - int tap_time; - int tap_move; /* max. tapping time and movement in packets and coord. */ - int single_tap_timeout; /* timeout to recognize a single tap */ - int tap_time_2; /* max. tapping time for double taps */ - int click_time; /* The duration of a single click */ - Bool fast_taps; /* Faster reaction to single taps */ - int emulate_mid_button_time; /* Max time between left and right button presses to - emulate a middle button press. */ - int emulate_twofinger_z; /* pressure threshold to emulate two finger touch (for Alps) */ - int emulate_twofinger_w; /* Finger width threshold to emulate two finger touch */ - int scroll_dist_vert; /* Scrolling distance in absolute coordinates */ - int scroll_dist_horiz; /* Scrolling distance in absolute coordinates */ - Bool scroll_edge_vert; /* Enable/disable vertical scrolling on right edge */ - Bool scroll_edge_horiz; /* Enable/disable horizontal scrolling on left edge */ - Bool scroll_edge_corner; /* Enable/disable continuous edge scrolling when in the corner */ - Bool scroll_twofinger_vert; /* Enable/disable vertical two-finger scrolling */ - Bool scroll_twofinger_horiz; /* Enable/disable horizontal two-finger scrolling */ - Bool special_scroll_area_right; /* Enable/disable autodetection right special scroll area */ - double min_speed, max_speed, accl; /* movement parameters */ - double trackstick_speed; /* trackstick mode speed */ - int edge_motion_min_z; /* finger pressure at which minimum edge motion speed is set */ - int edge_motion_max_z; /* finger pressure at which maximum edge motion speed is set */ - int edge_motion_min_speed; /* slowest setting for edge motion speed */ - int edge_motion_max_speed; /* fastest setting for edge motion speed */ - Bool edge_motion_use_always; /* If false, egde motion is used only when dragging */ - - Bool updown_button_scrolling; /* Up/Down-Button scrolling or middle/double-click */ - Bool leftright_button_scrolling; /* Left/right-button scrolling, or two lots of middle button */ - Bool updown_button_repeat; /* If up/down button being used to scroll, auto-repeat?*/ - Bool leftright_button_repeat; /* If left/right button being used to scroll, auto-repeat? */ - int scroll_button_repeat; /* time, in milliseconds, between scroll events being - * sent when holding down scroll buttons */ - int touchpad_off; /* Switches the touchpad off - * 0 : Not off - * 1 : Off - * 2 : Only tapping and scrolling off - */ - Bool guestmouse_off; /* Switches the guest mouse off */ - Bool locked_drags; /* Enable locked drags */ - int locked_drag_time; /* timeout for locked drags */ - int tap_action[MAX_TAP]; /* Button to report on tap events */ - int click_action[MAX_CLICK]; /* Button to report on click with fingers */ - Bool circular_scrolling; /* Enable circular scrolling */ - double scroll_dist_circ; /* Scrolling angle radians */ - int circular_trigger; /* Trigger area for circular scrolling */ - Bool circular_pad; /* Edge has an oval or circular shape */ - Bool palm_detect; /* Enable Palm Detection */ - int palm_min_width; /* Palm detection width */ - int palm_min_z; /* Palm detection depth */ - double coasting_speed; /* Coasting threshold scrolling speed */ - int press_motion_min_z; /* finger pressure at which minimum pressure motion factor is applied */ - int press_motion_max_z; /* finger pressure at which maximum pressure motion factor is applied */ - double press_motion_min_factor; /* factor applied on speed when finger pressure is at minimum */ - double press_motion_max_factor; /* factor applied on speed when finger pressure is at minimum */ - Bool grab_event_device; /* grab event device for exclusive use? */ } SynapticsSHM; /* diff --git a/src/alpscomm.c b/src/alpscomm.c index 908f949..75cd348 100644 --- a/src/alpscomm.c +++ b/src/alpscomm.c @@ -36,6 +36,7 @@ #include "alpscomm.h" #include "synproto.h" #include "synaptics.h" +#include "synapticsstr.h" #include <xf86.h> @@ -86,7 +87,7 @@ ALPS_initialize(int fd) } static void -ALPSDeviceOnHook(LocalDevicePtr local, SynapticsSHM *para) +ALPSDeviceOnHook(LocalDevicePtr local, SynapticsParameters *para) { } diff --git a/src/eventcomm.c b/src/eventcomm.c index cabc4f4..77faf51 100644 --- a/src/eventcomm.c +++ b/src/eventcomm.c @@ -56,7 +56,7 @@ ****************************************************************************/ static void -EventDeviceOnHook(LocalDevicePtr local, SynapticsSHM *para) +EventDeviceOnHook(LocalDevicePtr local, SynapticsParameters *para) { if (para->grab_event_device) { /* Try to grab the event device so that data don't leak to /dev/input/mice */ @@ -234,7 +234,7 @@ EventReadHwState(LocalDevicePtr local, struct SynapticsHwInfo *synhw, Bool v; struct SynapticsHwState *hw = &(comm->hwState); SynapticsPrivate *priv = (SynapticsPrivate *)local->private; - SynapticsSHM *para = priv->synpara; + SynapticsParameters *para = &priv->synpara; while (SynapticsReadEvent(comm, &ev)) { switch (ev.type) { diff --git a/src/properties.c b/src/properties.c index 0861ae0..2cf485a 100644 --- a/src/properties.c +++ b/src/properties.c @@ -133,7 +133,7 @@ void InitDeviceProperties(LocalDevicePtr local) { SynapticsPrivate *priv = (SynapticsPrivate *) local->private; - SynapticsSHM *para = priv->synpara; + SynapticsParameters *para = &priv->synpara; int values[9]; /* we never have more than 9 values in an atom */ float fvalues[4]; /* never have more than 4 float values */ @@ -259,8 +259,8 @@ SetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop, { LocalDevicePtr local = (LocalDevicePtr) dev->public.devicePrivate; SynapticsPrivate *priv = (SynapticsPrivate *) local->private; - SynapticsSHM *para = priv->synpara; - SynapticsSHM tmp; + SynapticsParameters *para = &priv->synpara; + SynapticsParameters tmp; /* If checkonly is set, no parameters may be changed. So just let the code * change temporary variables and forget about it. */ diff --git a/src/ps2comm.c b/src/ps2comm.c index 6c62918..6486765 100644 --- a/src/ps2comm.c +++ b/src/ps2comm.c @@ -40,6 +40,7 @@ #include "ps2comm.h" #include "synproto.h" #include "synaptics.h" +#include "synapticsstr.h" #include <xf86.h> #define MAX_UNSYNC_PACKETS 10 /* i.e. 10 to 60 bytes */ @@ -445,7 +446,7 @@ ps2_print_ident(const struct SynapticsHwInfo *synhw) static void -PS2DeviceOnHook(LocalDevicePtr local, SynapticsSHM* para) +PS2DeviceOnHook(LocalDevicePtr local, SynapticsParameters* para) { } diff --git a/src/psmcomm.c b/src/psmcomm.c index c29a8df..eaad064 100644 --- a/src/psmcomm.c +++ b/src/psmcomm.c @@ -44,6 +44,7 @@ #include <string.h> #include "synproto.h" #include "synaptics.h" +#include "synapticsstr.h" #include "ps2comm.h" /* ps2_print_ident() */ #include <xf86.h> @@ -100,7 +101,7 @@ PSMQueryIsSynaptics(LocalDevicePtr local) } static void -PSMDeviceOnHook(LocalDevicePtr local, SynapticsSHM *para) +PSMDeviceOnHook(LocalDevicePtr local, SynapticsParameters *para) { } diff --git a/src/synaptics.c b/src/synaptics.c index 2383c38..8cfe176 100644 --- a/src/synaptics.c +++ b/src/synaptics.c @@ -13,7 +13,7 @@ * Copyright © 2006 Christian Thaeter * Copyright © 2007 Joseph P. Skudlarek * Copyright © 2008 Fedor P. Goncharov - * Copyright © 2008 Red Hat, Inc. + * Copyright © 2008-2009 Red Hat, Inc. * * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without @@ -233,10 +233,9 @@ SetDeviceAndProtocol(LocalDevicePtr local) } /* - * Allocate and initialize memory for the SynapticsSHM data to hold driver - * parameter settings. + * Allocate and initialize read-only memory for the SynapticsParameters data to hold + * driver settings. * The function will allocate shared memory if priv->shm_config is TRUE. - * The allocated data is initialized from priv->synpara_default. */ static Bool alloc_param_data(LocalDevicePtr local) @@ -244,57 +243,56 @@ alloc_param_data(LocalDevicePtr local) int shmid; SynapticsPrivate *priv = local->private; - if (priv->synpara) + if (priv->synshm) return TRUE; /* Already allocated */ if (priv->shm_config) { if ((shmid = shmget(SHM_SYNAPTICS, 0, 0)) != -1) shmctl(shmid, IPC_RMID, NULL); if ((shmid = shmget(SHM_SYNAPTICS, sizeof(SynapticsSHM), - 0777 | IPC_CREAT)) == -1) { + 0774 | IPC_CREAT)) == -1) { xf86Msg(X_ERROR, "%s error shmget\n", local->name); return FALSE; } - if ((priv->synpara = (SynapticsSHM*)shmat(shmid, NULL, 0)) == NULL) { + if ((priv->synshm = (SynapticsSHM*)shmat(shmid, NULL, 0)) == NULL) { xf86Msg(X_ERROR, "%s error shmat\n", local->name); return FALSE; } } else { - priv->synpara = xcalloc(1, sizeof(SynapticsSHM)); - if (!priv->synpara) + priv->synshm = xcalloc(1, sizeof(SynapticsSHM)); + if (!priv->synshm) return FALSE; } - *(priv->synpara) = priv->synpara_default; return TRUE; } /* - * Free SynapticsSHM data previously allocated by alloc_param_data(). + * Free SynapticsParameters data previously allocated by alloc_param_data(). */ static void free_param_data(SynapticsPrivate *priv) { int shmid; - if (!priv->synpara) + if (!priv->synshm) return; if (priv->shm_config) { if ((shmid = shmget(SHM_SYNAPTICS, 0, 0)) != -1) shmctl(shmid, IPC_RMID, NULL); } else { - xfree(priv->synpara); + xfree(priv->synshm); } - priv->synpara = NULL; + priv->synshm = NULL; } static void set_default_parameters(LocalDevicePtr local) { SynapticsPrivate *priv = local->private; /* read-only */ pointer opts = local->options; /* read-only */ - SynapticsSHM *pars = &priv->synpara_default; /* modified */ + SynapticsParameters *pars = &priv->synpara; /* modified */ int horizScrollDelta, vertScrollDelta; /* pixels */ int tapMove; /* pixels */ @@ -313,7 +311,8 @@ static void set_default_parameters(LocalDevicePtr local) Bool vertTwoFingerScroll, horizTwoFingerScroll; /* read the parameters */ - pars->version = (PACKAGE_VERSION_MAJOR*10000+PACKAGE_VERSION_MINOR*100+PACKAGE_VERSION_PATCHLEVEL); + if (priv->synshm) + priv->synshm->version = (PACKAGE_VERSION_MAJOR*10000+PACKAGE_VERSION_MINOR*100+PACKAGE_VERSION_PATCHLEVEL); /* The synaptics specs specify typical edge widths of 4% on x, and 5.4% on * y (page 7) [Synaptics TouchPad Interfacing Guide, 510-000080 - A @@ -582,7 +581,7 @@ SynapticsPreInit(InputDriverPtr drv, IDevPtr dev, int flags) set_default_parameters(local); - priv->largest_valid_x = MIN(priv->synpara_default.right_edge, XMAX_NOMINAL); + priv->largest_valid_x = MIN(priv->synpara.right_edge, XMAX_NOMINAL); if (!alloc_param_data(local)) goto SetupProc_fail; @@ -701,7 +700,7 @@ DeviceOn(DeviceIntPtr dev) return !Success; } - priv->proto_ops->DeviceOnHook(local, priv->synpara); + priv->proto_ops->DeviceOnHook(local, &priv->synpara); priv->comm.buffer = XisbNew(local->fd, 64); if (!priv->comm.buffer) { @@ -827,10 +826,10 @@ static void relative_coords(SynapticsPrivate *priv, int x, int y, double *relX, double *relY) { - int minX = priv->synpara->left_edge; - int maxX = priv->synpara->right_edge; - int minY = priv->synpara->top_edge; - int maxY = priv->synpara->bottom_edge; + int minX = priv->synpara.left_edge; + int maxX = priv->synpara.right_edge; + int minY = priv->synpara.top_edge; + int maxY = priv->synpara.bottom_edge; double xCenter = (minX + maxX) / 2.0; double yCenter = (minY + maxY) / 2.0; @@ -847,8 +846,8 @@ relative_coords(SynapticsPrivate *priv, int x, int y, static double angle(SynapticsPrivate *priv, int x, int y) { - double xCenter = (priv->synpara->left_edge + priv->synpara->right_edge) / 2.0; - double yCenter = (priv->synpara->top_edge + priv->synpara->bottom_edge) / 2.0; + double xCenter = (priv->synpara.left_edge + priv->synpara.right_edge) / 2.0; + double yCenter = (priv->synpara.top_edge + priv->synpara.bottom_edge) / 2.0; return atan2(-(y - yCenter), x - xCenter); } @@ -895,17 +894,17 @@ edge_detection(SynapticsPrivate *priv, int x, int y) { edge_type edge = 0; - if (priv->synpara->circular_pad) + if (priv->synpara.circular_pad) return circular_edge_detection(priv, x, y); - if (x > priv->synpara->right_edge) + if (x > priv->synpara.right_edge) edge |= RIGHT_EDGE; - else if (x < priv->synpara->left_edge) + else if (x < priv->synpara.left_edge) edge |= LEFT_EDGE; - if (y < priv->synpara->top_edge) + if (y < priv->synpara.top_edge) edge |= TOP_EDGE; - else if (y > priv->synpara->bottom_edge) + else if (y > priv->synpara.bottom_edge) edge |= BOTTOM_EDGE; return edge; @@ -988,7 +987,7 @@ ReadInput(LocalDevicePtr local) static int HandleMidButtonEmulation(SynapticsPrivate *priv, struct SynapticsHwState *hw, int *delay) { - SynapticsSHM *para = priv->synpara; + SynapticsParameters *para = &priv->synpara; Bool done = FALSE; int timeleft; int mid = 0; @@ -1072,7 +1071,7 @@ HandleMidButtonEmulation(SynapticsPrivate *priv, struct SynapticsHwState *hw, in static int SynapticsDetectFinger(SynapticsPrivate *priv, struct SynapticsHwState *hw) { - SynapticsSHM *para = priv->synpara; + SynapticsParameters *para = &priv->synpara; int finger; /* finger detection thru pressure and threshold */ @@ -1125,7 +1124,7 @@ SelectTapButton(SynapticsPrivate *priv, edge_type edge) { TapEvent tap; - if (priv->synpara->touchpad_off == 2) { + if (priv->synpara.touchpad_off == 2) { priv->tap_button = 0; return; } @@ -1166,14 +1165,14 @@ SelectTapButton(SynapticsPrivate *priv, edge_type edge) break; } - priv->tap_button = priv->synpara->tap_action[tap]; + priv->tap_button = priv->synpara.tap_action[tap]; priv->tap_button = clamp(priv->tap_button, 0, SYN_MAX_BUTTONS); } static void SetTapState(SynapticsPrivate *priv, enum TapState tap_state, int millis) { - SynapticsSHM *para = priv->synpara; + SynapticsParameters *para = &priv->synpara; DBG(7, ErrorF("SetTapState - %d -> %d (millis:%d)\n", priv->tap_state, tap_state, millis)); switch (tap_state) { case TS_START: @@ -1224,7 +1223,7 @@ SetMovingState(SynapticsPrivate *priv, enum MovingState moving_state, int millis static int GetTimeOut(SynapticsPrivate *priv) { - SynapticsSHM *para = priv->synpara; + SynapticsParameters *para = &priv->synpara; switch (priv->tap_state) { case TS_1: @@ -1248,7 +1247,7 @@ static int HandleTapProcessing(SynapticsPrivate *priv, struct SynapticsHwState *hw, edge_type edge, enum FingerState finger) { - SynapticsSHM *para = priv->synpara; + SynapticsParameters *para = &priv->synpara; Bool touch, release, is_timeout, move; int timeleft, timeout; int delay = 1000000000; @@ -1412,7 +1411,7 @@ static int ComputeDeltas(SynapticsPrivate *priv, struct SynapticsHwState *hw, edge_type edge, int *dxP, int *dyP) { - SynapticsSHM *para = priv->synpara; + SynapticsParameters *para = &priv->synpara; enum MovingState moving_state; int dist; double dx, dy; @@ -1473,7 +1472,7 @@ ComputeDeltas(SynapticsPrivate *priv, struct SynapticsHwState *hw, } else { edge_speed = minSpd + (hw->z - minZ) * (maxSpd - minSpd) / (maxZ - minZ); } - if (!priv->synpara->circular_pad) { + if (!priv->synpara.circular_pad) { /* on rectangular pad */ if (edge & RIGHT_EDGE) { x_edge_speed = edge_speed; @@ -1558,7 +1557,7 @@ static void start_coasting(SynapticsPrivate *priv, struct SynapticsHwState *hw, edge_type edge, Bool vertical) { - SynapticsSHM *para = priv->synpara; + SynapticsParameters *para = &priv->synpara; priv->autoscroll_y = 0.0; priv->autoscroll_x = 0.0; @@ -1602,12 +1601,12 @@ static int HandleScrolling(SynapticsPrivate *priv, struct SynapticsHwState *hw, edge_type edge, Bool finger, struct ScrollData *sd) { - SynapticsSHM *para = priv->synpara; + SynapticsParameters *para = &priv->synpara; int delay = 1000000000; sd->left = sd->right = sd->up = sd->down = 0; - if (priv->synpara->touchpad_off == 2) { + if (priv->synpara.touchpad_off == 2) { stop_coasting(priv); priv->circ_scroll_on = FALSE; priv->vert_scroll_edge_on = FALSE; @@ -1852,7 +1851,7 @@ HandleScrolling(SynapticsPrivate *priv, struct SynapticsHwState *hw, } static void -HandleClickWithFingers(SynapticsSHM *para, struct SynapticsHwState *hw) +HandleClickWithFingers(SynapticsParameters *para, struct SynapticsHwState *hw) { int action = 0; switch(hw->numFingers){ @@ -1892,7 +1891,8 @@ static int HandleState(LocalDevicePtr local, struct SynapticsHwState *hw) { SynapticsPrivate *priv = (SynapticsPrivate *) (local->private); - SynapticsSHM *para = priv->synpara; + SynapticsSHM *shm = priv->synshm; + SynapticsParameters *para = &priv->synpara; int finger; int dx, dy, buttons, rep_buttons, id; edge_type edge; @@ -1904,23 +1904,26 @@ HandleState(LocalDevicePtr local, struct SynapticsHwState *hw) int i; /* update hardware state in shared memory */ - para->x = hw->x; - para->y = hw->y; - para->z = hw->z; - para->numFingers = hw->numFingers; - para->fingerWidth = hw->fingerWidth; - para->left = hw->left; - para->right = hw->right; - para->up = hw->up; - para->down = hw->down; - for (i = 0; i < 8; i++) - para->multi[i] = hw->multi[i]; - para->middle = hw->middle; - para->guest_left = hw->guest_left; - para->guest_mid = hw->guest_mid; - para->guest_right = hw->guest_right; - para->guest_dx = hw->guest_dx; - para->guest_dy = hw->guest_dy; + if (shm) + { + shm->x = hw->x; + shm->y = hw->y; + shm->z = hw->z; + shm->numFingers = hw->numFingers; + shm->fingerWidth = hw->fingerWidth; + shm->left = hw->left; + shm->right = hw->right; + shm->up = hw->up; + shm->down = hw->down; + for (i = 0; i < 8; i++) + shm->multi[i] = hw->multi[i]; + shm->middle = hw->middle; + shm->guest_left = hw->guest_left; + shm->guest_mid = hw->guest_mid; + shm->guest_right = hw->guest_right; + shm->guest_dx = hw->guest_dx; + shm->guest_dy = hw->guest_dy; + } /* If touchpad is switched off, we skip the whole thing and return delay */ if (para->touchpad_off == 1) @@ -1991,7 +1994,7 @@ HandleState(LocalDevicePtr local, struct SynapticsHwState *hw) * hardware scroll area. */ if (para->special_scroll_area_right) - priv->synpara->right_edge = priv->largest_valid_x; + priv->synpara.right_edge = priv->largest_valid_x; } edge = edge_detection(priv, hw->x, hw->y); @@ -2179,12 +2182,13 @@ static Bool QueryHardware(LocalDevicePtr local) { SynapticsPrivate *priv = (SynapticsPrivate *) local->private; - SynapticsSHM *para = priv->synpara; + SynapticsSHM *shm = priv->synshm; priv->comm.protoBufTail = 0; if (priv->proto_ops->QueryHardware(local, &priv->synhw)) { - para->synhw = priv->synhw; + if (shm) + shm->synhw = priv->synhw; } else { xf86Msg(X_PROBED, "%s: no supported touchpad found\n", local->name); priv->proto_ops->DeviceOffHook(local); diff --git a/src/synapticsstr.h b/src/synapticsstr.h index 688167c..859e757 100644 --- a/src/synapticsstr.h +++ b/src/synapticsstr.h @@ -79,12 +79,75 @@ enum TapButtonState { TBS_BUTTON_DOWN_UP /* Send button down event + set up state */ }; +typedef struct _SynapticsParameters +{ + /* Parameter data */ + int left_edge, right_edge, top_edge, bottom_edge; /* edge coordinates absolute */ + int finger_low, finger_high, finger_press; /* finger detection values in Z-values */ + int tap_time; + int tap_move; /* max. tapping time and movement in packets and coord. */ + int single_tap_timeout; /* timeout to recognize a single tap */ + int tap_time_2; /* max. tapping time for double taps */ + int click_time; /* The duration of a single click */ + Bool fast_taps; /* Faster reaction to single taps */ + int emulate_mid_button_time; /* Max time between left and right button presses to + emulate a middle button press. */ + int emulate_twofinger_z; /* pressure threshold to emulate two finger touch (for Alps) */ + int emulate_twofinger_w; /* Finger width threshold to emulate two finger touch */ + int scroll_dist_vert; /* Scrolling distance in absolute coordinates */ + int scroll_dist_horiz; /* Scrolling distance in absolute coordinates */ + Bool scroll_edge_vert; /* Enable/disable vertical scrolling on right edge */ + Bool scroll_edge_horiz; /* Enable/disable horizontal scrolling on left edge */ + Bool scroll_edge_corner; /* Enable/disable continuous edge scrolling when in the corner */ + Bool scroll_twofinger_vert; /* Enable/disable vertical two-finger scrolling */ + Bool scroll_twofinger_horiz; /* Enable/disable horizontal two-finger scrolling */ + Bool special_scroll_area_right; /* Enable/disable autodetection right special scroll area */ + double min_speed, max_speed, accl; /* movement parameters */ + double trackstick_speed; /* trackstick mode speed */ + int edge_motion_min_z; /* finger pressure at which minimum edge motion speed is set */ + int edge_motion_max_z; /* finger pressure at which maximum edge motion speed is set */ + int edge_motion_min_speed; /* slowest setting for edge motion speed */ + int edge_motion_max_speed; /* fastest setting for edge motion speed */ + Bool edge_motion_use_always; /* If false, egde motion is used only when dragging */ + + Bool updown_button_scrolling; /* Up/Down-Button scrolling or middle/double-click */ + Bool leftright_button_scrolling; /* Left/right-button scrolling, or two lots of middle button */ + Bool updown_button_repeat; /* If up/down button being used to scroll, auto-repeat?*/ + Bool leftright_button_repeat; /* If left/right button being used to scroll, auto-repeat? */ + int scroll_button_repeat; /* time, in milliseconds, between scroll events being + * sent when holding down scroll buttons */ + int touchpad_off; /* Switches the touchpad off + * 0 : Not off + * 1 : Off + * 2 : Only tapping and scrolling off + */ + Bool guestmouse_off; /* Switches the guest mouse off */ + Bool locked_drags; /* Enable locked drags */ + int locked_drag_time; /* timeout for locked drags */ + int tap_action[MAX_TAP]; /* Button to report on tap events */ + int click_action[MAX_CLICK]; /* Button to report on click with fingers */ + Bool circular_scrolling; /* Enable circular scrolling */ + double scroll_dist_circ; /* Scrolling angle radians */ + int circular_trigger; /* Trigger area for circular scrolling */ + Bool circular_pad; /* Edge has an oval or circular shape */ + Bool palm_detect; /* Enable Palm Detection */ + int palm_min_width; /* Palm detection width */ + int palm_min_z; /* Palm detection depth */ + double coasting_speed; /* Coasting threshold scrolling speed */ + int press_motion_min_z; /* finger pressure at which minimum pressure motion factor is applied */ + int press_motion_max_z; /* finger pressure at which maximum pressure motion factor is applied */ + double press_motion_min_factor; /* factor applied on speed when finger pressure is at minimum */ + double press_motion_max_factor; /* factor applied on speed when finger pressure is at minimum */ + Bool grab_event_device; /* grab event device for exclusive use? */ +} SynapticsParameters; + + typedef struct _SynapticsPrivateRec { - SynapticsSHM synpara_default; /* Default parameter settings, read from - the X config file */ - SynapticsSHM *synpara; /* Current parameter settings. Will point to - shared memory if shm_config is true */ + SynapticsParameters synpara; /* Default parameter settings, read from + the X config file */ + SynapticsSHM *synshm; /* Current parameter settings. Will point to + shared memory if shm_config is true */ struct SynapticsProtocolOperations* proto_ops; struct SynapticsHwState hwState; diff --git a/src/synproto.h b/src/synproto.h index ec398ae..22763e2 100644 --- a/src/synproto.h +++ b/src/synproto.h @@ -84,12 +84,12 @@ enum SynapticsProtocol { SYN_PROTO_ALPS /* ALPS touchpad protocol */ }; -struct _SynapticsSHM; +struct _SynapticsParameters; struct SynapticsHwInfo; struct CommData; struct SynapticsProtocolOperations { - void (*DeviceOnHook)(LocalDevicePtr local, struct _SynapticsSHM *para); + void (*DeviceOnHook)(LocalDevicePtr local, struct _SynapticsParameters *para); void (*DeviceOffHook)(LocalDevicePtr local); Bool (*QueryHardware)(LocalDevicePtr local, struct SynapticsHwInfo *synhw); Bool (*ReadHwState)(LocalDevicePtr local, struct SynapticsHwInfo *synhw, |