TOUCHPAD_EVENT_BUTTON_RELEASE = (1 << 2),
};
+enum touchpad_model {
+ MODEL_UNKNOWN = 0,
+ MODEL_SYNAPTICS,
+ MODEL_ALPS,
+ MODEL_APPLETOUCH,
+ MODEL_ELANTECH,
+ MODEL_UNIBODY_MACBOOK
+};
+
enum touch_state {
TOUCH_NONE = 0,
TOUCH_BEGIN,
TAP_TOUCH_STATE_DEAD, /**< exceeded motion/timeout */
};
+/* For edge scrolling, so we only care about right and bottom */
+enum tp_edge {
+ EDGE_NONE = 0,
+ EDGE_RIGHT = (1 << 0),
+ EDGE_BOTTOM = (1 << 1),
+};
+
+enum tp_edge_scroll_touch_state {
+ EDGE_SCROLL_TOUCH_STATE_NONE,
+ EDGE_SCROLL_TOUCH_STATE_EDGE_NEW,
+ EDGE_SCROLL_TOUCH_STATE_EDGE,
+ EDGE_SCROLL_TOUCH_STATE_AREA,
+};
+
+enum tp_twofinger_scroll_state {
+ TWOFINGER_SCROLL_STATE_NONE,
+ TWOFINGER_SCROLL_STATE_ACTIVE,
+};
+
struct tp_motion {
int32_t x;
int32_t y;
} tap;
struct {
+ enum tp_edge_scroll_touch_state edge_state;
+ uint32_t edge;
+ int direction;
+ double threshold;
+ struct libinput_timer timer;
+ } scroll;
+
+ struct {
bool is_palm;
int32_t x, y; /* first coordinates if is_palm == true */
uint32_t time; /* first timestamp if is_palm == true */
unsigned int slot; /* current slot */
bool has_mt;
bool semi_mt;
+ enum touchpad_model model;
unsigned int real_touches; /* number of slots */
unsigned int ntouches; /* no slots inc. fakes */
} buttons; /* physical buttons */
struct {
- struct libinput_device_config_natural_scroll config;
- bool natural_scrolling_enabled;
+ struct libinput_device_config_scroll_method config_method;
+ enum libinput_config_scroll_method method;
+ int32_t right_edge;
+ int32_t bottom_edge;
+ enum tp_twofinger_scroll_state twofinger_state;
} scroll;
enum touchpad_event queued;
struct {
struct libinput_device_config_send_events config;
enum libinput_config_send_events_mode current_mode;
+ bool trackpoint_active;
+ struct libinput_event_listener trackpoint_listener;
+ struct libinput_timer trackpoint_timer;
} sendevents;
};
void
tp_set_pointer(struct tp_dispatch *tp, struct tp_touch *t);
+void
+tp_filter_motion(struct tp_dispatch *tp,
+ double *dx, double *dy,
+ double *dx_unaccel, double *dy_unaccel,
+ uint64_t time);
+
int
tp_tap_handle_state(struct tp_dispatch *tp, uint64_t time);
tp_init_tap(struct tp_dispatch *tp);
void
-tp_destroy_tap(struct tp_dispatch *tp);
+tp_remove_tap(struct tp_dispatch *tp);
int
tp_init_buttons(struct tp_dispatch *tp, struct evdev_device *device);
double topbutton_size_mult);
void
-tp_destroy_buttons(struct tp_dispatch *tp);
+tp_remove_buttons(struct tp_dispatch *tp);
int
tp_process_button(struct tp_dispatch *tp,
void
tp_tap_resume(struct tp_dispatch *tp, uint64_t time);
+bool
+tp_tap_dragging(struct tp_dispatch *tp);
+
+int
+tp_edge_scroll_init(struct tp_dispatch *tp, struct evdev_device *device);
+
+void
+tp_remove_edge_scroll(struct tp_dispatch *tp);
+
+void
+tp_edge_scroll_handle_state(struct tp_dispatch *tp, uint64_t time);
+
+int
+tp_edge_scroll_post_events(struct tp_dispatch *tp, uint64_t time);
+
+void
+tp_edge_scroll_stop_events(struct tp_dispatch *tp, uint64_t time);
+
+int
+tp_edge_scroll_touch_active(struct tp_dispatch *tp, struct tp_touch *t);
+
#endif