[PATCH:xscope 18/24] Add support for printing more types of property value

Alan Coopersmith alan.coopersmith at oracle.com
Fri Aug 31 22:18:00 PDT 2012


Prints atoms, cardinals, integers, and windows as formatted values
instead of lists of bytes.

Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
---
 prtype.c |   45 +++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 43 insertions(+), 2 deletions(-)

diff --git a/prtype.c b/prtype.c
index 04f36cf..182e809 100644
--- a/prtype.c
+++ b/prtype.c
@@ -1037,8 +1037,48 @@ int
 PrintPropertyValues(const unsigned char *buf, uint32_t type /* atom */,
                     uint8_t unit, uint32_t num, const char *name)
 {
-    if (type == 31 /* string */)
+    short fieldType = 0;
+
+    switch (type) {
+    case 4: /* XA_ATOM */
+        fieldType = ATOM;
+        break;
+    case 6: /* XA_CARDINAL */
+        switch (unit) {
+        case 4: fieldType = CARD32; break;
+        case 2: fieldType = CARD16; break;
+        case 1: fieldType = CARD8;  break;
+        default:
+            goto rawbytes;
+        }
+        break;
+    case 19: /* XA_INTEGER */
+        switch (unit) {
+        case 4: fieldType = INT32; break;
+        case 2: fieldType = INT16; break;
+        case 1: fieldType = INT8;  break;
+        default:
+            goto rawbytes;
+        }
+        break;
+    case 31: /* XA_STRING */
         return PrintString8(buf, num * unit, name);
+    case 33: /* XA_WINDOW */
+        fieldType = WINDOW;
+        break;
+    default:
+        /* Fall through to check for known non-builtin types below */
+        break;
+    }
+
+    if (fieldType != 0) {
+        if (num == 1) {
+            PrintField(buf, 0, unit, fieldType, name);
+            return unit;
+        }
+        else
+            return PrintList(buf, num, fieldType, name);
+    }
     else {
         const char *typename = FindAtomName(type);
 
@@ -1047,11 +1087,12 @@ PrintPropertyValues(const unsigned char *buf, uint32_t type /* atom */,
                 if (IsUTF8locale)
                     return PrintString8(buf, num * unit, name);
                 else
-                    return PrintBytes(buf, num * unit, name);
+                    goto rawbytes;
             }
         }
     }
 
+  rawbytes:
     /* When all else fails, print raw bytes */
     return PrintBytes(buf, num * unit, name);
 }
-- 
1.7.9.2



More information about the xorg-devel mailing list