xserver: Branch 'master' - 5 commits

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Mar 12 15:29:24 UTC 2024


 dix/cursor.c                       |    2 --
 dix/dispatch.c                     |   13 -------------
 hw/xfree86/modes/xf86Cursors.c     |    3 ++-
 hw/xfree86/ramdac/xf86CursorPriv.h |    2 ++
 hw/xfree86/ramdac/xf86CursorRD.c   |   15 ++++++++++-----
 hw/xfree86/ramdac/xf86HWCurs.c     |   12 ++++++------
 hw/xnest/Cursor.c                  |    5 ++---
 hw/xnest/Screen.c                  |   11 ++++++++---
 hw/xnest/XNCursor.h                |   13 +++++++++----
 include/cursor.h                   |    4 ----
 10 files changed, 39 insertions(+), 41 deletions(-)

New commits:
commit d84fd3bf19a7a0666190250eba9f1abd1f4492a1
Author: Enrico Weigelt, metux IT consult <info at metux.net>
Date:   Wed Feb 28 16:20:54 2024 +0100

    dix: drop now obsolete cursorScreenDevPriv
    
    Since the two DDX'es which had used this key (xnest and xfree86) now using
    their own ones, this global key is obsolete and can be removed.
    
    Signed-off-by: Enrico Weigelt, metux IT consult <info at metux.net>
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1342>

