diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index 064ff16..65430aa 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -1400,26 +1400,29 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY) if (preferred_mode) { + DisplayModePtr new_head = NULL; for (mode = output->probed_modes; mode; mode = mode->next) { - if (!strcmp (preferred_mode, mode->name)) + if (!strcmp (preferred_mode, mode->name) && !new_head) { - if (mode != output->probed_modes) - { - if (mode->prev) - mode->prev->next = mode->next; - if (mode->next) - mode->next->prev = mode->prev; - mode->next = output->probed_modes; - output->probed_modes->prev = mode; - mode->prev = NULL; - output->probed_modes = mode; - } mode->type |= M_T_PREFERRED; + new_head = mode; } else mode->type &= ~M_T_PREFERRED; } + + if (new_head) + { + if (new_head->prev) + new_head->prev->next = new_head->next; + if (new_head->next) + new_head->next->prev = new_head->prev; + new_head->next = output->probed_modes; + output->probed_modes->prev = new_head; + new_head->prev = NULL; + output->probed_modes = new_head; + } } output->initial_rotation = xf86OutputInitialRotation (output);