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
77
78
|
package Xconfig::xfree; # $Id$
use diagnostics;
use strict;
use MDK::Common;
use Xconfig::parse;
use Xconfig::xfree3;
use Xconfig::xfree4;
use log;
sub read {
my ($class) = @_;
bless { xfree3 => Xconfig::xfree3->read,
xfree4 => Xconfig::xfree4->read }, $class;
}
sub write {
my ($both) = @_;
$both->{xfree3}->write;
$both->{xfree4}->write;
}
sub empty_config {
my ($class) = @_;
bless { xfree3 => Xconfig::xfree3->empty_config,
xfree4 => Xconfig::xfree4->empty_config }, $class;
}
sub get_keyboard { get_both('get_keyboard', @_) }
sub set_keyboard { set_both('set_keyboard', @_) }
sub get_mice { get_both('get_mice', @_) }
sub set_mice { set_both('set_mice', @_) }
#-##############################################################################
#- helpers
#-##############################################################################
sub get_both {
my ($getter, $both) = @_;
my @l3 = $both->{xfree3}->$getter;
my @l4 = $both->{xfree4}->$getter;
my @r = mapn {
my ($h3, $h4) = @_;
my %h = %$h4;
foreach (keys %$h3) {
if (exists $h{$_}) {
my $s4 = join(", ", deref_array($h{$_}));
my $s3 = join(", ", deref_array($h3->{$_}));
my $s3_ = join(", ", map { qq("$_") } deref_array($h3->{$_}));
if ($s4 eq $s3_) {
#- keeping the non-double-quoted value
$h{$_} = $h3->{$_};
} else {
$s4 eq $s3 or log::l(qq(XFree: conflicting value for $_, "$s4" and "$s3" are different));
}
} else {
$h{$_} = $h3->{$_};
}
}
\%h;
} \@l3, \@l4;
@r == 1 ? $r[0] : @r;
}
sub set_both {
my ($setter, $both, @l) = @_;
$both->{xfree3}->$setter(@l);
$both->{xfree4}->$setter(@l);
}
1;
|