summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2003-08-01 20:48:32 +0000
committerPascal Rigaux <pixel@mandriva.com>2003-08-01 20:48:32 +0000
commit0b3d57562f0ef60c905e16559f46fe64174a6839 (patch)
treef0329fcb5a739434572dc577a1bd4a3a75b0b558
parent77b45e03e0c9a231bcceb551b199162464c25f9f (diff)
downloaddrakx-0b3d57562f0ef60c905e16559f46fe64174a6839.tar
drakx-0b3d57562f0ef60c905e16559f46fe64174a6839.tar.gz
drakx-0b3d57562f0ef60c905e16559f46fe64174a6839.tar.bz2
drakx-0b3d57562f0ef60c905e16559f46fe64174a6839.tar.xz
drakx-0b3d57562f0ef60c905e16559f46fe64174a6839.zip
=> do as Chris Picton suggested
Chris Picton said (nearly one year ago :-/) : I have found the need for many low res screen resolutions for such thingas as movie playing, xmame, etc. The method XFdrake uses to enable modes is to enumerate each mode in the XF86Config file. For example (a newly created file): Subsection "Display" Depth 24 Modes "1280x960" "1152x864" "1024x768" "800x600" "640x480" EndSubsection It would be better (at least under XFree 4, which automatically provides resoltions from the monitor, if it is capable), to not limit the modes provided to the user If I use instead, the following: Subsection "Display" Depth 24 Virtual 1280 960 EndSubsection My maximum mode is exactly the same as before, but I have many more low resolution modes.
-rw-r--r--perl-install/Xconfig/parse.pm2
-rw-r--r--perl-install/Xconfig/xfree3.pm24
-rw-r--r--perl-install/Xconfig/xfree4.pm15
-rw-r--r--perl-install/Xconfig/xfreeX.pm28
4 files changed, 36 insertions, 33 deletions
diff --git a/perl-install/Xconfig/parse.pm b/perl-install/Xconfig/parse.pm
index ea1054835..6de7d8959 100644
--- a/perl-install/Xconfig/parse.pm
+++ b/perl-install/Xconfig/parse.pm
@@ -133,7 +133,7 @@ my %kind_names = (
Keyboard => [ qw(Protocol Driver XkbModel XkbLayout XkbDisable) ],
Monitor => [ qw(Identifier VendorName ModelName HorizSync VertRefresh) ],
Device => [ qw(Identifier VendorName BoardName Chipset Driver VideoRam Screen BusID DPMS power_saver) ],
- Display => [ qw(Depth Modes) ], # Subsection in Device
+ Display => [ qw(Depth Modes Virtual) ], # Subsection in Device
Screen => [ qw(Identifier Driver Device Monitor DefaultColorDepth) ],
InputDevice => [ qw(Identifier Driver Protocol Device Type Mode XkbModel XkbLayout XkbDisable Emulate3Buttons Emulate3Timeout) ],
WacomCursor => [ qw(Port) ], #-\
diff --git a/perl-install/Xconfig/xfree3.pm b/perl-install/Xconfig/xfree3.pm
index 8f61fe55a..2c753f148 100644
--- a/perl-install/Xconfig/xfree3.pm
+++ b/perl-install/Xconfig/xfree3.pm
@@ -85,6 +85,30 @@ sub set_wacoms {
sub depths { 8, 15, 16, 24, 32 }
+sub set_resolution {
+ my ($raw_X, $resolution, $o_Screen_) = @_;
+
+ foreach my $Screen ($o_Screen_ ? $o_Screen_ : $raw_X->get_screens) {
+ $Screen ||= $raw_X->get_default_screen or internal_error('no screen');
+
+ $Screen->{DefaultColorDepth} = { val => $resolution->{Depth} };
+ $Screen->{Display} = [ map {
+ my $modes = do {
+ if ($raw_X->is_fbdev($Screen)) {
+ '"default"';
+ } else {
+ my @Modes = grep {
+ if_(m/(\d+)x(\d+)/,
+ $1 <= $resolution->{X} && (!$resolution->{Y} || $2 <= $resolution->{Y}));
+ } reverse @Xconfig::xfreeX::resolutions;
+ join(" ", map { qq("$_") } @Modes);
+ }
+ };
+ { l => { Depth => { val => $_ }, Modes => { val => $modes } } };
+ } $raw_X->depths ];
+ }
+}
+
sub get_device_section_fields {
qw(VendorName BoardName Chipset VideoRam); #-);
}
diff --git a/perl-install/Xconfig/xfree4.pm b/perl-install/Xconfig/xfree4.pm
index a6b1e424d..5c2d23286 100644
--- a/perl-install/Xconfig/xfree4.pm
+++ b/perl-install/Xconfig/xfree4.pm
@@ -84,13 +84,16 @@ sub set_wacoms {
sub depths { 8, 15, 16, 24 }
sub set_resolution {
- my ($raw_X, $resolution, $Screen) = @_;
-
- $resolution = +{ %$resolution };
- #- XFree4 doesn't like depth 32, silently replacing it with 24
- $resolution->{Depth} = 24 if $resolution->{Depth} eq '32';
+ my ($raw_X, $resolution, $o_Screen_) = @_;
+
+ foreach my $Screen ($o_Screen_ ? $o_Screen_ : $raw_X->get_screens) {
+ $Screen ||= $raw_X->get_default_screen or internal_error('no screen');
- $raw_X->SUPER::set_resolution($resolution, $Screen);
+ $Screen->{DefaultColorDepth} = { val => $resolution->{Depth} eq '32' ? 24 : $resolution->{Depth} };
+ $Screen->{Display} = [ map {
+ { l => { Depth => { val => $_ }, Virtual => { val => join(' ', @$resolution{'X', 'Y'}) } } };
+ } $raw_X->depths ];
+ }
}
sub get_device_section_fields {
diff --git a/perl-install/Xconfig/xfreeX.pm b/perl-install/Xconfig/xfreeX.pm
index deb69823c..b6223a7fa 100644
--- a/perl-install/Xconfig/xfreeX.pm
+++ b/perl-install/Xconfig/xfreeX.pm
@@ -172,35 +172,11 @@ sub get_resolution {
my $depth = val($Screen->{DefaultColorDepth});
my $Display = find { !$depth || val($_->{l}{Depth}) eq $depth } @{$Screen->{Display} || []} or return {};
- val($Display->{l}{Modes}) =~ /(\d+)x(\d+)/ or return {};
+ $Display->{l}{Virtual} && val($Display->{l}{Virtual}) =~ /(\d+)\s+(\d+)/ or
+ val($Display->{l}{Modes}) =~ /(\d+)x(\d+)/ or return {};
{ X => $1, Y => $2, Depth => val($Display->{l}{Depth}) };
}
-sub set_resolution {
- my ($raw_X, $resolution, $o_Screen_) = @_;
-
- foreach my $Screen ($o_Screen_ ? $o_Screen_ : $raw_X->get_screens) {
- $Screen ||= $raw_X->get_default_screen or internal_error('no screen');
-
- $Screen->{DefaultColorDepth} = { val => $resolution->{Depth} };
- $Screen->{Display} = [ map {
- my $modes = do {
- if ($raw_X->is_fbdev($Screen)) {
- '"default"';
- } else {
- my @Modes = grep {
- if_(m/(\d+)x(\d+)/,
- $1 <= $resolution->{X} && (!$resolution->{Y} || $2 <= $resolution->{Y}));
- } reverse our @resolutions;
- join(" ", map { qq("$_") } @Modes);
- }
- };
- { l => { Depth => { val => $_ }, Modes => { val => $modes } } };
- } $raw_X->depths ];
- }
-}
-
-
#-##############################################################################
#- common to xfree3 and xfree4
#-##############################################################################