summaryrefslogtreecommitdiffstats
path: root/perl-install/standalone/mousedrake
blob: f3609b9360f531cbd0b169b5606749a3be1d6a46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/perl

use lib qw(/usr/lib/libDrakX);

use common;
use interactive;
use standalone;
use modules;
use detect_devices;
use Xconfig;
use mouse;
use c;

$::isEmbedded = ($::XID, $::CCPID) = "@ARGV" =~ /--embedded (\w+) (\w+)/;
local $_ = join '', @ARGV;

/-h/ and die "usage: mousedrake [--auto] [--testing]\n";

$::auto = /-auto/;
$::testing = /-testing/;

my $in = 'interactive'->vnew('su', 'mouse');

-r '/etc/modules.conf' and modules::mergein_conf('/etc/modules.conf');

undef $::Plug;
begin:
my ($curr_env) = Xconfig::getinfoFromXF86Config('');
my ($mouse) = mouse::detect() unless $::noauto;
my $time_tag2;

#- now try to merge $curr_env->{mouse} with $mouse.
$mouse->{XMOUSETYPE} eq $curr_env->{mouse}{XMOUSETYPE} ||
    $mouse->{XMOUSETYPE} eq 'PS/2' && ($curr_env->{mouse}{XMOUSETYPE} =~ m|PS/2| ||
				       $curr_env->{mouse}{auxmouse}{XMOUSETYPE} =~ m|PS/2|) and $mouse = $curr_env->{mouse};

$::isEmbedded and kill USR2, $::CCPID;
if (!$mouse || !$::auto) {
    $mouse ||= mouse::fullname2mouse("serial|Generic 2 Button Mouse");
    if ($::isEmbedded && $in->isa('interactive_gtk')) {
	require my_gtk;
	my $time_tag = Gtk->timeout_add(100, sub {
					    defined $::Plug && defined $::Plug->child or return 1;
					    mouse::test_mouse_standalone($mouse,$::Plug->child);
					    0;
					});
    }
    my $name = $in->ask_from_treelistf('mousedrake', _("Please, choose the type of your mouse."), '|',
				       sub { join '|', map { translate($_) } split '\|', $_[0] },
				       [ mouse::fullnames ], 
				       $mouse->{type} . '|' . $mouse->{name});
    Gtk->timeout_remove($time_tag2) if $::isEmbedded  && $in->isa('interactive_gtk');
    $name or $::isEmbedded ? do { kill(USR1, $::CCPID); goto begin } : $in->exit(0);
    my $mouse_chosen = mouse::fullname2mouse($name);
    $mouse->{type} eq $mouse_chosen->{type} && $mouse->{name} eq $mouse_chosen->{name} or $mouse = $mouse_chosen;

    if ($mouse->{device} eq "usbmouse") {
	my ($c) = grep { $_->{driver} =~ /usb-[ou]hci/ } detect_devices::pci_probe(0) or die _("no serial_usb found\n");
	eval { modules::load($c->{driver}, "serial_usb") };
    }

    $mouse->{XEMU3} = 'yes' if $mouse->{nbuttons} < 3 && (!$::noauto || $in->ask_yesorno('', _("Emulate third button?"), 1));

    $mouse->{device} = $in->ask_from_listf(_("Mouse Port"),
					   _("Please choose on which serial port your mouse is connected to."),
					   \&mouse::serial_port2text,
					   [ mouse::serial_ports ],
					   $mouse->{device},
					  ) || goto begin if $mouse->{type} eq 'serial';
}

mouse::write_conf($mouse);
-e "/var/lock/subsys/gpm" and system "service", "gpm", "restart";

$::isEmbedded ? kill(USR1, $::CCPID) : $in->exit(0);
goto begin;