InitWcmAtom could only create properties of type XA_INTEGER or
XA_ATOM. This commit adds support for any atom type by means
of adding a type parameter to InitWcmAtom. All instances of
InitWcmAtom use are adapted to the new parameters.

This is a preparation for a new parameter of type XA_PIXMAP
needed for the upcoming OLED commit.

Signed-off-by: Eduard Hasenleithner <[email protected]>
---
 src/wcmXCommand.c |   62 +++++++++++++++++++++++++++++-----------------------
 1 files changed, 35 insertions(+), 27 deletions(-)

diff --git a/src/wcmXCommand.c b/src/wcmXCommand.c
index fe71bd1..82f9b80 100644
--- a/src/wcmXCommand.c
+++ b/src/wcmXCommand.c
@@ -102,8 +102,23 @@ Atom prop_product_id;
 Atom prop_debuglevels;
 #endif
 
-/* Special case: format -32 means type is XA_ATOM */
-static Atom InitWcmAtom(DeviceIntPtr dev, char *name, int format, int nvalues, 
int *values)
+/**
+ * Registers a property for the input device. This function registers
+ * the property name atom, as well as creates the property itself.
+ * At creation, the property values are initialized from the 'values'
+ * array. The device property is marked as non-deletable.
+ * Initialization values are always to be provided by means of an
+ * array of 32 bit integers, regardless of 'format'
+ *
+ * @param dev Pointer to device structure
+ * @param name Name of device property
+ * @param type Type of the property
+ * @param format Format of the property (8/16/32)
+ * @param nvalues Number of values in the property
+ * @param values Pointer to 32 bit integer array of initial property values
+ * @return Atom handle of property name
+ */
+static Atom InitWcmAtom(DeviceIntPtr dev, char *name, Atom type, int format, 
int nvalues, int *values)
 {
        int i;
        Atom atom;
@@ -111,13 +126,6 @@ static Atom InitWcmAtom(DeviceIntPtr dev, char *name, int 
format, int nvalues, i
        uint16_t val_16[WCM_MAX_MOUSE_BUTTONS];
        uint32_t val_32[WCM_MAX_MOUSE_BUTTONS];
        pointer converted = val_32;
-       Atom type = XA_INTEGER;
-
-       if (format == -32)
-       {
-               type = XA_ATOM;
-               format = 32;
-       }
 
        for (i = 0; i < nvalues; i++)
        {
@@ -163,83 +171,83 @@ void InitWcmDeviceProperties(InputInfoPtr pInfo)
                values[1] = priv->topY;
                values[2] = priv->bottomX;
                values[3] = priv->bottomY;
-               prop_tablet_area = InitWcmAtom(pInfo->dev, 
WACOM_PROP_TABLET_AREA, 32, 4, values);
+               prop_tablet_area = InitWcmAtom(pInfo->dev, 
WACOM_PROP_TABLET_AREA, XA_INTEGER, 32, 4, values);
        }
 
        values[0] = common->wcmRotate;
-       prop_rotation = InitWcmAtom(pInfo->dev, WACOM_PROP_ROTATION, 8, 1, 
values);
+       prop_rotation = InitWcmAtom(pInfo->dev, WACOM_PROP_ROTATION, 
XA_INTEGER, 8, 1, values);
 
        if (IsPen(priv) || IsTouch(priv)) {
                values[0] = priv->nPressCtrl[0];
                values[1] = priv->nPressCtrl[1];
                values[2] = priv->nPressCtrl[2];
                values[3] = priv->nPressCtrl[3];
-               prop_pressurecurve = InitWcmAtom(pInfo->dev, 
WACOM_PROP_PRESSURECURVE, 32, 4, values);
+               prop_pressurecurve = InitWcmAtom(pInfo->dev, 
WACOM_PROP_PRESSURECURVE, XA_INTEGER, 32, 4, values);
        }
 
        values[0] = common->tablet_id;
        values[1] = priv->old_serial;
        values[2] = priv->old_device_id;
        values[3] = priv->cur_serial;
-       prop_serials = InitWcmAtom(pInfo->dev, WACOM_PROP_SERIALIDS, 32, 4, 
values);
+       prop_serials = InitWcmAtom(pInfo->dev, WACOM_PROP_SERIALIDS, 
XA_INTEGER, 32, 4, values);
 
        values[0] = priv->serial;
-       prop_serial_binding = InitWcmAtom(pInfo->dev, WACOM_PROP_SERIAL_BIND, 
32, 1, values);
+       prop_serial_binding = InitWcmAtom(pInfo->dev, WACOM_PROP_SERIAL_BIND, 
XA_INTEGER, 32, 1, values);
 
        if (IsCursor(priv)) {
                values[0] = common->wcmCursorProxoutDist;
-               prop_cursorprox = InitWcmAtom(pInfo->dev, 
WACOM_PROP_PROXIMITY_THRESHOLD, 32, 1, values);
+               prop_cursorprox = InitWcmAtom(pInfo->dev, 
WACOM_PROP_PROXIMITY_THRESHOLD, XA_INTEGER, 32, 1, values);
        }
 
        values[0] = (!common->wcmMaxZ) ? 0 : common->wcmThreshold;
-       prop_threshold = InitWcmAtom(pInfo->dev, WACOM_PROP_PRESSURE_THRESHOLD, 
32, 1, values);
+       prop_threshold = InitWcmAtom(pInfo->dev, WACOM_PROP_PRESSURE_THRESHOLD, 
XA_INTEGER, 32, 1, values);
 
        values[0] = common->wcmSuppress;
        values[1] = common->wcmRawSample;
-       prop_suppress = InitWcmAtom(pInfo->dev, WACOM_PROP_SAMPLE, 32, 2, 
values);
+       prop_suppress = InitWcmAtom(pInfo->dev, WACOM_PROP_SAMPLE, XA_INTEGER, 
32, 2, values);
 
        values[0] = common->wcmTouch;
-       prop_touch = InitWcmAtom(pInfo->dev, WACOM_PROP_TOUCH, 8, 1, values);
+       prop_touch = InitWcmAtom(pInfo->dev, WACOM_PROP_TOUCH, XA_INTEGER, 8, 
1, values);
 
        if (IsStylus(priv)) {
                values[0] = !common->wcmTPCButton;
-               prop_hover = InitWcmAtom(pInfo->dev, WACOM_PROP_HOVER, 8, 1, 
values);
+               prop_hover = InitWcmAtom(pInfo->dev, WACOM_PROP_HOVER, 
XA_INTEGER, 8, 1, values);
        }
 
        values[0] = common->wcmGesture;
-       prop_gesture = InitWcmAtom(pInfo->dev, WACOM_PROP_ENABLE_GESTURE, 8, 1, 
values);
+       prop_gesture = InitWcmAtom(pInfo->dev, WACOM_PROP_ENABLE_GESTURE, 
XA_INTEGER, 8, 1, values);
 
        values[0] = common->wcmGestureParameters.wcmZoomDistance;
        values[1] = common->wcmGestureParameters.wcmScrollDistance;
        values[2] = common->wcmGestureParameters.wcmTapTime;
-       prop_gesture_param = InitWcmAtom(pInfo->dev, 
WACOM_PROP_GESTURE_PARAMETERS, 32, 3, values);
+       prop_gesture_param = InitWcmAtom(pInfo->dev, 
WACOM_PROP_GESTURE_PARAMETERS, XA_INTEGER, 32, 3, values);
 
        values[0] = MakeAtom(pInfo->type_name, strlen(pInfo->type_name), TRUE);
-       prop_tooltype = InitWcmAtom(pInfo->dev, WACOM_PROP_TOOL_TYPE, -32, 1, 
values);
+       prop_tooltype = InitWcmAtom(pInfo->dev, WACOM_PROP_TOOL_TYPE, XA_ATOM, 
32, 1, values);
 
        /* default to no actions */
        memset(values, 0, sizeof(values));
-       prop_btnactions = InitWcmAtom(pInfo->dev, WACOM_PROP_BUTTON_ACTIONS, 
-32, WCM_MAX_MOUSE_BUTTONS, values);
+       prop_btnactions = InitWcmAtom(pInfo->dev, WACOM_PROP_BUTTON_ACTIONS, 
XA_ATOM, 32, WCM_MAX_MOUSE_BUTTONS, values);
 
        if (IsPad(priv)) {
                memset(values, 0, sizeof(values));
-               prop_strip_buttons = InitWcmAtom(pInfo->dev, 
WACOM_PROP_STRIPBUTTONS, -32, 4, values);
+               prop_strip_buttons = InitWcmAtom(pInfo->dev, 
WACOM_PROP_STRIPBUTTONS, XA_ATOM, 32, 4, values);
        }
 
        if (IsPad(priv) || IsCursor(priv))
        {
                memset(values, 0, sizeof(values));
-               prop_wheel_buttons = InitWcmAtom(pInfo->dev, 
WACOM_PROP_WHEELBUTTONS, -32, 4, values);
+               prop_wheel_buttons = InitWcmAtom(pInfo->dev, 
WACOM_PROP_WHEELBUTTONS, XA_ATOM, 32, 4, values);
        }
 
        values[0] = common->vendor_id;
        values[1] = common->tablet_id;
-       prop_product_id = InitWcmAtom(pInfo->dev, XI_PROP_PRODUCT_ID, 32, 2, 
values);
+       prop_product_id = InitWcmAtom(pInfo->dev, XI_PROP_PRODUCT_ID, 
XA_INTEGER, 32, 2, values);
 
 #ifdef DEBUG
        values[0] = priv->debugLevel;
        values[1] = common->debugLevel;
-       prop_debuglevels = InitWcmAtom(pInfo->dev, WACOM_PROP_DEBUGLEVELS, 8, 
2, values);
+       prop_debuglevels = InitWcmAtom(pInfo->dev, WACOM_PROP_DEBUGLEVELS, 
XA_INTEGER, 8, 2, values);
 #endif
 }
 
-- 
1.7.5.4


------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security
threats, fraudulent activity, and more. Splunk takes this data and makes
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2dcopy2
_______________________________________________
Linuxwacom-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to