diff options
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | lib/Xconfig/main.pm | 2 | ||||
-rw-r--r-- | lib/Xconfig/parse.pm | 4 | ||||
-rw-r--r-- | lib/Xconfig/resolution_and_depth.pm | 25 | ||||
-rw-r--r-- | lib/Xconfig/xfree.pm | 3 |
5 files changed, 31 insertions, 7 deletions
@@ -1,3 +1,7 @@ +- XFdrake: + o set "PreferredMode" in Monitor section if the user changes the resolution + (we still do not use PreferredMode for the default resolution) + Version 0.61 - 11 September 2008 - keyboarddrake: diff --git a/lib/Xconfig/main.pm b/lib/Xconfig/main.pm index 5cf6649..5b58ffc 100644 --- a/lib/Xconfig/main.pm +++ b/lib/Xconfig/main.pm @@ -112,7 +112,7 @@ sub configure_chooser_raw { $prompt_for_resolution->(); } else { Xconfig::screen::configure($raw_X); - $may_set->('resolutions', Xconfig::resolution_and_depth::set_resolution($raw_X, $default_resolution, @other_resolutions)); + $may_set->('resolutions', Xconfig::resolution_and_depth::set_resolution($raw_X, $X->{monitors}, $default_resolution, @other_resolutions)); } } } diff --git a/lib/Xconfig/parse.pm b/lib/Xconfig/parse.pm index 283065f..1454b56 100644 --- a/lib/Xconfig/parse.pm +++ b/lib/Xconfig/parse.pm @@ -142,7 +142,7 @@ my %kind_names = ( Pointer => [ qw(Protocol Device Emulate3Buttons Emulate3Timeout EmulateWheel EmulateWheelButton) ], Mouse => [ qw(DeviceName Protocol Device AlwaysCore Emulate3Buttons Emulate3Timeout EmulateWheel EmulateWheelButton) ], # Subsection in XInput Keyboard => [ qw(Protocol Driver XkbModel XkbLayout XkbDisable) ], - Monitor => [ qw(Identifier VendorName ModelName HorizSync VertRefresh) ], + Monitor => [ qw(Identifier VendorName ModelName HorizSync VertRefresh PreferredMode) ], Device => [ qw(Identifier VendorName BoardName Chipset Driver VideoRam Screen BusID DPMS power_saver AccelMethod MonitorLayout TwinViewOrientation BIOSHotkeys RenderAccel SWCursor XaaNoOffscreenPixmaps) ], Display => [ qw(Depth Modes Virtual) ], # Subsection in Device Screen => [ qw(Identifier Driver Device Monitor DefaultDepth DefaultColorDepth) ], @@ -153,7 +153,7 @@ my %kind_names = ( WacomEraser => [ qw(Port) ], #-/ ServerLayout => [ qw(Identifier) ], ); -my @want_string = qw(Identifier DeviceName VendorName ModelName BoardName Driver Device Chipset Monitor Protocol XkbModel XkbLayout XkbOptions XkbCompat Load ModulePath BusID); +my @want_string = qw(Identifier DeviceName VendorName ModelName BoardName Driver Device Chipset Monitor Protocol XkbModel XkbLayout XkbOptions XkbCompat Load ModulePath BusID PreferredMode); %kind_names = map_each { lc $::a => [ map { lc } @$::b ] } %kind_names; @want_string = map { lc } @want_string; diff --git a/lib/Xconfig/resolution_and_depth.pm b/lib/Xconfig/resolution_and_depth.pm index 479ceda..dc3f446 100644 --- a/lib/Xconfig/resolution_and_depth.pm +++ b/lib/Xconfig/resolution_and_depth.pm @@ -214,7 +214,7 @@ sub configure { } else { $resolution = choose($in, $default_resolution, @resolutions) or return; } - set_resolution($raw_X, $resolution, @resolutions); + set_resolution_($raw_X, $monitors, $default_resolution, $resolution, @resolutions); } sub configure_auto_install { @@ -232,12 +232,17 @@ sub configure_auto_install { ($default_resolution, @resolutions) = choices($raw_X, $resolution_wanted, $card, $monitors); $default_resolution or die "you selected an unusable depth"; } - set_resolution($raw_X, $default_resolution, @resolutions); + set_resolution($raw_X, $monitors, $default_resolution, @resolutions); } sub set_resolution { - my ($raw_X, $resolution, @other) = @_; + my ($raw_X, $monitors, $resolution, @other) = @_; + set_resolution_($raw_X, $monitors, $resolution, $resolution, @other); +} +sub set_resolution_ { + my ($raw_X, $monitors, $default_resolution, $resolution, @other) = @_; + my $PreferredMode; if (!$resolution->{automatic}) { my $ratio = Xconfig::xfree::resolution2ratio($resolution, 'non-strict'); @other = uniq_ { XxY($_) } @other; @@ -245,7 +250,21 @@ sub set_resolution { @other = filter_on_ratio($ratio, @other); set_915resolution($resolution) if is_915resolution_configured(); + + if (XxY($default_resolution) ne XxY($resolution)) { + log::l("setting PreferredMode since wanted resolution (" . XxY($resolution) . ") differs from the default one (" . XxY($default_resolution) . ")"); + $PreferredMode = XxY($resolution); + } } + if ($monitors->[0]{PreferredMode} ne $PreferredMode) { + if ($PreferredMode) { + $monitors->[0]{PreferredMode} = $PreferredMode; + } else { + delete $monitors->[0]{PreferredMode}; + } + $raw_X->set_monitors(@$monitors); + } + set_default_background($resolution); my $resolutions = [ $resolution, @other ]; $raw_X->set_resolutions($resolutions); diff --git a/lib/Xconfig/xfree.pm b/lib/Xconfig/xfree.pm index f1f52c9..6b52ff5 100644 --- a/lib/Xconfig/xfree.pm +++ b/lib/Xconfig/xfree.pm @@ -345,7 +345,7 @@ sub set_synaptics { ################################################################################ # monitor ###################################################################### ################################################################################ -my @monitor_fields = qw(VendorName ModelName HorizSync VertRefresh); +my @monitor_fields = qw(VendorName ModelName HorizSync VertRefresh PreferredMode); sub get_monitors { my ($raw_X) = @_; my @raw_monitors = $raw_X->get_Sections('Monitor'); @@ -361,6 +361,7 @@ sub set_monitors { mapn { my ($raw_monitor, $monitor) = @_; raw_import_section($raw_monitor, $monitor, \@monitor_fields); + $raw_monitor->{PreferredMode}{Option} = 1 if $raw_monitor->{PreferredMode}; $raw_monitor->{ModeLine} = $monitor->{ModeLine} if $monitor->{ModeLine}; } \@raw_monitors, \@monitors; } |