summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perl-install/Xconfig/xfree.pm41
-rw-r--r--perl-install/mouse.pm37
2 files changed, 71 insertions, 7 deletions
diff --git a/perl-install/Xconfig/xfree.pm b/perl-install/Xconfig/xfree.pm
index 680189915..3f18b5f9e 100644
--- a/perl-install/Xconfig/xfree.pm
+++ b/perl-install/Xconfig/xfree.pm
@@ -210,6 +210,47 @@ sub set_wacoms {
################################################################################
+# synaptics ####################################################################
+################################################################################
+sub set_synaptics {
+ my ($raw_X, @synaptics) = @_;
+ $raw_X->remove_InputDevices('synaptics');
+
+ my $layout = get_ServerLayout($raw_X)->{InputDevice} ||= [];
+ @$layout = grep { $_->{val} !~ /^"Synaptics Mouse/ } @$layout;
+
+ @synaptics or return;
+ add_load_module($raw_X, "synaptics");
+
+ each_index {
+ my $synaptics_mouse = $_;
+ my $identifier = "SynapticsMouse" . ($::i + 1);
+ my $pointer_type = $synaptics_mouse->{Primary} ? "CorePointer" : "AlwaysCore";
+ my $h = { Identifier => { val => $identifier },
+ Driver => { val => "synaptics" },
+ Device => { val => $synaptics_mouse->{Device}, Option => 1 },
+ Protocol => { val => $synaptics_mouse->{Protocol}, Option => 1 },
+ LeftEdge => { val => 1700, Option => 1 },
+ RightEdge => { val => 5300, Option => 1 },
+ TopEdge => { val => 1700, Option => 1 },
+ BottomEdge => { val => 4200, Option => 1 },
+ FingerLow => { val => 25, Option => 1 },
+ FingerHigh => { val => 30, Option => 1 },
+ MaxTapTime => { val => 180, Option => 1 },
+ MaxTapMove => { val => 220, Option => 1 },
+ VertScrollDelta => { val => 100, Option => 1 },
+ MinSpeed => { val => 0.06, Option => 1 },
+ MaxSpeed => { val => 0.12, Option => 1 },
+ AccelFactor => { val => 0.0010, Option => 1 },
+ SHMConfig => { val => "on", Option => 1 },
+ };
+ $raw_X->add_Section('InputDevice', $h);
+ push @$layout, { val => qq("$identifier" "$pointer_type") };
+ } @synaptics;
+}
+
+
+################################################################################
# monitor ######################################################################
################################################################################
my @monitor_fields = qw(VendorName ModelName HorizSync VertRefresh);
diff --git a/perl-install/mouse.pm b/perl-install/mouse.pm
index 2f1cd6b29..415600bec 100644
--- a/perl-install/mouse.pm
+++ b/perl-install/mouse.pm
@@ -32,9 +32,9 @@ my %mice =
[ 5, 'ps/2', 'MouseManPlusPS/2', N_("Logitech MouseMan+") ],
[ 5, 'imps2', 'IMPS/2', N_("Generic PS2 Wheel Mouse") ],
[ 5, 'ps/2', 'GlidePointPS/2', N_("GlidePoint") ],
- if_(c::kernel_version() !~ /^\Q2.6/,
- [ 5, 'imps2', 'auto', N_("Automatic") ],
- ),
+ c::kernel_version() =~ /^\Q2.6/ ?
+ [ 5, 'ps/2', 'auto-dev', N_("Synaptics Touchpad") ] :
+ [ 5, 'imps2', 'auto', N_("Automatic") ],
'',
[ 5, 'ps/2', 'ThinkingMousePS/2', N_("Kensington Thinking Mouse") ],
[ 5, 'netmouse', 'NetMousePS/2', N_("Genius NetMouse") ],
@@ -288,8 +288,16 @@ sub detect {
if (c::kernel_version() =~ /^\Q2.6/) {
$modules_conf->get_probeall("usb-interface") and eval { modules::load('usbhid') };
- if (cat_('/proc/bus/input/devices') =~ /^H: Handlers=mouse/m) {
- return fullname2mouse('Universal|Any PS/2 & USB mice', wacom => \@wacom);
+ my @input_devices = cat_('/proc/bus/input/devices');
+ my $synaptics_mouse;
+ if (my $mouse_nb = grep { /^H: Handlers=mouse/ } @input_devices) {
+ my $univ_mouse = fullname2mouse('Universal|Any PS/2 & USB mice', wacom => \@wacom);
+ if (any { m!^N: Name="(?:SynPS/2 Synaptics TouchPad|AlpsPS/2 ALPS TouchPad)"$! } @input_devices) {
+ $synaptics_mouse = fullname2mouse('PS/2|Synaptics Touchpad');
+ $mouse_nb < 2 and return $synaptics_mouse;
+ $univ_mouse->{auxmouse} = $synaptics_mouse;
+ }
+ return $univ_mouse;
}
} else {
my $ps2_mouse = detect_devices::hasMousePS2("psaux") && fullname2mouse("PS/2|Automatic", unsafe => 0);
@@ -346,12 +354,17 @@ sub load_modules {
/ttyS/ and push @l, qw(serial);
/event/ and push @l, qw(wacom evdev);
}
+ if (member(N_("Synaptics Touchpad"), $mouse->{name}, $mouse->{auxmouse}{name})) {
+ push @l, qw(evdev);
+ }
eval { modules::load(@l) };
}
sub set_xfree_conf {
my ($mouse, $xfree_conf, $b_keep_auxmouse_unchanged) = @_;
-
+
+ my ($synaptics, $mouse_) = partition { $_->{name} eq N_("Synaptics Touchpad") }
+ @{[ $mouse, if_($mouse->{auxmouse}, $mouse->{auxmouse}) ]};
my @mice = map {
{
Protocol => $_->{XMOUSETYPE},
@@ -360,7 +373,7 @@ sub set_xfree_conf {
if_($_->{nbuttons} < 3, Emulate3Buttons => undef, Emulate3Timeout => 50),
if_($_->{EMULATEWHEEL}, Emulate3Buttons => undef, Emulate3Timeout => 50, EmulateWheel => undef, EmulateWheelButton => 2),
};
- } ($mouse, if_($mouse->{auxmouse}, $mouse->{auxmouse}));
+ } @$mouse_;
if (!$mouse->{auxmouse} && $b_keep_auxmouse_unchanged) {
my (undef, @l) = $xfree_conf->get_mice;
@@ -372,6 +385,12 @@ sub set_xfree_conf {
if (my @wacoms = @{$mouse->{wacom} || []}) {
$xfree_conf->set_wacoms(map { { Device => "/dev/$_", USB => m|input/event| } } @wacoms);
}
+
+ $synaptics and $xfree_conf->set_synaptics(map { {
+ Device => "/dev/$_->{device}",
+ Protocol => $_->{XMOUSETYPE},
+ Primary => $_ ne $mouse->{auxmouse},
+ } } @$synaptics);
}
sub various_xfree_conf {
@@ -394,6 +413,10 @@ sub various_xfree_conf {
output_with_perm($f, 0755, "xinput set-button-map Mouse2 1 2 3 6 7 4 5\n");
}
}
+
+ if (member(N_("Synaptics Touchpad"), $mouse->{name}, $mouse->{auxmouse}{name})) {
+ $do_pkgs->install("synaptics");
+ }
}
#- write_conf : write the mouse infos into the Xconfig files.