From 61255ac1ae0fa438b04d91aead68424df0360bd2 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Mon, 10 Jun 2019 12:01:05 +0200 Subject: Window.c: fix: report correct window on icon window creation --- nx-X11/programs/Xserver/hw/nxagent/Screen.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'nx-X11/programs/Xserver/hw') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c index 9ba217c8f..ff6d9fd7e 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c @@ -404,11 +404,11 @@ Window nxagentCreateIconWindow(void) if (nxagentReportWindowIds) { - fprintf (stderr, "NXAGENT_WINDOW_ID: ICON_WINDOW,WID:[0x%x]\n", nxagentIconWindow); + fprintf (stderr, "NXAGENT_WINDOW_ID: ICON_WINDOW,WID:[0x%x]\n", w); } #ifdef TEST fprintf(stderr, "nxagentCreateIconWindow: Created new icon window with id [0x%x].\n", - nxagentIconWindow); + w); #endif /* -- cgit v1.2.3 From d98eeec0225fd729cd4f0f18da8adfb1f4c496fa Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Mon, 10 Jun 2019 12:04:20 +0200 Subject: Screen.c: report both created windows (and with the right name) --- nx-X11/programs/Xserver/hw/nxagent/Screen.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'nx-X11/programs/Xserver/hw') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c index ff6d9fd7e..6bbe25e4d 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c @@ -1776,6 +1776,11 @@ N/A nxagentDefaultVisual(pScreen), valuemask, &attributes); + if (nxagentReportWindowIds) + { + fprintf (stderr, "NXAGENT_WINDOW_ID: SCREEN_WINDOW:[%d],WID:[0x%x]\n", pScreen -> myNum, nxagentDefaultWindows[pScreen->myNum]); + } + if (nxagentOption(Rootless) == 0) { valuemask = CWEventMask; @@ -1791,12 +1796,12 @@ N/A 0, 0, InputOnly, nxagentDefaultVisual(pScreen), valuemask , &attributes); + if (nxagentReportWindowIds) + { + fprintf (stderr, "NXAGENT_WINDOW_ID: INPUT_WINDOW:[%d],WID:[0x%x]\n", pScreen -> myNum, nxagentInputWindows[pScreen->myNum]); + } } - if (nxagentReportWindowIds) - { - fprintf (stderr, "NXAGENT_WINDOW_ID: SCREEN_WINDOW:[%d],WID:[0x%x]\n", pScreen -> myNum, nxagentInputWindows[pScreen->myNum]); - } #ifdef TEST fprintf(stderr, "nxagentOpenScreen: Created new default window with id [0x%x].\n", nxagentDefaultWindows[pScreen->myNum]); -- cgit v1.2.3 From 8365ce463e696ee1a0817f2a7808c48d43004ed2 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Mon, 10 Jun 2019 12:05:24 +0200 Subject: Screen.c: whitespace/formatting fixes --- nx-X11/programs/Xserver/hw/nxagent/Screen.c | 43 +++++++++++++++-------------- 1 file changed, 22 insertions(+), 21 deletions(-) (limited to 'nx-X11/programs/Xserver/hw') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c index 6bbe25e4d..bcb0c2661 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c @@ -404,7 +404,7 @@ Window nxagentCreateIconWindow(void) if (nxagentReportWindowIds) { - fprintf (stderr, "NXAGENT_WINDOW_ID: ICON_WINDOW,WID:[0x%x]\n", w); + fprintf(stderr, "NXAGENT_WINDOW_ID: ICON_WINDOW,WID:[0x%x]\n", w); } #ifdef TEST fprintf(stderr, "nxagentCreateIconWindow: Created new icon window with id [0x%x].\n", @@ -1778,28 +1778,29 @@ N/A if (nxagentReportWindowIds) { - fprintf (stderr, "NXAGENT_WINDOW_ID: SCREEN_WINDOW:[%d],WID:[0x%x]\n", pScreen -> myNum, nxagentDefaultWindows[pScreen->myNum]); + fprintf(stderr, "NXAGENT_WINDOW_ID: SCREEN_WINDOW:[%d],WID:[0x%x]\n", pScreen -> myNum, nxagentDefaultWindows[pScreen->myNum]); } - if (nxagentOption(Rootless) == 0) - { - valuemask = CWEventMask; - mask = PointerMotionMask; - attributes.event_mask = mask; - - nxagentInputWindows[pScreen -> myNum] = - XCreateWindow(nxagentDisplay, - nxagentDefaultWindows[pScreen -> myNum], - 0, 0, - nxagentOption(Width), - nxagentOption(Height), - 0, 0, InputOnly, - nxagentDefaultVisual(pScreen), - valuemask , &attributes); - if (nxagentReportWindowIds) - { - fprintf (stderr, "NXAGENT_WINDOW_ID: INPUT_WINDOW:[%d],WID:[0x%x]\n", pScreen -> myNum, nxagentInputWindows[pScreen->myNum]); - } + if (nxagentOption(Rootless) == 0) + { + valuemask = CWEventMask; + mask = PointerMotionMask; + attributes.event_mask = mask; + + nxagentInputWindows[pScreen -> myNum] = + XCreateWindow(nxagentDisplay, + nxagentDefaultWindows[pScreen -> myNum], + 0, 0, + nxagentOption(Width), + nxagentOption(Height), + 0, 0, InputOnly, + nxagentDefaultVisual(pScreen), + valuemask , &attributes); + + if (nxagentReportWindowIds) + { + fprintf(stderr, "NXAGENT_WINDOW_ID: INPUT_WINDOW:[%d],WID:[0x%x]\n", pScreen -> myNum, nxagentInputWindows[pScreen->myNum]); + } } #ifdef TEST -- cgit v1.2.3 From 0e496e5d1830670e273df54adedd8e5b5d68ef92 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Mon, 10 Jun 2019 12:06:31 +0200 Subject: Screen.c: use consistent spacing on pointer references --- nx-X11/programs/Xserver/hw/nxagent/Screen.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'nx-X11/programs/Xserver/hw') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c index bcb0c2661..432bc1b37 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c @@ -1778,7 +1778,7 @@ N/A if (nxagentReportWindowIds) { - fprintf(stderr, "NXAGENT_WINDOW_ID: SCREEN_WINDOW:[%d],WID:[0x%x]\n", pScreen -> myNum, nxagentDefaultWindows[pScreen->myNum]); + fprintf(stderr, "NXAGENT_WINDOW_ID: SCREEN_WINDOW:[%d],WID:[0x%x]\n", pScreen->myNum, nxagentDefaultWindows[pScreen->myNum]); } if (nxagentOption(Rootless) == 0) @@ -1787,9 +1787,9 @@ N/A mask = PointerMotionMask; attributes.event_mask = mask; - nxagentInputWindows[pScreen -> myNum] = + nxagentInputWindows[pScreen->myNum] = XCreateWindow(nxagentDisplay, - nxagentDefaultWindows[pScreen -> myNum], + nxagentDefaultWindows[pScreen->myNum], 0, 0, nxagentOption(Width), nxagentOption(Height), @@ -1799,7 +1799,7 @@ N/A if (nxagentReportWindowIds) { - fprintf(stderr, "NXAGENT_WINDOW_ID: INPUT_WINDOW:[%d],WID:[0x%x]\n", pScreen -> myNum, nxagentInputWindows[pScreen->myNum]); + fprintf(stderr, "NXAGENT_WINDOW_ID: INPUT_WINDOW:[%d],WID:[0x%x]\n", pScreen->myNum, nxagentInputWindows[pScreen->myNum]); } } -- cgit v1.2.3 From d9b1272fbd6c5228d75a68a393b098e039c11ab2 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Mon, 10 Jun 2019 12:09:16 +0200 Subject: Screen.c: more TEST output --- nx-X11/programs/Xserver/hw/nxagent/Screen.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'nx-X11/programs/Xserver/hw') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c index 432bc1b37..8568562c2 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c @@ -1781,6 +1781,11 @@ N/A fprintf(stderr, "NXAGENT_WINDOW_ID: SCREEN_WINDOW:[%d],WID:[0x%x]\n", pScreen->myNum, nxagentDefaultWindows[pScreen->myNum]); } + #ifdef TEST + fprintf(stderr, "nxagentOpenScreen: Created new default window for screen [%d] with id [0x%x].\n", + pScreen->myNum, nxagentDefaultWindows[pScreen->myNum]); + #endif + if (nxagentOption(Rootless) == 0) { valuemask = CWEventMask; @@ -1801,12 +1806,12 @@ N/A { fprintf(stderr, "NXAGENT_WINDOW_ID: INPUT_WINDOW:[%d],WID:[0x%x]\n", pScreen->myNum, nxagentInputWindows[pScreen->myNum]); } - } - #ifdef TEST - fprintf(stderr, "nxagentOpenScreen: Created new default window with id [0x%x].\n", - nxagentDefaultWindows[pScreen->myNum]); - #endif + #ifdef TEST + fprintf(stderr, "nxagentOpenScreen: Created new input window for screen [%d] with id [0x%x].\n", + pScreen->myNum, nxagentInputWindows[pScreen->myNum]); + #endif + } /* * Setting WM_CLASS to "X2GoAgent" when running in X2Go Agent mode -- cgit v1.2.3 From 4b19c4975d5cfb6db0428870d5bf61b8ccb0ae64 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Mon, 10 Jun 2019 15:21:45 +0200 Subject: Clipboard.c: fix wrong variable being printed --- nx-X11/programs/Xserver/hw/nxagent/Clipboard.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nx-X11/programs/Xserver/hw') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c index 13cfd81e6..f3c6cb1ad 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c @@ -305,7 +305,7 @@ void nxagentPrintClipboardStat(char *header) fprintf(stderr, " lastClientSelection (Atom) [% 4d][%s]\n", lastClientSelection, NameForAtom(lastClientSelection)); fprintf(stderr, " lastClientTarget (Atom) [% 4d][%s]\n", lastClientTarget, NameForAtom(lastClientTarget)); fprintf(stderr, " lastClientTime (Time) [%u]\n", lastServerTime); - fprintf(stderr, " lastClientReqTime (Time) [%u]\n", lastServerTime); + fprintf(stderr, " lastClientReqTime (Time) [%u]\n", lastServerReqTime); fprintf(stderr, " lastClientPropertySize (unsigned long) [%lu]\n", lastClientPropertySize); fprintf(stderr, " lastClientStage (ClientSelectionStage) [%d][%s]\n", lastClientStage, GetClientSelectionStageString(lastClientStage)); -- cgit v1.2.3 From 9739c7009513fc6e72265da40ca2e488152fbda2 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Mon, 10 Jun 2019 15:23:55 +0200 Subject: Clipboard.c: Scope improvements --- nx-X11/programs/Xserver/hw/nxagent/Clipboard.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'nx-X11/programs/Xserver/hw') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c index f3c6cb1ad..3045698ed 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c @@ -392,8 +392,6 @@ Bool nxagentValidServerTargets(Atom target) void nxagentClearClipboard(ClientPtr pClient, WindowPtr pWindow) { - int i; - #ifdef DEBUG fprintf(stderr, "%s: Called with client [%p] window [%p].\n", __func__, (void *) pClient, (void *) pWindow); @@ -405,7 +403,7 @@ void nxagentClearClipboard(ClientPtr pClient, WindowPtr pWindow) * Only for PRIMARY and CLIPBOARD selections. */ - for (i = 0; i < nxagentMaxSelections; i++) + for (int i = 0; i < nxagentMaxSelections; i++) { if ((pClient != NULL && lastSelectionOwner[i].client == pClient) || (pWindow != NULL && lastSelectionOwner[i].windowPtr == pWindow)) @@ -1259,7 +1257,6 @@ void nxagentResetSelectionOwner(void) void nxagentSetSelectionOwner(Selection *pSelection) { - int i; #ifdef DEBUG fprintf(stderr, "%s: Got called.\n", __func__); #endif @@ -1286,7 +1283,7 @@ void nxagentSetSelectionOwner(Selection *pSelection) * Only for PRIMARY and CLIPBOARD selections. */ - for (i = 0; i < nxagentMaxSelections; i++) + for (int i = 0; i < nxagentMaxSelections; i++) { if (pSelection->selection == CurrentSelections[i].selection) { -- cgit v1.2.3 From 9cb29cce25cf5d313951bbba161ffe01ed169027 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Mon, 10 Jun 2019 15:27:02 +0200 Subject: Clipboard.c: more debugging output --- nx-X11/programs/Xserver/hw/nxagent/Clipboard.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'nx-X11/programs/Xserver/hw') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c index 3045698ed..824c1dc47 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c @@ -1239,7 +1239,9 @@ void nxagentResetSelectionOwner(void) { XSetSelectionOwner(nxagentDisplay, lastSelectionOwner[i].selection, serverWindow, CurrentTime); + #ifdef DEBUG fprintf(stderr, "%s: Reset clipboard state.\n", __func__); + #endif lastSelectionOwner[i].client = NULL; lastSelectionOwner[i].window = None; @@ -1267,7 +1269,7 @@ void nxagentSetSelectionOwner(Selection *pSelection) } #ifdef DEBUG - fprintf(stderr, "%s: Setting selection owner to window [0x%x].\n", __func__, + fprintf(stderr, "%s: Setting selection owner to serverwindow ([0x%x]).\n", __func__, serverWindow); #endif @@ -1287,6 +1289,20 @@ void nxagentSetSelectionOwner(Selection *pSelection) { if (pSelection->selection == CurrentSelections[i].selection) { + #ifdef DEBUG + fprintf(stderr, "%s: lastSelectionOwner.client [0x%x] -> [0x%x]\n", __func__, lastSelectionOwner[i].client, pSelection->client); + fprintf(stderr, "%s: lastSelectionOwner.window [0x%x] -> [0x%x]\n", __func__, lastSelectionOwner[i].window, pSelection->window); + fprintf(stderr, "%s: lastSelectionOwner.windowPtr [0x%x] -> [0x%x] [0x%x] (serverWindow: [0x%x])\n", __func__, lastSelectionOwner[i].windowPtr, pSelection->pWin, nxagentWindow(pSelection->pWin), serverWindow); + fprintf(stderr, "%s: lastSelectionOwner.lastTimeChanged [%d]\n", __func__, lastSelectionOwner[i].lastTimeChanged); + #endif + + /* + * inform the real X server that our serverWindow is the + * clipboard owner. The real owner window (inside nxagent) is + * stored in lastSelectionOwner.window. + * lastSelectionOwner.windowPtr points to the struct that + * contains all information about the owner window + */ XSetSelectionOwner(nxagentDisplay, lastSelectionOwner[i].selection, serverWindow, CurrentTime); lastSelectionOwner[i].client = pSelection->client; -- cgit v1.2.3 From d38fb8137e77c6aa08189cc4bb131f0e5d8ccc0b Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Mon, 10 Jun 2019 15:32:38 +0200 Subject: Events.c: add debug output --- nx-X11/programs/Xserver/hw/nxagent/Events.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'nx-X11/programs/Xserver/hw') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Events.c b/nx-X11/programs/Xserver/hw/nxagent/Events.c index 5281b4b5c..7ec97dada 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Events.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Events.c @@ -2940,6 +2940,13 @@ int nxagentHandleXFixesSelectionNotify(XEvent *X) #endif #ifdef DEBUG + fprintf(stderr, "%s: CurrentSelections[i].lastTimeChanged [%d]\n", __func__, CurrentSelections[i].lastTimeChanged.milliseconds); + fprintf(stderr, "%s: Event timestamp [%ld]\n", __func__, xfixesEvent->xfixesselection.timestamp); + fprintf(stderr, "%s: Event selection timestamp [%ld]\n", __func__, xfixesEvent->xfixesselection.selection_timestamp); + fprintf(stderr, "%s: Event selection window [0x%x]\n", __func__, xfixesEvent->xfixesselection.window); + fprintf(stderr, "%s: Event selection owner [0x%x]\n", __func__, xfixesEvent->xfixesselection.owner); + fprintf(stderr, "%s: Event selection [%s]\n", __func__, NameForAtom(nxagentRemoteToLocalAtom(xfixesEvent->xfixesselection.selection))); + fprintf(stderr, "nxagentHandleXFixesSelectionNotify: Subtype "); switch (xfixesEvent -> xfixesselection.subtype) -- cgit v1.2.3 From 2da476a67e1580d4957755e0c6cc3df2321b038b Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Thu, 30 May 2019 11:36:18 +0200 Subject: Window.c: comment on the purpose of some functions --- nx-X11/programs/Xserver/hw/nxagent/Window.c | 174 ++++++++++++++++++++++++++-- 1 file changed, 166 insertions(+), 8 deletions(-) (limited to 'nx-X11/programs/Xserver/hw') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Window.c b/nx-X11/programs/Xserver/hw/nxagent/Window.c index c404d0a46..c5c533934 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Window.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Window.c @@ -247,6 +247,15 @@ WindowPtr nxagentWindowPtr(Window window) return match.pWin; } +/* + * from "Definition of the Porting Layer for X v11 Sample Server": + * + * This routine is a hook for when DIX creates a window. It should + * fill in the "Window Procedures in the WindowRec" below and also + * allocate the devPrivate block for it. + * + * See Xserver/fb/fbwindow.c for the sample server implementation. + */ Bool nxagentCreateWindow(WindowPtr pWin) { unsigned long mask; @@ -530,7 +539,7 @@ void nxagentSetVersionProperty(WindowPtr pWin) #ifdef DEBUG else { - fprintf(stderr, "%s: Added property [%s], value [%s] for root window [%x].\n", __func__, name, NX_VERSION_CURRENT_STRING, pWin); + fprintf(stderr, "%s: Added property [%s], value [%s] for root window [%x].\n", __func__, name, NX_VERSION_CURRENT_STRING, pWin); } #endif } @@ -553,6 +562,15 @@ Bool nxagentSomeWindowsAreMapped(void) return False; } +/* + * from "Definition of the Porting Layer for X v11 Sample Server": + * + * This routine is a hook for when DIX destroys a window. It should + * deallocate the devPrivate block for it and any other blocks that + * need to be freed, besides doing other cleanup actions. + * + * See Xserver/fb/fbwindow.c for the sample server implementation. + */ Bool nxagentDestroyWindow(WindowPtr pWin) { nxagentPrivWindowPtr pWindowPriv; @@ -683,6 +701,20 @@ Bool nxagentDestroyWindow(WindowPtr pWin) return True; } +/* + * from "Definition of the Porting Layer for X v11 Sample Server": + * + * This routine is a hook for when DIX moves or resizes a window. It + * should do whatever private operations need to be done when a window + * is moved or resized. For instance, if DDX keeps a pixmap tile used + * for drawing the background or border, and it keeps the tile rotated + * such that it is longword aligned to longword locations in the frame + * buffer, then you should rotate your tiles here. The actual graphics + * involved in moving the pixels on the screen and drawing the border + * are handled by CopyWindow(), below. + * + * See Xserver/fb/fbwindow.c for the sample server implementation. + */ Bool nxagentPositionWindow(WindowPtr pWin, int x, int y) { if (nxagentScreenTrap == 1) @@ -1218,6 +1250,15 @@ void nxagentMoveViewport(ScreenPtr pScreen, int hShift, int vShift) nxagentOption(Width), nxagentOption(Height)); } +/* + * This will update the window on the real X server by calling + * XConfigureWindow()/XMapWindow()/XLowerWindow()/XRaiseWindow() + * mask definesthe values that need to be updated, see e.g + * man XConfigureWindow. + * + * In addition to the bit flags known to Xorg it uses these + * self-defined ones: CW_Update, CW_Shape, CW_Map, CW_RootlessRestack. + */ void nxagentConfigureWindow(WindowPtr pWin, unsigned int mask) { unsigned int valuemask; @@ -1510,6 +1551,16 @@ void nxagentConfigureWindow(WindowPtr pWin, unsigned int mask) } } +/* + * from "Definition of the Porting Layer for X v11 Sample Server": + * + * This function will be called when a window is reparented. At the + * time of the call, pWin will already be spliced into its new + * position in the window tree, and pPriorParent is its previous + * parent. This function can be NULL. + * + * We simply pass this pver to the real X server. + */ void nxagentReparentWindow(WindowPtr pWin, WindowPtr pOldParent) { if (nxagentScreenTrap) @@ -1529,6 +1580,16 @@ void nxagentReparentWindow(WindowPtr pWin, WindowPtr pOldParent) pWin->origin.y - wBorderWidth(pWin)); } +/* + * from "Definition of the Porting Layer for X v11 Sample Server": + * + * ChangeWindowAttributes is called whenever DIX changes window + * attributes, such as the size, front-to-back ordering, title, or + * anything of lesser severity that affects the window itself. The + * sample server implements this routine. It computes accelerators for + * quickly putting up background and border tiles. (See description of + * the set of routines stored in the WindowRec.) + */ Bool nxagentChangeWindowAttributes(WindowPtr pWin, unsigned long mask) { XSetWindowAttributes attributes; @@ -1822,6 +1883,7 @@ Bool nxagentChangeWindowAttributes(WindowPtr pWin, unsigned long mask) return 1; } +/* Set the WM_STATE property of pWin to the desired value */ void nxagentSetWMState(WindowPtr pWin, CARD32 desired) { Atom prop = MakeAtom("WM_STATE", strlen("WM_STATE"), True); @@ -1834,6 +1896,20 @@ void nxagentSetWMState(WindowPtr pWin, CARD32 desired) } } +/* + * from "Definition of the Porting Layer for X v11 Sample Server": + * + * RealizeWindow/UnRealizeWindow: + * These routines are hooks for when DIX maps (makes visible) and + * unmaps (makes invisible) a window. It should do whatever private + * operations need to be done when these happen, such as allocating or + * deallocating structures that are only needed for visible + * windows. RealizeWindow does NOT draw the window border, background + * or contents; UnrealizeWindow does NOT erase the window or generate + * exposure events for underlying windows; this is taken care of by + * DIX. DIX does, however, call PaintWindowBackground() and + * PaintWindowBorder() to perform some of these. +-+ */ Bool nxagentRealizeWindow(WindowPtr pWin) { if (nxagentScreenTrap == 1) @@ -1894,6 +1970,7 @@ Bool nxagentRealizeWindow(WindowPtr pWin) return True; } +/* See nxagentRealizeWindow for a description */ Bool nxagentUnrealizeWindow(WindowPtr pWin) { if (nxagentScreenTrap) @@ -1918,8 +1995,6 @@ Bool nxagentUnrealizeWindow(WindowPtr pWin) void nxagentFrameBufferPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what) { - void (*PaintWindowBackgroundBackup)(WindowPtr, RegionPtr, int); - if (pWin->backgroundState == BackgroundPixmap) { pWin->background.pixmap = nxagentVirtualPixmap(pWin->background.pixmap); @@ -1930,13 +2005,22 @@ void nxagentFrameBufferPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what) pWin->border.pixmap = nxagentVirtualPixmap(pWin->border.pixmap); } - PaintWindowBackgroundBackup = pWin->drawable.pScreen -> PaintWindowBackground; + /* + * Call fbPaintWindow(). We need to temporarily replace + * PaintWindowBackground() by ourself because fbPaintWindow() is + * recursively calling it for parent windows, too. + */ + { + void (*PaintWindowBackgroundBackup)(WindowPtr, RegionPtr, int); - pWin->drawable.pScreen -> PaintWindowBackground = nxagentFrameBufferPaintWindow; + PaintWindowBackgroundBackup = pWin->drawable.pScreen -> PaintWindowBackground; - fbPaintWindow(pWin, pRegion, what); + pWin->drawable.pScreen -> PaintWindowBackground = nxagentFrameBufferPaintWindow; - pWin->drawable.pScreen -> PaintWindowBackground = PaintWindowBackgroundBackup; + fbPaintWindow(pWin, pRegion, what); + + pWin->drawable.pScreen -> PaintWindowBackground = PaintWindowBackgroundBackup; + } if (pWin->backgroundState == BackgroundPixmap) { @@ -2003,11 +2087,46 @@ void nxagentPaintWindowBorder(WindowPtr pWin, RegionPtr pRegion, int what) RegionUninit(&temp); } +/* + * from "Definition of the Porting Layer for X v11 Sample Server": + * + * CopyWindow is called when a window is moved, and graphically moves + * to pixels of a window on the screen. It should not change any other + * state within DDX (see PositionWindow(), above). + * + * oldpt is the old location of the upper-left corner. oldRegion is + * the old region it is coming from. The new location and new region + * is stored in the WindowRec. oldRegion might modified in place by + * this routine (the sample implementation does this). + * + * CopyArea could be used, except that this operation has more + * complications. First of all, you do not want to copy a rectangle + * onto a rectangle. The original window may be obscured by other + * windows, and the new window location may be similarly + * obscured. Second, some hardware supports multiple windows with + * multiple depths, and your routine needs to take care of that. + * + * The pixels in oldRegion (with reference point oldpt) are copied to + * the window's new region (pWin->borderClip). pWin->borderClip is + * gotten directly from the window, rather than passing it as a + * parameter. + * + * The sample server implementation is in Xserver/fb/fbwindow.c. + */ void nxagentCopyWindow(WindowPtr pWin, xPoint oldOrigin, RegionPtr oldRegion) { fbCopyWindow(pWin, oldOrigin, oldRegion); } +/* + * from "Definition of the Porting Layer for X v11 Sample Server": + * + * Whenever the cliplist for a window is changed, this function is + * called to perform whatever hardware manipulations might be + * necessary. When called, the clip list and border clip regions in + * the window are set to the new values. dx,dy are the distance that + * the window has been moved (if at all). + */ void nxagentClipNotify(WindowPtr pWin, int dx, int dy) { /* @@ -2026,6 +2145,20 @@ void nxagentClipNotify(WindowPtr pWin, int dx, int dy) #endif /* NXAGENT_SHAPE */ } +/* + * from "Definition of the Porting Layer for X v11 Sample Server": + * + * The WindowExposures() routine paints the border and generates + * exposure events for the window. pRegion is an unoccluded region of + * the window, and pBSRegion is an occluded region that has backing + * store. Since exposure events include a rectangle describing what + * was exposed, this routine may have to send back a series of + * exposure events, one for each rectangle of the region. The count + * field in the expose event is a hint to the client as to the number + * of regions that are after this one. This routine must be + * provided. The sample server has a machine-independent version in + * Xserver/mi/miexpose.c. + */ void nxagentWindowExposures(WindowPtr pWin, RegionPtr pRgn, RegionPtr other_exposed) { /* @@ -3340,6 +3473,7 @@ Bool nxagentIsIconic(WindowPtr pWin) } } +/* pass Eventmask to the real X server (for the rootless toplevel window only) */ void nxagentSetTopLevelEventMask(WindowPtr pWin) { if (nxagentOption(Rootless) && nxagentWindowTopLevel(pWin)) @@ -3408,7 +3542,7 @@ void nxagentFlushConfigureWindow(void) index = index -> prev; free(tmp); } -} + } nxagentConfiguredWindowList = NULL; @@ -3438,6 +3572,14 @@ void nxagentFlushConfigureWindow(void) return; } +/* + * from "Definition of the Porting Layer for X v11 Sample Server": + * + * If this routine is not NULL, DIX calls it shortly after calling + * ValidateTree, passing it the same arguments. This is useful for + * managing multi-layered framebuffers. The sample server sets this to + * NULL. + */ void nxagentPostValidateTree(WindowPtr pParent, WindowPtr pChild, VTKind kind) { /* @@ -3449,6 +3591,16 @@ void nxagentPostValidateTree(WindowPtr pParent, WindowPtr pChild, VTKind kind) return; } +/* + * Add the given window to the beginning of + * nxagentconfiguredWindowList. This list collects all windows that + * need to be reconfigured on the real X server. valuemask defines + * what changes need to be done. The required values (like position, + * size, ...) are already stored in pWin). + * + * Note that we just add the window to the list here. The actual work + * will be done by nxagentFlushConfigureWindow() later. + */ void nxagentAddConfiguredWindow(WindowPtr pWin, unsigned int valuemask) { unsigned int mask; @@ -3518,6 +3670,12 @@ void nxagentAddConfiguredWindow(WindowPtr pWin, unsigned int valuemask) return; } +/* + * remove pWin from nxgentConfigureWindowList + * + * This is just updating the linked list and freeing the + * given entry. It will not perform any X stuff + */ void nxagentDeleteConfiguredWindow(WindowPtr pWin) { ConfiguredWindowStruct *index, *previous, *tmp; -- cgit v1.2.3