xfree86/xv: Provide a ModeSet hook

Reput all ports when the display mode or panning has been changed by
RandR code. This makes the overlays appear in the correct position
on the screen.

Signed-off-by: Ville Syrjälä <ville.syrjala@nokia.com>
Reviewed-by: Luc Verhaegen <luc.verhaegen@basyskom.de>
This commit is contained in:
Ville Syrjälä 2010-10-29 17:34:56 +03:00
parent 640c8716e0
commit f4f41c812d
2 changed files with 25 additions and 0 deletions

View File

@ -104,6 +104,7 @@ static void xf86XVClipNotify(WindowPtr pWin, int dx, int dy);
static Bool xf86XVEnterVT(int, int);
static void xf86XVLeaveVT(int, int);
static void xf86XVAdjustFrame(int index, int x, int y, int flags);
static void xf86XVModeSet(ScrnInfoPtr pScrn);
/* misc */
@ -287,6 +288,7 @@ xf86XVScreenInit(
ScreenPriv->EnterVT = pScrn->EnterVT;
ScreenPriv->LeaveVT = pScrn->LeaveVT;
ScreenPriv->AdjustFrame = pScrn->AdjustFrame;
ScreenPriv->ModeSet = pScrn->ModeSet;
pScreen->DestroyWindow = xf86XVDestroyWindow;
pScreen->WindowExposures = xf86XVWindowExposures;
@ -295,6 +297,7 @@ xf86XVScreenInit(
pScrn->LeaveVT = xf86XVLeaveVT;
if(pScrn->AdjustFrame)
pScrn->AdjustFrame = xf86XVAdjustFrame;
pScrn->ModeSet = xf86XVModeSet;
if(!xf86XVInitAdaptors(pScreen, adaptors, num))
return FALSE;
@ -1241,6 +1244,7 @@ xf86XVCloseScreen(int i, ScreenPtr pScreen)
pScrn->EnterVT = ScreenPriv->EnterVT;
pScrn->LeaveVT = ScreenPriv->LeaveVT;
pScrn->AdjustFrame = ScreenPriv->AdjustFrame;
pScrn->ModeSet = ScreenPriv->ModeSet;
for(c = 0, pa = pxvs->pAdaptors; c < pxvs->nAdaptors; c++, pa++) {
xf86XVFreeAdaptor(pa);
@ -1344,6 +1348,26 @@ xf86XVAdjustFrame(int index, int x, int y, int flags)
xf86XVReputOrStopAllPorts(pScrn);
}
static void
xf86XVModeSet(ScrnInfoPtr pScrn)
{
ScreenPtr pScreen = pScrn->pScreen;
XF86XVScreenPtr ScreenPriv;
/* Can be called before pScrn->pScreen is set */
if (!pScreen)
return;
ScreenPriv = GET_XF86XV_SCREEN(pScreen);
if (ScreenPriv->ModeSet) {
pScrn->ModeSet = ScreenPriv->ModeSet;
(*pScrn->ModeSet)(pScrn);
pScrn->ModeSet = xf86XVModeSet;
}
xf86XVReputOrStopAllPorts(pScrn);
}
/**** XvAdaptorRec fields ****/

View File

@ -44,6 +44,7 @@ typedef struct {
Bool (*EnterVT)(int, int);
void (*LeaveVT)(int, int);
GCPtr videoGC;
xf86ModeSetProc *ModeSet;
} XF86XVScreenRec, *XF86XVScreenPtr;
typedef struct {