about summary refs log tree commit diff stats
path: root/src/libtools
diff options
context:
space:
mode:
Diffstat (limited to 'src/libtools')
-rw-r--r--src/libtools/my_x11_conv.c32
-rw-r--r--src/libtools/my_x11_conv.h3
-rw-r--r--src/libtools/my_x11_defs.h7
-rw-r--r--src/libtools/my_x11_defs_32.h7
4 files changed, 49 insertions, 0 deletions
diff --git a/src/libtools/my_x11_conv.c b/src/libtools/my_x11_conv.c
index eb1dadbd..816f9b9b 100644
--- a/src/libtools/my_x11_conv.c
+++ b/src/libtools/my_x11_conv.c
@@ -1407,3 +1407,35 @@ void* inplace_XDeviceInfo_enlarge(void* a)
     }
     return a;
 }
+
+
+void* inplace_XFilters_shrink(void* a)
+{
+    if(a) {
+        my_XFilters_t* src = a;
+        my_XFilters_32_t* dst = a;
+        dst->nfilter = src->nfilter;
+        char** filter = src->filter;
+        dst->filter = to_ptrv(filter);
+        dst->nalias = src->nalias;
+        dst->alias = to_ptrv(src->alias);
+        for(int i=0; i<dst->nfilter; ++i)
+            ((ptr_t*)(filter))[i] = to_ptrv(filter[i]);
+    }
+    return a;
+}
+void* inplace_XFilters_enlarge(void* a)
+{
+    if(a) {
+        my_XFilters_t* dst = a;
+        my_XFilters_32_t* src = a;
+        dst->alias = from_ptrv(src->alias);
+        dst->nalias = src->nalias;
+        dst->filter = from_ptrv(src->filter);
+        dst->nfilter = src->nfilter;
+        char** filter = dst->filter;
+        for(int i=dst->nfilter-1; i>=0; --i)
+            filter[i] = from_ptrv(((ptr_t*)(filter))[i]);
+    }
+    return a;
+}
diff --git a/src/libtools/my_x11_conv.h b/src/libtools/my_x11_conv.h
index ed5b5523..01596f78 100644
--- a/src/libtools/my_x11_conv.h
+++ b/src/libtools/my_x11_conv.h
@@ -113,4 +113,7 @@ void* inplace_XAnyClassInfo_enlarge(void* a);
 void* inplace_XDeviceInfo_shrink(void* a, int n);
 void* inplace_XDeviceInfo_enlarge(void* a);
 
+void* inplace_XFilters_shrink(void* a);
+void* inplace_XFilters_enlarge(void* a);
+
 #endif//MY_X11_CONV
\ No newline at end of file
diff --git a/src/libtools/my_x11_defs.h b/src/libtools/my_x11_defs.h
index 0cf6081d..b2b64dad 100644
--- a/src/libtools/my_x11_defs.h
+++ b/src/libtools/my_x11_defs.h
@@ -1465,4 +1465,11 @@ typedef struct my_XFixesCursorImage_s {
     void*           name;                  /* Version >= 2 only */
 } my_XFixesCursorImage_t;
 
+typedef struct my_XFilters_s {
+    int nfilter;
+    char **filter;
+    int nalias;
+    short *alias;
+} my_XFilters_t;
+
 #endif//MY_X11_DEFS
\ No newline at end of file
diff --git a/src/libtools/my_x11_defs_32.h b/src/libtools/my_x11_defs_32.h
index 01144d1f..5d596485 100644
--- a/src/libtools/my_x11_defs_32.h
+++ b/src/libtools/my_x11_defs_32.h
@@ -1407,4 +1407,11 @@ typedef struct my_XFixesCursorImage_32_s {
     ptr_t           name;                  /* Version >= 2 only */
 } my_XFixesCursorImage_32_t;
 
+typedef struct my_XFilters_32_s {
+    int nfilter;
+    ptr_t filter;   //char **
+    int nalias;
+    ptr_t alias;    //short *
+} my_XFilters_32_t;
+
 #endif//MY_X11_DEFS_32
\ No newline at end of file