xserver: Branch 'master' - 4 commits

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Feb 7 00:01:47 UTC 2025


 Xext/saver.c |  101 ++++++++++++++++++++++++++++-------------------------------
 1 file changed, 49 insertions(+), 52 deletions(-)

New commits:
commit 37dd2897d424bf0e9862db315fd716f12f634cc1
Author: Enrico Weigelt, metux IT consult <info at metux.net>
Date:   Wed Jul 3 00:17:11 2024 +0200

    Xext: saver: consolidate (non-)xinerama versions
    
    We can make it a bit simpler by doing the request header
    checking only once.
    
    Signed-off-by: Enrico Weigelt, metux IT consult <info at metux.net>
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1591>

diff --git a/Xext/saver.c b/Xext/saver.c
index 0a0b22c39..ad39a57aa 100644
--- a/Xext/saver.c
+++ b/Xext/saver.c
@@ -703,9 +703,8 @@ ProcScreenSaverSelectInput(ClientPtr client)
 }
 
 static int
-ScreenSaverSetAttributes(ClientPtr client)
+ScreenSaverSetAttributes(ClientPtr client, xScreenSaverSetAttributesReq *stuff)
 {
-    REQUEST(xScreenSaverSetAttributesReq);
     DrawablePtr pDraw;
     WindowPtr pParent;
     ScreenPtr pScreen;
@@ -728,7 +727,6 @@ ScreenSaverSetAttributes(ClientPtr client)
     Colormap cmap;
     ColormapPtr pCmap;
 
-    REQUEST_AT_LEAST_SIZE(xScreenSaverSetAttributesReq);
     ret = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
                             DixGetAttrAccess);
     if (ret != Success)
@@ -1045,16 +1043,13 @@ ScreenSaverSetAttributes(ClientPtr client)
 }
 
 static int
-ScreenSaverUnsetAttributes(ClientPtr client)
+ScreenSaverUnsetAttributes(ClientPtr client, Drawable drawable)
 {
-    REQUEST(xScreenSaverSetAttributesReq);
     DrawablePtr pDraw;
     ScreenSaverScreenPrivatePtr pPriv;
     int rc;
 
-    REQUEST_SIZE_MATCH(xScreenSaverUnsetAttributesReq);
-    rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
-                           DixGetAttrAccess);
+    rc = dixLookupDrawable(&pDraw, drawable, client, 0, DixGetAttrAccess);
     if (rc != Success)
         return rc;
     pPriv = GetScreenPrivate(pDraw->pScreen);
@@ -1070,9 +1065,11 @@ ScreenSaverUnsetAttributes(ClientPtr client)
 static int
 ProcScreenSaverSetAttributes(ClientPtr client)
 {
+    REQUEST(xScreenSaverSetAttributesReq);
+    REQUEST_AT_LEAST_SIZE(xScreenSaverSetAttributesReq);
+
 #ifdef XINERAMA
     if (!noPanoramiXExtension) {
-        REQUEST(xScreenSaverSetAttributesReq);
         PanoramiXRes *draw;
         PanoramiXRes *backPix = NULL;
         PanoramiXRes *bordPix = NULL;
@@ -1081,8 +1078,6 @@ ProcScreenSaverSetAttributes(ClientPtr client)
         int pback_offset = 0, pbord_offset = 0, cmap_offset = 0;
         XID orig_visual, tmp;
 
-        REQUEST_AT_LEAST_SIZE(xScreenSaverSetAttributesReq);
-
         status = dixLookupResourceByClass((void **) &draw, stuff->drawable,
                                           XRC_DRAWABLE, client, DixWriteAccess);
         if (status != Success)
@@ -1144,26 +1139,27 @@ ProcScreenSaverSetAttributes(ClientPtr client)
             if (orig_visual != CopyFromParent)
                 stuff->visualID = PanoramiXTranslateVisualID(i, orig_visual);
 
-            status = ScreenSaverSetAttributes(client);
+            status = ScreenSaverSetAttributes(client, stuff);
         }
 
         return status;
     }
 #endif /* XINERAMA */
 
