forked from pool/xorg-x11-server
131 lines
4.1 KiB
Diff
131 lines
4.1 KiB
Diff
commit feac0759522cbdc3e61ccfa373df735903c5cb27
|
|
Author: Keith Packard <keithp@koto.keithp.com>
|
|
Date: Wed Oct 17 11:42:28 2007 +0800
|
|
|
|
Make config file preferred mode override monitor preferred mode.
|
|
|
|
Add a new even-more-preferred bit to each mode which is used to make config
|
|
file preferences selected instead of the monitor preferred mode.
|
|
|
|
diff --git a/hw/xfree86/common/xf86str.h b/hw/xfree86/common/xf86str.h
|
|
index 0365ddd..af98b4f 100644
|
|
--- a/hw/xfree86/common/xf86str.h
|
|
+++ b/hw/xfree86/common/xf86str.h
|
|
@@ -142,6 +142,7 @@ typedef enum {
|
|
# define M_T_DEFAULT 0x10 /* (VESA) default modes */
|
|
# define M_T_USERDEF 0x20 /* One of the modes from the config file */
|
|
# define M_T_DRIVER 0x40 /* Supplied by the driver (EDID, etc) */
|
|
+# define M_T_USERPREF 0x80 /* mode preferred by the user config */
|
|
|
|
/* Video mode */
|
|
typedef struct _DisplayModeRec {
|
|
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
|
|
index f589b5a..0a48d5b 100644
|
|
--- a/hw/xfree86/modes/xf86Crtc.c
|
|
+++ b/hw/xfree86/modes/xf86Crtc.c
|
|
@@ -711,7 +711,8 @@ xf86DefaultMode (xf86OutputPtr output, int width, int height)
|
|
for (mode = output->probed_modes; mode; mode = mode->next)
|
|
{
|
|
int dpi;
|
|
- int preferred = (mode->type & M_T_PREFERRED) != 0;
|
|
+ int preferred = (((mode->type & M_T_PREFERRED) != 0) +
|
|
+ ((mode->type & M_T_USERPREF) != 0));
|
|
int diff;
|
|
|
|
if (xf86ModeWidth (mode, output->initial_rotation) > width ||
|
|
@@ -1415,7 +1416,7 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
|
|
mode->prev = NULL;
|
|
output->probed_modes = mode;
|
|
}
|
|
- mode->type |= M_T_PREFERRED;
|
|
+ mode->type |= (M_T_PREFERRED|M_T_USERPREF);
|
|
}
|
|
else
|
|
mode->type &= ~M_T_PREFERRED;
|
|
@@ -1532,6 +1533,7 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
|
|
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
|
|
int o, c;
|
|
DisplayModePtr target_mode = NULL;
|
|
+ int target_preferred = 0;
|
|
Rotation target_rotation = RR_Rotate_0;
|
|
xf86CrtcPtr *crtcs;
|
|
DisplayModePtr *modes;
|
|
@@ -1572,43 +1574,34 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
|
|
}
|
|
|
|
/*
|
|
- * Let outputs with preferred modes drive screen size
|
|
+ * User preferred > preferred > other modes
|
|
*/
|
|
for (o = 0; o < config->num_output; o++)
|
|
{
|
|
- xf86OutputPtr output = config->output[o];
|
|
+ xf86OutputPtr output = config->output[o];
|
|
+ DisplayModePtr default_mode;
|
|
+ int default_preferred;
|
|
|
|
- if (enabled[o] &&
|
|
- xf86OutputHasPreferredMode (output, width, height))
|
|
+ if (!enabled[o])
|
|
+ continue;
|
|
+ default_mode = xf86DefaultMode (output, width, height);
|
|
+ if (!default_mode)
|
|
+ continue;
|
|
+ default_preferred = (((default_mode->type & M_T_PREFERRED) != 0) +
|
|
+ ((default_mode->type & M_T_USERPREF) != 0));
|
|
+ if (default_preferred > target_preferred || !target_mode)
|
|
{
|
|
- target_mode = xf86DefaultMode (output, width, height);
|
|
+ target_mode = default_mode;
|
|
+ target_preferred = default_preferred;
|
|
target_rotation = output->initial_rotation;
|
|
- if (target_mode)
|
|
- {
|
|
- modes[o] = target_mode;
|
|
- config->compat_output = o;
|
|
- break;
|
|
- }
|
|
- }
|
|
- }
|
|
- if (!target_mode)
|
|
- {
|
|
- for (o = 0; o < config->num_output; o++)
|
|
- {
|
|
- xf86OutputPtr output = config->output[o];
|
|
- if (enabled[o])
|
|
- {
|
|
- target_mode = xf86DefaultMode (output, width, height);
|
|
- target_rotation = output->initial_rotation;
|
|
- if (target_mode)
|
|
- {
|
|
- modes[o] = target_mode;
|
|
- config->compat_output = o;
|
|
- break;
|
|
- }
|
|
- }
|
|
+ config->compat_output = o;
|
|
}
|
|
}
|
|
+ if (target_mode)
|
|
+ modes[config->compat_output] = target_mode;
|
|
+ /*
|
|
+ * Fill in other output modes
|
|
+ */
|
|
for (o = 0; o < config->num_output; o++)
|
|
{
|
|
xf86OutputPtr output = config->output[o];
|
|
diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h
|
|
index 9693e12..4c843cd 100644
|
|
--- a/hw/xfree86/modes/xf86Crtc.h
|
|
+++ b/hw/xfree86/modes/xf86Crtc.h
|
|
@@ -39,6 +39,9 @@
|
|
#ifndef M_T_DRIVER
|
|
#define M_T_DRIVER 0x40
|
|
#endif
|
|
+#ifndef M_T_USERPREF
|
|
+#define M_T_USERPREF 0x80
|
|
+#endif
|
|
#ifndef HARDWARE_CURSOR_ARGB
|
|
#define HARDWARE_CURSOR_ARGB 0x00004000
|
|
#endif
|