From c356d5298f18cd103ef7caad015d98d2022044ac Mon Sep 17 00:00:00 2001 From: marha Date: Wed, 23 Jun 2010 06:38:04 +0000 Subject: xserver git update 23/6/2010 --- xorg-server/composite/compinit.c | 12 +++++++ xorg-server/composite/compint.h | 17 +++++++++- xorg-server/composite/compwindow.c | 68 +++++++++++++++++++++++++++++++++----- 3 files changed, 87 insertions(+), 10 deletions(-) (limited to 'xorg-server/composite') diff --git a/xorg-server/composite/compinit.c b/xorg-server/composite/compinit.c index 389cf0bfb..d3910c4b4 100644 --- a/xorg-server/composite/compinit.c +++ b/xorg-server/composite/compinit.c @@ -66,6 +66,9 @@ compCloseScreen (int index, ScreenPtr pScreen) pScreen->ChangeWindowAttributes = cs->ChangeWindowAttributes; pScreen->ReparentWindow = cs->ReparentWindow; pScreen->ConfigNotify = cs->ConfigNotify; + pScreen->MoveWindow = cs->MoveWindow; + pScreen->ResizeWindow = cs->ResizeWindow; + pScreen->ChangeBorderWidth = cs->ChangeBorderWidth; pScreen->ClipNotify = cs->ClipNotify; pScreen->UnrealizeWindow = cs->UnrealizeWindow; @@ -366,6 +369,15 @@ compScreenInit (ScreenPtr pScreen) cs->ConfigNotify = pScreen->ConfigNotify; pScreen->ConfigNotify = compConfigNotify; + cs->MoveWindow = pScreen->MoveWindow; + pScreen->MoveWindow = compMoveWindow; + + cs->ResizeWindow = pScreen->ResizeWindow; + pScreen->ResizeWindow = compResizeWindow; + + cs->ChangeBorderWidth = pScreen->ChangeBorderWidth; + pScreen->ChangeBorderWidth = compChangeBorderWidth; + cs->ReparentWindow = pScreen->ReparentWindow; pScreen->ReparentWindow = compReparentWindow; diff --git a/xorg-server/composite/compint.h b/xorg-server/composite/compint.h index e02d22c6b..8213c1605 100644 --- a/xorg-server/composite/compint.h +++ b/xorg-server/composite/compint.h @@ -127,9 +127,14 @@ typedef struct _CompScreen { UnrealizeWindowProcPtr UnrealizeWindow; ClipNotifyProcPtr ClipNotify; /* - * Called from ConfigureWindow. + * Called from ConfigureWindow, these + * three track changes to the offscreen storage + * geometry */ ConfigNotifyProcPtr ConfigNotify; + MoveWindowProcPtr MoveWindow; + ResizeWindowProcPtr ResizeWindow; + ChangeBorderWidthProcPtr ChangeBorderWidth; /* * Reparenting has an effect on Subwindows redirect */ @@ -280,6 +285,16 @@ compUnrealizeWindow (WindowPtr pWin); void compClipNotify (WindowPtr pWin, int dx, int dy); +void +compMoveWindow (WindowPtr pWin, int x, int y, WindowPtr pSib, VTKind kind); + +void +compResizeWindow (WindowPtr pWin, int x, int y, + unsigned int w, unsigned int h, WindowPtr pSib); + +void +compChangeBorderWidth (WindowPtr pWin, unsigned int border_width); + void compReparentWindow (WindowPtr pWin, WindowPtr pPriorParent); diff --git a/xorg-server/composite/compwindow.c b/xorg-server/composite/compwindow.c index 82f9b4cfd..0efae97eb 100644 --- a/xorg-server/composite/compwindow.c +++ b/xorg-server/composite/compwindow.c @@ -334,6 +334,65 @@ compImplicitRedirect (WindowPtr pWin, WindowPtr pParent) return FALSE; } +static void compFreeOldPixmap(WindowPtr pWin) +{ + ScreenPtr pScreen = pWin->drawable.pScreen; + if (pWin->redirectDraw != RedirectDrawNone) + { + CompWindowPtr cw = GetCompWindow (pWin); + if (cw->pOldPixmap) + { + (*pScreen->DestroyPixmap) (cw->pOldPixmap); + cw->pOldPixmap = NullPixmap; + } + } +} +void +compMoveWindow (WindowPtr pWin, int x, int y, WindowPtr pSib, VTKind kind) +{ + ScreenPtr pScreen = pWin->drawable.pScreen; + CompScreenPtr cs = GetCompScreen (pScreen); + + pScreen->MoveWindow = cs->MoveWindow; + (*pScreen->MoveWindow) (pWin, x, y, pSib, kind); + cs->MoveWindow = pScreen->MoveWindow; + pScreen->MoveWindow = compMoveWindow; + + compFreeOldPixmap(pWin); + compCheckTree (pScreen); +} + +void +compResizeWindow (WindowPtr pWin, int x, int y, + unsigned int w, unsigned int h, WindowPtr pSib) +{ + ScreenPtr pScreen = pWin->drawable.pScreen; + CompScreenPtr cs = GetCompScreen (pScreen); + + pScreen->ResizeWindow = cs->ResizeWindow; + (*pScreen->ResizeWindow) (pWin, x, y, w, h, pSib); + cs->ResizeWindow = pScreen->ResizeWindow; + pScreen->ResizeWindow = compResizeWindow; + + compFreeOldPixmap(pWin); + compCheckTree (pWin->drawable.pScreen); +} + +void +compChangeBorderWidth (WindowPtr pWin, unsigned int bw) +{ + ScreenPtr pScreen = pWin->drawable.pScreen; + CompScreenPtr cs = GetCompScreen (pScreen); + + pScreen->ChangeBorderWidth = cs->ChangeBorderWidth; + (*pScreen->ChangeBorderWidth) (pWin, bw); + cs->ChangeBorderWidth = pScreen->ChangeBorderWidth; + pScreen->ChangeBorderWidth = compChangeBorderWidth; + + compFreeOldPixmap(pWin); + compCheckTree (pWin->drawable.pScreen); +} + void compReparentWindow (WindowPtr pWin, WindowPtr pPriorParent) { @@ -705,7 +764,6 @@ compConfigNotify(WindowPtr pWin, int x, int y, int w, int h, CompScreenPtr cs = GetCompScreen (pScreen); Bool ret = 0; WindowPtr pParent = pWin->parent; - CompWindowPtr cw; int draw_x, draw_y; Bool alloc_ret; @@ -728,14 +786,6 @@ compConfigNotify(WindowPtr pWin, int x, int y, int w, int h, draw_x = pParent->drawable.x + x + bw; draw_y = pParent->drawable.y + y + bw; alloc_ret = compReallocPixmap (pWin, draw_x, draw_y, w, h, bw); - - cw = GetCompWindow (pWin); - if (cw->pOldPixmap) - { - (*pScreen->DestroyPixmap) (cw->pOldPixmap); - cw->pOldPixmap = NullPixmap; - } - compCheckTree (pScreen); if (alloc_ret == FALSE) return BadAlloc; -- cgit v1.2.3