diff --git a/dix/cursor.c b/dix/cursor.c
index a9ad34467..0d252b0f0 100644
--- a/dix/cursor.c
+++ b/dix/cursor.c
@@ -69,8 +69,6 @@ typedef struct _GlyphShare {
 
 static GlyphSharePtr sharedGlyphs = (GlyphSharePtr) NULL;
 
-DevScreenPrivateKeyRec cursorScreenDevPriv;
-
 static CARD32 cursorSerial;
 
 static void
diff --git a/dix/dispatch.c b/dix/dispatch.c
index 9e3f38285..41dffd631 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -4000,9 +4000,6 @@ AddScreen(Bool (*pfnInit) (ScreenPtr /*pScreen */ ,
 
     update_desktop_dimensions();
 
-    dixRegisterScreenPrivateKey(&cursorScreenDevPriv, pScreen, PRIVATE_CURSOR,
-                                0);
-
     return i;
 }
 
@@ -4050,16 +4047,6 @@ AddGPUScreen(Bool (*pfnInit) (ScreenPtr /*pScreen */ ,
 
     update_desktop_dimensions();
 
-    /*
-     * We cannot register the Screen PRIVATE_CURSOR key if cursors are already
-     * created, because dix/privates.c does not have relocation code for
-     * PRIVATE_CURSOR. Once this is fixed the if() can be removed and we can
-     * register the Screen PRIVATE_CURSOR key unconditionally.
-     */
-    if (!dixPrivatesCreated(PRIVATE_CURSOR))
-        dixRegisterScreenPrivateKey(&cursorScreenDevPriv, pScreen,
-                                    PRIVATE_CURSOR, 0);
-
     return i;
 }
 
diff --git a/include/cursor.h b/include/cursor.h
index 281d88ba0..d198f711d 100644
--- a/include/cursor.h
+++ b/include/cursor.h
@@ -62,10 +62,6 @@ struct _DeviceIntRec;
 typedef struct _Cursor *CursorPtr;
 typedef struct _CursorMetric *CursorMetricPtr;
 
-extern _X_EXPORT DevScreenPrivateKeyRec cursorScreenDevPriv;
-
-#define CursorScreenKey (&cursorScreenDevPriv)
-
 extern _X_EXPORT CursorPtr rootCursor;
 
 extern _X_EXPORT int FreeCursor(void *pCurs,
commit 65572860840d32bee3ad2b0c0774fb28b77620e7
Author: Enrico Weigelt, metux IT consult <info at metux.net>
Date:   Wed Feb 28 16:13:48 2024 +0100

    xfree86: use own dev-privates key for per-screen cursor
    
    Since it's storing an locally defined (ddx-internal) data, it's better
    not to abuse some globally defined key for this.
    
    It just happened to work before, since CursorScreenKey is only used by DDX
    (and there's only one DDX per executable) and they currently (!) have the
    same size (pointer) - but that's a fragile programming style, so clean it up.
    
    Signed-off-by: Enrico Weigelt, metux IT consult <info at metux.net>
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1342>

diff --git a/hw/xfree86/modes/xf86Cursors.c b/hw/xfree86/modes/xf86Cursors.c
index dba5f8877..6805f725a 100644
--- a/hw/xfree86/modes/xf86Cursors.c
+++ b/hw/xfree86/modes/xf86Cursors.c
@@ -301,7 +301,8 @@ xf86_set_cursor_colors(ScrnInfoPtr scrn, int bg, int fg)
     CursorPtr cursor = xf86CurrentCursor(screen);
     int c;
     CARD8 *bits = cursor ?
-        dixLookupScreenPrivate(&cursor->devPrivates, CursorScreenKey, screen)
+        dixLookupScreenPrivate(&cursor->devPrivates,
+                               &xf86ScreenCursorBitsKeyRec, screen)
         : NULL;
 
     /* Save ARGB versions of these colors */
diff --git a/hw/xfree86/ramdac/xf86CursorPriv.h b/hw/xfree86/ramdac/xf86CursorPriv.h
index 397d2a14b..cb8669733 100644
--- a/hw/xfree86/ramdac/xf86CursorPriv.h
+++ b/hw/xfree86/ramdac/xf86CursorPriv.h
@@ -48,4 +48,6 @@ extern _X_EXPORT DevPrivateKeyRec xf86CursorScreenKeyRec;
 
 #define xf86CursorScreenKey (&xf86CursorScreenKeyRec)
 
+extern DevScreenPrivateKeyRec xf86ScreenCursorBitsKeyRec;
+
 #endif                          /* _XF86CURSORPRIV_H */
diff --git a/hw/xfree86/ramdac/xf86CursorRD.c b/hw/xfree86/ramdac/xf86CursorRD.c
index c8362d169..d423ad204 100644
--- a/hw/xfree86/ramdac/xf86CursorRD.c
+++ b/hw/xfree86/ramdac/xf86CursorRD.c
@@ -18,6 +18,7 @@
 #include "inputstr.h"
 
 DevPrivateKeyRec xf86CursorScreenKeyRec;
+DevScreenPrivateKeyRec xf86ScreenCursorBitsKeyRec;
 
 /* sprite functions */
 
@@ -68,6 +69,10 @@ xf86InitCursor(ScreenPtr pScreen, xf86CursorInfoPtr infoPtr)
     if (!ScreenPriv)
         return FALSE;
 
+    if (!dixRegisterScreenPrivateKey(&xf86ScreenCursorBitsKeyRec, pScreen,
+                                     PRIVATE_CURSOR, 0))
+        return FALSE;
+
     dixSetPrivate(&pScreen->devPrivates, xf86CursorScreenKey, ScreenPriv);
 
     ScreenPriv->SWCursor = TRUE;
@@ -273,8 +278,8 @@ xf86CursorRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCurs)
                                                xf86CursorScreenKey);
 
     if (CursorRefCount(pCurs) <= 1)
-        dixSetScreenPrivate(&pCurs->devPrivates, CursorScreenKey, pScreen,
-                            NULL);
+        dixSetScreenPrivate(&pCurs->devPrivates, &xf86ScreenCursorBitsKeyRec,
+                            pScreen, NULL);
 
     return (*ScreenPriv->spriteFuncs->RealizeCursor) (pDev, pScreen, pCurs);
 }
@@ -288,9 +293,9 @@ xf86CursorUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCurs)
 
     if (CursorRefCount(pCurs) <= 1) {
         free(dixLookupScreenPrivate
-             (&pCurs->devPrivates, CursorScreenKey, pScreen));
-        dixSetScreenPrivate(&pCurs->devPrivates, CursorScreenKey, pScreen,
-                            NULL);
+             (&pCurs->devPrivates, &xf86ScreenCursorBitsKeyRec, pScreen));
+        dixSetScreenPrivate(&pCurs->devPrivates, &xf86ScreenCursorBitsKeyRec,
+                            pScreen, NULL);
     }
 
     return (*ScreenPriv->spriteFuncs->UnrealizeCursor) (pDev, pScreen, pCurs);
diff --git a/hw/xfree86/ramdac/xf86HWCurs.c b/hw/xfree86/ramdac/xf86HWCurs.c
index ddba5e6c6..eba503d51 100644
--- a/hw/xfree86/ramdac/xf86HWCurs.c
+++ b/hw/xfree86/ramdac/xf86HWCurs.c
@@ -197,15 +197,15 @@ xf86ScreenSetCursor(ScreenPtr pScreen, CursorPtr pCurs, int x, int y)
     }
 
     /*
-     * Hot plugged GPU's do not have a CursorScreenKey, force sw cursor.
+     * Hot plugged GPU's do not have a xf86ScreenCursorBitsKeyRec, force sw cursor.
      * This check can be removed once dix/privates.c gets relocation code for
      * PRIVATE_CURSOR. Also see the related comment in AddGPUScreen().
      */