-    return ScreenSaverSetAttributes(client);
+    return ScreenSaverSetAttributes(client, stuff);
 }
 
 static int
 ProcScreenSaverUnsetAttributes(ClientPtr client)
 {
+    REQUEST(xScreenSaverUnsetAttributesReq);
+    REQUEST_SIZE_MATCH(xScreenSaverUnsetAttributesReq);
+
 #ifdef XINERAMA
     if (!noPanoramiXExtension) {
-        REQUEST(xScreenSaverUnsetAttributesReq);
         PanoramiXRes *draw;
         int rc, i;
 
-        REQUEST_SIZE_MATCH(xScreenSaverUnsetAttributesReq);
 
         rc = dixLookupResourceByClass((void **) &draw, stuff->drawable,
                                       XRC_DRAWABLE, client, DixWriteAccess);
@@ -1171,15 +1167,14 @@ ProcScreenSaverUnsetAttributes(ClientPtr client)
             return (rc == BadValue) ? BadDrawable : rc;
 
         for (i = PanoramiXNumScreens - 1; i > 0; i--) {
-            stuff->drawable = draw->info[i].id;
-            ScreenSaverUnsetAttributes(client);
+            ScreenSaverUnsetAttributes(client, draw->info[i].id);
         }
 
         stuff->drawable = draw->info[0].id;
     }
 #endif /* XINERAMA */
 
-    return ScreenSaverUnsetAttributes(client);
+    return ScreenSaverUnsetAttributes(client, stuff->drawable);
 }
 
 static int
commit 8236ef3b5613d4243f6809f33f9984d11822a7ca
Author: Enrico Weigelt, metux IT consult <info at metux.net>
Date:   Mon Jul 8 12:42:07 2024 +0200

    Xext: saver: use explicit switch/case for dispatching
    
    It's more robust / easier understandable programming style to use explicit
    switch statements, case'ing on the constants defined in the protocol header,
    instead of implicitly via a some opaque call table. It's also done this
    way in the other extensions, so making the code a bit more consistent.
    
    Signed-off-by: Enrico Weigelt, metux IT consult <info at metux.net>
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1591>

diff --git a/Xext/saver.c b/Xext/saver.c
index 5bbccb5f1..0a0b22c39 100644
--- a/Xext/saver.c
+++ b/Xext/saver.c
@@ -1247,21 +1247,26 @@ ProcScreenSaverSuspend(ClientPtr client)
     return Success;
 }
 
-static int (*NormalVector[]) (ClientPtr /* client */ ) = {
-ProcScreenSaverQueryVersion,
-        ProcScreenSaverQueryInfo,
-        ProcScreenSaverSelectInput,
-        ProcScreenSaverSetAttributes,
-        ProcScreenSaverUnsetAttributes, ProcScreenSaverSuspend,};
-
 static int
 ProcScreenSaverDispatch(ClientPtr client)
 {
     REQUEST(xReq);
-
-    if (stuff->data < ARRAY_SIZE(NormalVector))
-        return (*NormalVector[stuff->data]) (client);
-    return BadRequest;
+    switch (stuff->data) {
+        case X_ScreenSaverQueryVersion:
+            return ProcScreenSaverQueryVersion(client);
+        case X_ScreenSaverQueryInfo:
+            return ProcScreenSaverQueryInfo(client);
+        case X_ScreenSaverSelectInput:
+            return ProcScreenSaverSelectInput(client);
+        case X_ScreenSaverSetAttributes:
+            return ProcScreenSaverSetAttributes(client);
+        case X_ScreenSaverUnsetAttributes:
+            return ProcScreenSaverUnsetAttributes(client);
+        case X_ScreenSaverSuspend:
+            return ProcScreenSaverSuspend(client);
+        default:
+            return BadRequest;
+    }
 }
 
 static int _X_COLD
@@ -1318,21 +1323,26 @@ SProcScreenSaverSuspend(ClientPtr client)
     return ProcScreenSaverSuspend(client);
 }
 
-static int (*SwappedVector[]) (ClientPtr /* client */ ) = {
-        ProcScreenSaverQueryVersion,
-        SProcScreenSaverQueryInfo,
-        SProcScreenSaverSelectInput,
-        SProcScreenSaverSetAttributes,
-        SProcScreenSaverUnsetAttributes, SProcScreenSaverSuspend,};
-
 static int _X_COLD
 SProcScreenSaverDispatch(ClientPtr client)
 {
     REQUEST(xReq);
-
-    if (stuff->data < ARRAY_SIZE(NormalVector))
-        return (*SwappedVector[stuff->data]) (client);
-    return BadRequest;
+    switch (stuff->data) {
+        case X_ScreenSaverQueryVersion:
+            return ProcScreenSaverQueryVersion(client);
+        case X_ScreenSaverQueryInfo:
+            return SProcScreenSaverQueryInfo(client);
+        case X_ScreenSaverSelectInput:
+            return SProcScreenSaverSelectInput(client);
+        case X_ScreenSaverSetAttributes:
+            return SProcScreenSaverSetAttributes(client);
+        case X_ScreenSaverUnsetAttributes:
+            return SProcScreenSaverUnsetAttributes(client);
+        case X_ScreenSaverSuspend:
+            return SProcScreenSaverSuspend(client);
+        default:
+            return BadRequest;
+    }
 }
 
 void
