diff options
Diffstat (limited to 'perl-install/install_steps_gtk.pm')
-rw-r--r-- | perl-install/install_steps_gtk.pm | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/perl-install/install_steps_gtk.pm b/perl-install/install_steps_gtk.pm index 583fb8a47..ebb849d39 100644 --- a/perl-install/install_steps_gtk.pm +++ b/perl-install/install_steps_gtk.pm @@ -163,15 +163,21 @@ sub selectMouse { local $ugtk2::grab = 1; #- unsure a crazy mouse don't go wild clicking everywhere while (1) { - log::l("telling X server to use another mouse"); - eval { modules::load('serial') } if $mouse->{device} =~ /ttyS/; - - if (!$::testing) { - devices::make($mouse->{device}); - symlinkf($mouse->{device}, "/dev/mouse"); - c::setMouseLive($ENV{DISPLAY}, mouse::xmouse2xId($mouse->{XMOUSETYPE}), $mouse->{nbuttons} < 3); + my $xId = mouse::xmouse2xId($mouse->{XMOUSETYPE}); + my $x_protocol_changed = $old{device} ne $mouse->{device} || $xId != mouse::xmouse2xId($old{XMOUSETYPE}); + if ($x_protocol_changed) { + log::l("telling X server to use another mouse"); + eval { modules::load('serial') } if $mouse->{device} =~ /ttyS/; + + if (!$::testing) { + devices::make($mouse->{device}); + symlinkf($mouse->{device}, "/dev/mouse"); + c::setMouseLive($ENV{DISPLAY}, $xId, $mouse->{nbuttons} < 3); + } } - mouse::test_mouse_install($mouse) and return; + mouse::test_mouse_install($mouse, $x_protocol_changed) and return; + + %old = %$mouse; $o->SUPER::selectMouse(1); $mouse = $o->{mouse}; } |