-    if (!_dixGetScreenPrivateKey(CursorScreenKey, pScreen))
+    if (!_dixGetScreenPrivateKey(&xf86ScreenCursorBitsKeyRec, pScreen))
         return FALSE;
 
-    bits =
-        dixLookupScreenPrivate(&pCurs->devPrivates, CursorScreenKey, pScreen);
+    bits = dixLookupScreenPrivate(&pCurs->devPrivates,
+                                  &xf86ScreenCursorBitsKeyRec, pScreen);
 
     x -= infoPtr->pScrn->frameX0;
     y -= infoPtr->pScrn->frameY0;
@@ -213,8 +213,8 @@ xf86ScreenSetCursor(ScreenPtr pScreen, CursorPtr pCurs, int x, int y)
     if (!pCurs->bits->argb || !xf86DriverHasLoadCursorARGB(infoPtr))
         if (!bits) {
             bits = (*infoPtr->RealizeCursor) (infoPtr, pCurs);
-            dixSetScreenPrivate(&pCurs->devPrivates, CursorScreenKey, pScreen,
-                                bits);
+            dixSetScreenPrivate(&pCurs->devPrivates,
+                                &xf86ScreenCursorBitsKeyRec, pScreen, bits);
         }
 
     if (!(infoPtr->Flags & HARDWARE_CURSOR_UPDATE_UNHIDDEN))
commit 49d139344d76c4470f0eebc1c47edcf4130a51c6
Author: Enrico Weigelt, metux IT consult <info at metux.net>
Date:   Wed Feb 28 15:40:37 2024 +0100

    xnest: use own dev-privates key for per-screen cursor
    
    Since it's storing an locally defined (ddx-internal) struct, it's better
    not to abuse some globally defined key for this.
    
    It just happened to work before, since CursorScreenKey is only used by DDX
    (and there's only one DDX per executable) and they currently (!) have the
    same size (pointer) - but that's a fragile programming style, so clean it up.
    
    Signed-off-by: Enrico Weigelt, metux IT consult <info at metux.net>
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1342>

diff --git a/hw/xnest/Cursor.c b/hw/xnest/Cursor.c
index 5fea4b84e..d8486e664 100644
--- a/hw/xnest/Cursor.c
+++ b/hw/xnest/Cursor.c
@@ -21,7 +21,6 @@ is" without express or implied warranty.
 #include "screenint.h"
 #include "input.h"
 #include "misc.h"
-#include "cursor.h"
 #include "cursorstr.h"
 #include "scrnintstr.h"
 #include "servermd.h"
diff --git a/hw/xnest/Screen.c b/hw/xnest/Screen.c
index 8d61a8a67..88c146040 100644
--- a/hw/xnest/Screen.c
+++ b/hw/xnest/Screen.c
@@ -45,6 +45,7 @@ is" without express or implied warranty.
 Window xnestDefaultWindows[MAXSCREENS];
 Window xnestScreenSaverWindows[MAXSCREENS];
 DevPrivateKeyRec xnestScreenCursorFuncKeyRec;
+DevScreenPrivateKeyRec xnestScreenCursorPrivKeyRec;
 
 ScreenPtr
 xnestScreen(Window window)
@@ -158,6 +159,10 @@ xnestOpenScreen(ScreenPtr pScreen, int argc, char *argv[])
     if (!dixRegisterPrivateKey(&xnestScreenCursorFuncKeyRec, PRIVATE_SCREEN, 0))
         return FALSE;
 
+    if (!dixRegisterScreenPrivateKey(&xnestScreenCursorPrivKeyRec, pScreen,
+                                     PRIVATE_CURSOR, 0))
+        return FALSE;
+
     visuals = xallocarray(xnestNumVisuals, sizeof(VisualRec));
     numVisuals = 0;
 
diff --git a/hw/xnest/XNCursor.h b/hw/xnest/XNCursor.h
index f2860a95e..24f885bf0 100644
--- a/hw/xnest/XNCursor.h
+++ b/hw/xnest/XNCursor.h
@@ -30,11 +30,16 @@ typedef struct {
     Cursor cursor;
 } xnestPrivCursor;
 
+// stores xnestPrivCursor per screen's cursor
+extern DevScreenPrivateKeyRec xnestScreenCursorPrivKeyRec;
+
 #define xnestGetCursorPriv(pCursor, pScreen) ((xnestPrivCursor *) \
-    dixLookupScreenPrivate(&(pCursor)->devPrivates, CursorScreenKey, pScreen))
+    dixLookupScreenPrivate(&(pCursor)->devPrivates, \
+                           &xnestScreenCursorPrivKeyRec, pScreen))
 
 #define xnestSetCursorPriv(pCursor, pScreen, v) \