commit 40469a9d519ff286ec6ad006c6ae1f07f828072a
Author: Enrico Weigelt, metux IT consult <info at metux.net>
Date:   Mon Jul 8 12:06:13 2024 +0200

    Xext: saver: skip unneeded zero init and zero-swapping
    
    When using struct initializers, all fields not set explicitly are zero.
    Also no need to swap fields that are known to be zero.
    
    Signed-off-by: Enrico Weigelt, metux IT consult <info at metux.net>
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1591>

diff --git a/Xext/saver.c b/Xext/saver.c
index cc637aad2..5bbccb5f1 100644
--- a/Xext/saver.c
+++ b/Xext/saver.c
@@ -601,7 +601,6 @@ ProcScreenSaverQueryVersion(ClientPtr client)
     xScreenSaverQueryVersionReply rep = {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
-        .length = 0,
         .majorVersion = SERVER_SAVER_MAJOR_VERSION,
         .minorVersion = SERVER_SAVER_MINOR_VERSION
     };
@@ -610,7 +609,6 @@ ProcScreenSaverQueryVersion(ClientPtr client)
 
     if (client->swapped) {
         swaps(&rep.sequenceNumber);
-        swapl(&rep.length);
         swaps(&rep.majorVersion);
         swaps(&rep.minorVersion);
     }
@@ -622,7 +620,6 @@ static int
 ProcScreenSaverQueryInfo(ClientPtr client)
 {
     REQUEST(xScreenSaverQueryInfoReq);
-    xScreenSaverQueryInfoReply rep;
     int rc;
     ScreenSaverStuffPtr pSaver;
     DrawablePtr pDraw;
@@ -644,30 +641,24 @@ ProcScreenSaverQueryInfo(ClientPtr client)
     UpdateCurrentTime();
     lastInput = GetTimeInMillis() - LastEventTime(XIAllDevices).milliseconds;
 
-    rep = (xScreenSaverQueryInfoReply) {
+    xScreenSaverQueryInfoReply rep = {
         .type = X_Reply,
         .sequenceNumber = client->sequence,
-        .length = 0,
         .window = pSaver->wid
     };
     if (screenIsSaved != SCREEN_SAVER_OFF) {
         rep.state = ScreenSaverOn;
         if (ScreenSaverTime)
             rep.tilOrSince = lastInput - ScreenSaverTime;
-        else
-            rep.tilOrSince = 0;
     }
     else {
         if (ScreenSaverTime) {
             rep.state = ScreenSaverOff;
-            if (ScreenSaverTime < lastInput)
-                rep.tilOrSince = 0;
-            else
+            if (ScreenSaverTime >= lastInput)
                 rep.tilOrSince = ScreenSaverTime - lastInput;
         }
         else {
             rep.state = ScreenSaverDisabled;
-            rep.tilOrSince = 0;
         }
     }
     rep.idle = lastInput;
@@ -680,7 +671,6 @@ ProcScreenSaverQueryInfo(ClientPtr client)
         rep.kind = ScreenSaverInternal;
     if (client->swapped) {
         swaps(&rep.sequenceNumber);
-        swapl(&rep.length);
         swapl(&rep.window);
         swapl(&rep.tilOrSince);
         swapl(&rep.idle);
commit fdb8c8ea41e77feb66c2ba0f55efc9e3c11cd1ba
Author: Enrico Weigelt, metux IT consult <info at metux.net>
Date:   Tue Jul 2 21:40:10 2024 +0200

    Xext: saver: fix missing swap in QueryVersion reply
    
    The `majorVersion` and `minorVersion` fields are CARD16, thus need to be swapped.
    OTOH, the lengths field is zero anyways, so no need to swap it.
    
    Signed-off-by: Enrico Weigelt, metux IT consult <info at metux.net>
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1591>

diff --git a/Xext/saver.c b/Xext/saver.c
index edb5102c3..cc637aad2 100644
--- a/Xext/saver.c
+++ b/Xext/saver.c
@@ -611,6 +611,8 @@ ProcScreenSaverQueryVersion(ClientPtr client)
     if (client->swapped) {
         swaps(&rep.sequenceNumber);
         swapl(&rep.length);
+        swaps(&rep.majorVersion);
+        swaps(&rep.minorVersion);
     }
     WriteToClient(client, sizeof(xScreenSaverQueryVersionReply), &rep);
     return Success;


More information about the xorg-commit mailing list