summaryrefslogtreecommitdiffstats
path: root/perl-install/Xconfig/xfree.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/Xconfig/xfree.pm')
-rw-r--r--perl-install/Xconfig/xfree.pm77
1 files changed, 52 insertions, 25 deletions
diff --git a/perl-install/Xconfig/xfree.pm b/perl-install/Xconfig/xfree.pm
index 43c4fe885..69c1b307e 100644
--- a/perl-install/Xconfig/xfree.pm
+++ b/perl-install/Xconfig/xfree.pm
@@ -3,22 +3,24 @@ package Xconfig::xfree; # $Id$
use diagnostics;
use strict;
-use MDK::Common;
+use common;
use Xconfig::parse;
use Xconfig::xfree3;
use Xconfig::xfree4;
use log;
+#- files are optional
sub read {
- my ($class) = @_;
- bless { xfree3 => Xconfig::xfree3->read,
- xfree4 => Xconfig::xfree4->read }, $class;
+ my ($class, $xfree3_file, $xfree4_file) = @_;
+ bless { xfree3 => Xconfig::xfree3->read($xfree3_file),
+ xfree4 => Xconfig::xfree4->read($xfree4_file) }, $class;
}
+#- files are optional
sub write {
- my ($both) = @_;
- $both->{xfree3}->write;
- $both->{xfree4}->write;
+ my ($both, $xfree3_file, $xfree4_file) = @_;
+ $both->{xfree3}->write($xfree3_file);
+ $both->{xfree4}->write($xfree4_file);
}
sub empty_config {
@@ -32,8 +34,18 @@ sub set_keyboard { set_both('set_keyboard', @_) }
sub get_mice { get_both('get_mice', @_) }
sub set_mice { set_both('set_mice', @_) }
+sub get_resolution { get_both('get_resolution', @_) }
+sub set_resolution { set_both('set_resolution', @_) }
+
+sub get_device { get_both('get_device', @_) }
+sub get_devices { get_both('get_devices', @_) }
+sub set_devices { set_both('set_devices', @_) }
+sub set_wacoms { set_both('set_wacoms', @_) }
+sub get_monitor { get_both('get_monitor', @_) }
+sub get_monitors { get_both('get_monitors', @_) }
+sub set_monitors { set_both('set_monitors', @_) }
#-##############################################################################
#- helpers
@@ -43,36 +55,51 @@ sub get_both {
my @l3 = $both->{xfree3}->$getter;
my @l4 = $both->{xfree4}->$getter;
- my @r = mapn {
+ merge_values(\@l3, \@l4);
+}
+sub set_both {
+ my ($setter, $both, @l) = @_;
+
+ $both->{xfree3}->$setter(@l);
+ $both->{xfree4}->$setter(@l);
+}
+
+sub merge_values {
+ my ($l3, $l4) = @_;
+
+ sub merge_values__hashes {
my ($h3, $h4) = @_;
+ $h3 || $h4 or return;
+ $h3 or return $h4;
+ $h4 or return $h3;
+
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->{$_};
+ if (exists $h{$_}) {
+ if (ref($h{$_}) eq 'HASH' && ref($h3->{$_}) eq 'HASH') {
+ #- needed for "Options" of Devices
+ $h{$_} = +{ %{$h3->{$_}}, %{$h{$_}} };
} else {
- $s4 eq $s3 or log::l(qq(XFree: conflicting value for $_, "$s4" and "$s3" are different));
+ 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) = @_;
+ my @r = mapn(\&merge_values__hashes, $l3, $l4);
- $both->{xfree3}->$setter(@l);
- $both->{xfree4}->$setter(@l);
+ @r == 1 ? $r[0] : @r;
}
-
-
1;