-    dixSetScreenPrivate(&(pCursor)->devPrivates, CursorScreenKey, pScreen, v)
+    dixSetScreenPrivate(&(pCursor)->devPrivates, \
+                        &xnestScreenCursorPrivKeyRec, pScreen, v)
 
 #define xnestCursor(pCursor, pScreen) \
   (xnestGetCursorPriv(pCursor, pScreen)->cursor)
commit 7e22c033d0bbbd805c9f1232fe8dc4e5d77592cf
Author: Enrico Weigelt, metux IT consult <info at metux.net>
Date:   Wed Feb 28 13:11:57 2024 +0100

    xnest: fix naming of xnestCursorScreenKeyRec
    
    It's naming is a bit unprecise: it actually is used for storing
    xnestCursorFuncPtr inside a Screen. Thus rename it to
    xnestScreenCursorFuncKeyRec to make it bit more clear.
    
    Signed-off-by: Enrico Weigelt, metux IT consult <info at metux.net>
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1342>

diff --git a/hw/xnest/Cursor.c b/hw/xnest/Cursor.c
index e48bd56d4..5fea4b84e 100644
--- a/hw/xnest/Cursor.c
+++ b/hw/xnest/Cursor.c
@@ -156,7 +156,7 @@ xnestDeviceCursorInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
     xnestCursorFuncPtr pScreenPriv;
 
     pScreenPriv = (xnestCursorFuncPtr)
-        dixLookupPrivate(&pScreen->devPrivates, &xnestCursorScreenKeyRec);
+        dixLookupPrivate(&pScreen->devPrivates, &xnestScreenCursorFuncKeyRec);
 
     return pScreenPriv->spriteFuncs->DeviceCursorInitialize(pDev, pScreen);
 }
@@ -167,7 +167,7 @@ xnestDeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScreen)
     xnestCursorFuncPtr pScreenPriv;
 
     pScreenPriv = (xnestCursorFuncPtr)
-        dixLookupPrivate(&pScreen->devPrivates, &xnestCursorScreenKeyRec);
+        dixLookupPrivate(&pScreen->devPrivates, &xnestScreenCursorFuncKeyRec);
 
     pScreenPriv->spriteFuncs->DeviceCursorCleanup(pDev, pScreen);
 }
diff --git a/hw/xnest/Screen.c b/hw/xnest/Screen.c
index a078a8be3..8d61a8a67 100644
--- a/hw/xnest/Screen.c
+++ b/hw/xnest/Screen.c
@@ -44,7 +44,7 @@ is" without express or implied warranty.
 
 Window xnestDefaultWindows[MAXSCREENS];
 Window xnestScreenSaverWindows[MAXSCREENS];
-DevPrivateKeyRec xnestCursorScreenKeyRec;
+DevPrivateKeyRec xnestScreenCursorFuncKeyRec;
 
 ScreenPtr
 xnestScreen(Window window)
@@ -155,7 +155,7 @@ xnestOpenScreen(ScreenPtr pScreen, int argc, char *argv[])
         (&xnestColormapPrivateKeyRec, PRIVATE_COLORMAP,
          sizeof(xnestPrivColormap)))
         return FALSE;
-    if (!dixRegisterPrivateKey(&xnestCursorScreenKeyRec, PRIVATE_SCREEN, 0))
+    if (!dixRegisterPrivateKey(&xnestScreenCursorFuncKeyRec, PRIVATE_SCREEN, 0))
         return FALSE;
 
     visuals = xallocarray(xnestNumVisuals, sizeof(VisualRec));
@@ -312,7 +312,7 @@ xnestOpenScreen(ScreenPtr pScreen, int argc, char *argv[])
     miDCInitialize(pScreen, &xnestPointerCursorFuncs);  /* init SW rendering */
     PointPriv = dixLookupPrivate(&pScreen->devPrivates, miPointerScreenKey);
     xnestCursorFuncs.spriteFuncs = PointPriv->spriteFuncs;
