This commit is contained in:
parent
d9bd344587
commit
831e6c1707
53
commit-184e571.diff
Normal file
53
commit-184e571.diff
Normal file
@ -0,0 +1,53 @@
|
||||
commit 184e571957f697f2a125dc9c9da0c7dfb92c2cd9
|
||||
Author: Matthias Hopf <mhopf@suse.de>
|
||||
Date: Tue Nov 20 13:05:26 2007 +0100
|
||||
|
||||
Adjust offsets of modes that do not fit virtual screen size.
|
||||
|
||||
Fixes memory corruption if a too small "Virtual" was specified in xorg.conf
|
||||
for the selected multi-monitor configuration.
|
||||
|
||||
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
|
||||
index 653042c..760a498 100644
|
||||
--- a/hw/xfree86/modes/xf86Crtc.c
|
||||
+++ b/hw/xfree86/modes/xf86Crtc.c
|
||||
@@ -260,6 +260,30 @@ xf86CrtcSetMode (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
|
||||
crtc->y = y;
|
||||
crtc->rotation = rotation;
|
||||
|
||||
+ /* Shift offsets that move us out of virtual size */
|
||||
+ if (x + mode->HDisplay > xf86_config->maxWidth ||
|
||||
+ y + mode->VDisplay > xf86_config->maxHeight)
|
||||
+ {
|
||||
+ if (x + mode->HDisplay > xf86_config->maxWidth)
|
||||
+ crtc->x = xf86_config->maxWidth - mode->HDisplay;
|
||||
+ if (y + mode->VDisplay > xf86_config->maxHeight)
|
||||
+ crtc->y = xf86_config->maxHeight - mode->VDisplay;
|
||||
+ if (crtc->x < 0 || crtc->y < 0)
|
||||
+ {
|
||||
+ xf86DrvMsg (scrn->scrnIndex, X_ERROR,
|
||||
+ "Mode %dx%d does not fit virtual size %dx%d - "
|
||||
+ "internal error\n", mode->HDisplay, mode->VDisplay,
|
||||
+ xf86_config->maxWidth, xf86_config->maxHeight);
|
||||
+ goto done;
|
||||
+ }
|
||||
+ xf86DrvMsg (scrn->scrnIndex, X_ERROR,
|
||||
+ "Mode %dx%d+%d+%d does not fit virtual size %dx%d - "
|
||||
+ "offset updated to +%d+%d\n",
|
||||
+ mode->HDisplay, mode->VDisplay, x, y,
|
||||
+ xf86_config->maxWidth, xf86_config->maxHeight,
|
||||
+ crtc->x, crtc->y);
|
||||
+ }
|
||||
+
|
||||
/* XXX short-circuit changes to base location only */
|
||||
|
||||
/* Pass our mode to the outputs and the CRTC to give them a chance to
|
||||
@@ -301,7 +325,7 @@ xf86CrtcSetMode (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
|
||||
/* Set up the DPLL and any output state that needs to adjust or depend
|
||||
* on the DPLL.
|
||||
*/
|
||||
- crtc->funcs->mode_set(crtc, mode, adjusted_mode, x, y);
|
||||
+ crtc->funcs->mode_set(crtc, mode, adjusted_mode, crtc->x, crtc->y);
|
||||
for (i = 0; i < xf86_config->num_output; i++)
|
||||
{
|
||||
xf86OutputPtr output = xf86_config->output[i];
|
25
commit-c6c284e.diff
Normal file
25
commit-c6c284e.diff
Normal file
@ -0,0 +1,25 @@
|
||||
commit c6c284e64b1f537a3243856cf78cf3f2324e4c2b
|
||||
Author: Matthias Hopf <mhopf@suse.de>
|
||||
Date: Mon Nov 26 15:38:20 2007 +0100
|
||||
|
||||
Initialize Mode with 0 in xf86RandRModeConvert.
|
||||
|
||||
Asking for trouble if non-initialized values contain random data.
|
||||
|
||||
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
|
||||
index c1a06b2..61a7db3 100644
|
||||
--- a/hw/xfree86/modes/xf86RandR12.c
|
||||
+++ b/hw/xfree86/modes/xf86RandR12.c
|
||||
@@ -683,11 +683,8 @@ xf86RandRModeConvert (ScrnInfoPtr scrn,
|
||||
RRModePtr randr_mode,
|
||||
DisplayModePtr mode)
|
||||
{
|
||||
- mode->prev = NULL;
|
||||
- mode->next = NULL;
|
||||
- mode->name = NULL;
|
||||
+ memset(mode, 0, sizeof(DisplayModeRec));
|
||||
mode->status = MODE_OK;
|
||||
- mode->type = 0;
|
||||
|
||||
mode->Clock = randr_mode->mode.dotClock / 1000;
|
||||
|
27
commit-f6401f9.diff
Normal file
27
commit-f6401f9.diff
Normal file
@ -0,0 +1,27 @@
|
||||
commit f6401f944d327cc5d9a7ee0bbdf4f7fc8eaa31e8
|
||||
Author: Matthias Hopf <mhopf@suse.de>
|
||||
Date: Fri Nov 23 16:12:49 2007 +0100
|
||||
|
||||
Don't segfault if referring to a relative output where no modes survived.
|
||||
|
||||
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
|
||||
index 5a1ed8c..8595d96 100644
|
||||
--- a/hw/xfree86/modes/xf86Crtc.c
|
||||
+++ b/hw/xfree86/modes/xf86Crtc.c
|
||||
@@ -1079,6 +1079,16 @@ xf86InitialOutputPositions (ScrnInfoPtr scrn, DisplayModePtr *modes)
|
||||
any_set = TRUE;
|
||||
continue;
|
||||
}
|
||||
+ if (!modes[or])
|
||||
+ {
|
||||
+ xf86DrvMsg (scrn->scrnIndex, X_ERROR,
|
||||
+ "Cannot position output %s relative to output %s without modes\n",
|
||||
+ output->name, relative_name);
|
||||
+ output->initial_x = 0;
|
||||
+ output->initial_y = 0;
|
||||
+ any_set = TRUE;
|
||||
+ continue;
|
||||
+ }
|
||||
if (relative->initial_x == POSITION_UNSET)
|
||||
{
|
||||
keep_going = TRUE;
|
24
commit-f7dd0c7.diff
Normal file
24
commit-f7dd0c7.diff
Normal file
@ -0,0 +1,24 @@
|
||||
commit f7dd0c72b8f861f4d5443a43d1013e3fe3db43ca
|
||||
Author: Matthias Hopf <mhopf@suse.de>
|
||||
Date: Mon Nov 12 15:11:03 2007 +0100
|
||||
|
||||
Only clear crtc of output if it is the one we're actually working on.
|
||||
|
||||
Upon recreation of the RandR internal data structures in RRCrtcNotify() the
|
||||
crtc of an output could be NULLed if the crtc was shared (cloned) between two
|
||||
outputs and one of them got another crtc assigned.
|
||||
|
||||
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
|
||||
index db5007e..43cfb29 100644
|
||||
--- a/randr/rrcrtc.c
|
||||
+++ b/randr/rrcrtc.c
|
||||
@@ -150,7 +150,8 @@ RRCrtcNotify (RRCrtcPtr crtc,
|
||||
break;
|
||||
if (i == numOutputs)
|
||||
{
|
||||
- crtc->outputs[j]->crtc = NULL;
|
||||
+ if (crtc->outputs[j]->crtc == crtc)
|
||||
+ crtc->outputs[j]->crtc = NULL;
|
||||
RROutputChanged (crtc->outputs[j], FALSE);
|
||||
RRCrtcChanged (crtc, FALSE);
|
||||
}
|
23
commit-fa19e84.diff
Normal file
23
commit-fa19e84.diff
Normal file
@ -0,0 +1,23 @@
|
||||
commit fa19e84714aa84a2f2e817e363d6440349d0b619
|
||||
Author: Matthias Hopf <mhopf@suse.de>
|
||||
Date: Tue Nov 20 16:54:50 2007 +0100
|
||||
|
||||
Fix initial placement of LeftOf and Above.
|
||||
|
||||
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
|
||||
index 760a498..5a1ed8c 100644
|
||||
--- a/hw/xfree86/modes/xf86Crtc.c
|
||||
+++ b/hw/xfree86/modes/xf86Crtc.c
|
||||
@@ -1094,10 +1094,10 @@ xf86InitialOutputPositions (ScrnInfoPtr scrn, DisplayModePtr *modes)
|
||||
output->initial_x += xf86ModeWidth (modes[or], relative->initial_rotation);
|
||||
break;
|
||||
case OPTION_ABOVE:
|
||||
- output->initial_y -= xf86ModeHeight (modes[or], relative->initial_rotation);
|
||||
+ output->initial_y -= xf86ModeHeight (modes[o], relative->initial_rotation);
|
||||
break;
|
||||
case OPTION_LEFT_OF:
|
||||
- output->initial_x -= xf86ModeWidth (modes[or], relative->initial_rotation);
|
||||
+ output->initial_x -= xf86ModeWidth (modes[o], relative->initial_rotation);
|
||||
break;
|
||||
default:
|
||||
break;
|
@ -1,3 +1,17 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Nov 27 19:03:27 CET 2007 - sndirsch@suse.de
|
||||
|
||||
- commit-184e571.diff
|
||||
* Adjust offsets of modes that do not fit virtual screen size.
|
||||
- commit-c6c284e.diff
|
||||
* Initialize Mode with 0 in xf86RandRModeConvert.
|
||||
- commit-f6401f9.diff
|
||||
* Don't segfault if referring to a relative output where no modes survived.
|
||||
- commit-f7dd0c7.diff
|
||||
* Only clear crtc of output if it is the one we're actually working on.
|
||||
- commit-fa19e84.diff
|
||||
* Fix initial placement of LeftOf and Above.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Nov 22 23:01:03 CET 2007 - sndirsch@suse.de
|
||||
|
||||
|
@ -21,7 +21,7 @@ BuildRequires: libjpeg-devel
|
||||
Url: http://xorg.freedesktop.org/
|
||||
%define EXPERIMENTAL 0
|
||||
Version: 7.3
|
||||
Release: 31
|
||||
Release: 34
|
||||
License: X11/MIT
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
Group: System/X11/Servers/XF86_4
|
||||
@ -71,6 +71,8 @@ Patch32: acpi_events.diff
|
||||
Patch34: p_pci-off-by-one.diff.ia64
|
||||
Patch36: libdrm.diff
|
||||
%if %vnc
|
||||
### Dan Nicholson <dbn.lists@gmail.com>
|
||||
#http://www.linuxfromscratch.org/~dnicholson/patches/xorg-server-1.4-vnc.patch
|
||||
Patch39: xorg-server-1.4-vnc.patch
|
||||
Patch40: xorg-server-1.4-vnc-fix.patch
|
||||
Patch43: xorg-server-1.4-vnc-64bit.diff
|
||||
@ -89,6 +91,11 @@ Patch83: ia64linuxPciInit.diff
|
||||
Patch84: commit-feac075.diff
|
||||
Patch85: commit-29e0e18.diff
|
||||
Patch86: mfb_without_xorg.diff
|
||||
Patch87: commit-c6c284e.diff
|
||||
Patch88: commit-f6401f9.diff
|
||||
Patch89: commit-184e571.diff
|
||||
Patch90: commit-fa19e84.diff
|
||||
Patch91: commit-f7dd0c7.diff
|
||||
|
||||
%description
|
||||
This package contains the X.Org Server.
|
||||
@ -207,6 +214,11 @@ popd
|
||||
%patch84 -p1
|
||||
%patch85 -p1
|
||||
%patch86 -p0
|
||||
%patch87 -p1
|
||||
%patch88 -p1
|
||||
%patch89 -p1
|
||||
%patch90 -p1
|
||||
%patch91 -p1
|
||||
|
||||
%build
|
||||
pushd xorg-docs-*
|
||||
@ -537,6 +549,17 @@ exit 0
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Tue Nov 27 2007 - sndirsch@suse.de
|
||||
- commit-184e571.diff
|
||||
* Adjust offsets of modes that do not fit virtual screen size.
|
||||
- commit-c6c284e.diff
|
||||
* Initialize Mode with 0 in xf86RandRModeConvert.
|
||||
- commit-f6401f9.diff
|
||||
* Don't segfault if referring to a relative output where no modes survived.
|
||||
- commit-f7dd0c7.diff
|
||||
* Only clear crtc of output if it is the one we're actually working on.
|
||||
- commit-fa19e84.diff
|
||||
* Fix initial placement of LeftOf and Above.
|
||||
* Thu Nov 22 2007 - sndirsch@suse.de
|
||||
- pixman.diff no longer required
|
||||
* Sun Nov 18 2007 - sndirsch@suse.de
|
||||
|
Loading…
Reference in New Issue
Block a user