-    dixSetPrivate(&pScreen->devPrivates, &xnestCursorScreenKeyRec,
+    dixSetPrivate(&pScreen->devPrivates, &xnestScreenCursorFuncKeyRec,
                   &xnestCursorFuncs);
     PointPriv->spriteFuncs = &xnestPointerSpriteFuncs;
 
diff --git a/hw/xnest/XNCursor.h b/hw/xnest/XNCursor.h
index ca4225529..f2860a95e 100644
--- a/hw/xnest/XNCursor.h
+++ b/hw/xnest/XNCursor.h
@@ -21,7 +21,9 @@ typedef struct {
     miPointerSpriteFuncPtr spriteFuncs;
 } xnestCursorFuncRec, *xnestCursorFuncPtr;
 
-extern DevPrivateKeyRec xnestCursorScreenKeyRec;
+// stores xnestCursorFuncRec in screen
+extern DevPrivateKeyRec xnestScreenCursorFuncKeyRec;
+
 extern xnestCursorFuncRec xnestCursorFuncs;
 
 typedef struct {
commit 22306f16b6cbeb68ebf2e4423b5b5c51ec88ffb0
Author: Enrico Weigelt, metux IT consult <info at metux.net>
Date:   Wed Feb 28 13:04:02 2024 +0100

    xnest: drop superfluous xnestCursorScreenKey define
    
    We can just write &xnestCursorScreenKeyRec instead, which makes the code
    a bit more clear.
    
    Signed-off-by: Enrico Weigelt, metux IT consult <info at metux.net>
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1342>

diff --git a/hw/xnest/Cursor.c b/hw/xnest/Cursor.c
index 285e10ebf..e48bd56d4 100644
--- a/hw/xnest/Cursor.c
+++ b/hw/xnest/Cursor.c
@@ -156,7 +156,7 @@ xnestDeviceCursorInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
     xnestCursorFuncPtr pScreenPriv;
 
     pScreenPriv = (xnestCursorFuncPtr)
-        dixLookupPrivate(&pScreen->devPrivates, xnestCursorScreenKey);
+        dixLookupPrivate(&pScreen->devPrivates, &xnestCursorScreenKeyRec);
 
     return pScreenPriv->spriteFuncs->DeviceCursorInitialize(pDev, pScreen);
 }
@@ -167,7 +167,7 @@ xnestDeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScreen)
     xnestCursorFuncPtr pScreenPriv;
 
     pScreenPriv = (xnestCursorFuncPtr)
-        dixLookupPrivate(&pScreen->devPrivates, xnestCursorScreenKey);
+        dixLookupPrivate(&pScreen->devPrivates, &xnestCursorScreenKeyRec);
 
     pScreenPriv->spriteFuncs->DeviceCursorCleanup(pDev, pScreen);
 }
diff --git a/hw/xnest/Screen.c b/hw/xnest/Screen.c
index ac01c248c..a078a8be3 100644
--- a/hw/xnest/Screen.c
+++ b/hw/xnest/Screen.c
@@ -312,7 +312,7 @@ xnestOpenScreen(ScreenPtr pScreen, int argc, char *argv[])
     miDCInitialize(pScreen, &xnestPointerCursorFuncs);  /* init SW rendering */
     PointPriv = dixLookupPrivate(&pScreen->devPrivates, miPointerScreenKey);
     xnestCursorFuncs.spriteFuncs = PointPriv->spriteFuncs;
-    dixSetPrivate(&pScreen->devPrivates, xnestCursorScreenKey,
+    dixSetPrivate(&pScreen->devPrivates, &xnestCursorScreenKeyRec,
                   &xnestCursorFuncs);
     PointPriv->spriteFuncs = &xnestPointerSpriteFuncs;
 
diff --git a/hw/xnest/XNCursor.h b/hw/xnest/XNCursor.h
index 1a3c6f44e..ca4225529 100644
--- a/hw/xnest/XNCursor.h
+++ b/hw/xnest/XNCursor.h
@@ -22,8 +22,6 @@ typedef struct {
 } xnestCursorFuncRec, *xnestCursorFuncPtr;
 
 extern DevPrivateKeyRec xnestCursorScreenKeyRec;
-
-#define xnestCursorScreenKey (&xnestCursorScreenKeyRec)
 extern xnestCursorFuncRec xnestCursorFuncs;
 
 typedef struct {


More information about the xorg-commit mailing list