summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2016-04-09 15:20:07 -0400
committerMatthias Clasen <mclasen@redhat.com>2016-04-09 15:48:34 -0400
commit9044f78751b1f795257bcd35ac37b8d39b0ae3be (patch)
tree100421d831ccc4333d771ba3e370079465a92c71
parent6db7de3f7ba42d667c305d76aaef55f09e0c26d9 (diff)
downloadgtk+-9044f78751b1f795257bcd35ac37b8d39b0ae3be.tar.gz
Move GdkDeviceTool into its own files
-rw-r--r--gdk/Makefile.am3
-rw-r--r--gdk/gdk.h1
-rw-r--r--gdk/gdkdevice.c149
-rw-r--r--gdk/gdkdevice.h103
-rw-r--r--gdk/gdkdeviceprivate.h19
-rw-r--r--gdk/gdkdevicetool.c173
-rw-r--r--gdk/gdkdevicetool.h75
-rw-r--r--gdk/gdkdevicetoolprivate.h46
-rw-r--r--gdk/gdkevents.h1
-rw-r--r--gdk/gdkseatdefault.c2
-rw-r--r--gdk/gdktypes.h62
-rw-r--r--gdk/wayland/gdkdevice-wayland.c1
-rw-r--r--gdk/x11/gdkdevicemanager-xi2.c1
13 files changed, 366 insertions, 270 deletions
diff --git a/gdk/Makefile.am b/gdk/Makefile.am
index d8340eec2c..b2d0c5c25e 100644
--- a/gdk/Makefile.am
+++ b/gdk/Makefile.am
@@ -66,6 +66,7 @@ gdk_public_h_sources = \
gdkcairo.h \
gdkcursor.h \
gdkdevice.h \
+ gdkdevicetool.h \
gdkdevicemanager.h \
gdkdisplay.h \
gdkdisplaymanager.h \
@@ -106,6 +107,7 @@ gdk_private_headers = \
gdkcursorprivate.h \
gdkdevicemanagerprivate.h \
gdkdeviceprivate.h \
+ gdkdevicetoolprivate.h \
gdkdisplaymanagerprivate.h \
gdkdisplayprivate.h \
gdkdndprivate.h \
@@ -133,6 +135,7 @@ gdk_c_sources = \
gdkcursor.c \
gdkdeprecated.c \
gdkdevice.c \
+ gdkdevicetool.c \
gdkdevicemanager.c \
gdkdisplay.c \
gdkdisplaymanager.c \
diff --git a/gdk/gdk.h b/gdk/gdk.h
index 81ba7658af..11b8d566d2 100644
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -33,6 +33,7 @@
#include <gdk/gdkcairo.h>
#include <gdk/gdkcursor.h>
#include <gdk/gdkdevice.h>
+#include <gdk/gdkdevicetool.h>
#include <gdk/gdkdevicemanager.h>
#include <gdk/gdkdisplay.h>
#include <gdk/gdkdisplaymanager.h>
diff --git a/gdk/gdkdevice.c b/gdk/gdkdevice.c
index 58c5d24fab..75c6cd2c6d 100644
--- a/gdk/gdkdevice.c
+++ b/gdk/gdkdevice.c
@@ -20,6 +20,7 @@
#include <math.h>
#include "gdkdeviceprivate.h"
+#include "gdkdevicetool.h"
#include "gdkdisplayprivate.h"
#include "gdkinternals.h"
#include "gdkintl.h"
@@ -2025,116 +2026,6 @@ gdk_device_get_axes (GdkDevice *device)
return device->axis_flags;
}
-G_DEFINE_TYPE (GdkDeviceTool, gdk_device_tool, G_TYPE_OBJECT)
-
-enum {
- TOOL_PROP_0,
- TOOL_PROP_SERIAL,
- TOOL_PROP_TOOL_TYPE,
- TOOL_PROP_AXES,
- N_TOOL_PROPS
-};
-
-GParamSpec *tool_props[N_TOOL_PROPS] = { 0 };
-
-static void
-gdk_device_tool_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GdkDeviceTool *tool = GDK_DEVICE_TOOL (object);
-
- switch (prop_id)
- {
- case TOOL_PROP_SERIAL:
- tool->serial = g_value_get_uint64 (value);
- break;
- case TOOL_PROP_TOOL_TYPE:
- tool->type = g_value_get_enum (value);
- break;
- case TOOL_PROP_AXES:
- tool->tool_axes = g_value_get_flags (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gdk_device_tool_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GdkDeviceTool *tool = GDK_DEVICE_TOOL (object);
-
- switch (prop_id)
- {
- case TOOL_PROP_SERIAL:
- g_value_set_uint64 (value, tool->serial);
- break;
- case TOOL_PROP_TOOL_TYPE:
- g_value_set_enum (value, tool->type);
- break;
- case TOOL_PROP_AXES:
- g_value_set_flags (value, tool->tool_axes);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gdk_device_tool_class_init (GdkDeviceToolClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->set_property = gdk_device_tool_set_property;
- object_class->get_property = gdk_device_tool_get_property;
-
- tool_props[TOOL_PROP_SERIAL] = g_param_spec_uint64 ("serial",
- "Serial",
- "Serial number",
- 0, G_MAXUINT64, 0,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY);
- tool_props[TOOL_PROP_TOOL_TYPE] = g_param_spec_enum ("tool-type",
- "Tool type",
- "Tool type",
- GDK_TYPE_DEVICE_TOOL_TYPE,
- GDK_DEVICE_TOOL_TYPE_UNKNOWN,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY);
- tool_props[TOOL_PROP_AXES] = g_param_spec_flags ("axes",
- "Axes",
- "Tool axes",
- GDK_TYPE_AXIS_FLAGS, 0,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY);
-
- g_object_class_install_properties (object_class, N_TOOL_PROPS, tool_props);
-}
-
-static void
-gdk_device_tool_init (GdkDeviceTool *tool)
-{
-}
-
-GdkDeviceTool *
-gdk_device_tool_new (guint64 serial,
- GdkDeviceToolType type,
- GdkAxisFlags tool_axes)
-{
- return g_object_new (GDK_TYPE_DEVICE_TOOL,
- "serial", serial,
- "tool-type", type,
- "axes", tool_axes,
- NULL);
-}
-
void
gdk_device_update_tool (GdkDevice *device,
GdkDeviceTool *tool)
@@ -2145,41 +2036,3 @@ gdk_device_update_tool (GdkDevice *device,
if (g_set_object (&device->last_tool, tool))
g_signal_emit (device, signals[TOOL_CHANGED], 0, tool);
}
-
-/**
- * gdk_device_tool_get_serial:
- * @tool: a #GdkDeviceTool
- *
- * Gets the serial of this tool, this value can be used to identify a
- * physical tool (eg. a tablet pen) across program executions.
- *
- * Returns: The serial ID for this tool
- *
- * Since: 3.22
- **/
-guint
-gdk_device_tool_get_serial (GdkDeviceTool *tool)
-{
- g_return_val_if_fail (tool != NULL, 0);
-
- return tool->serial;
-}
-
-/**
- * gdk_device_tool_get_tool_type:
- * @tool: a #GdkDeviceTool
- *
- * Gets the #GdkDeviceToolType of the tool.
- *
- * Returns: The physical type for this tool. This can be used to figure out what
- * sort of pen is being used, such as an airbrush or a pencil.
- *
- * Since: 3.22
- **/
-GdkDeviceToolType
-gdk_device_tool_get_tool_type (GdkDeviceTool *tool)
-{
- g_return_val_if_fail (tool != NULL, GDK_DEVICE_TOOL_TYPE_UNKNOWN);
-
- return tool->type;
-}
diff --git a/gdk/gdkdevice.h b/gdk/gdkdevice.h
index 495c4dc20b..69fa99a01a 100644
--- a/gdk/gdkdevice.h
+++ b/gdk/gdkdevice.h
@@ -32,12 +32,7 @@ G_BEGIN_DECLS
#define GDK_DEVICE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDK_TYPE_DEVICE, GdkDevice))
#define GDK_IS_DEVICE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDK_TYPE_DEVICE))
-#define GDK_TYPE_DEVICE_TOOL (gdk_device_tool_get_type ())
-#define GDK_DEVICE_TOOL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDK_TYPE_DEVICE_TOOL, GdkDeviceTool))
-#define GDK_IS_DEVICE_TOOL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDK_TYPE_DEVICE_TOOL))
-
typedef struct _GdkTimeCoord GdkTimeCoord;
-typedef struct _GdkDeviceTool GdkDeviceTool;
/**
* GdkInputSource:
@@ -86,68 +81,6 @@ typedef enum
} GdkInputMode;
/**
- * GdkAxisUse:
- * @GDK_AXIS_IGNORE: the axis is ignored.
- * @GDK_AXIS_X: the axis is used as the x axis.
- * @GDK_AXIS_Y: the axis is used as the y axis.
- * @GDK_AXIS_PRESSURE: the axis is used for pressure information.
- * @GDK_AXIS_XTILT: the axis is used for x tilt information.
- * @GDK_AXIS_YTILT: the axis is used for y tilt information.
- * @GDK_AXIS_WHEEL: the axis is used for wheel information.
- * @GDK_AXIS_DISTANCE: the axis is used for pen/tablet distance information. (Since: 3.22)
- * @GDK_AXIS_ROTATION: the axis is used for pen rotation information. (Since: 3.22)
- * @GDK_AXIS_SLIDER: the axis is used for pen slider information. (Since: 3.22)
- * @GDK_AXIS_LAST: a constant equal to the numerically highest axis value.
- *
- * An enumeration describing the way in which a device
- * axis (valuator) maps onto the predefined valuator
- * types that GTK+ understands.
- */
-typedef enum
-{
- GDK_AXIS_IGNORE,
- GDK_AXIS_X,
- GDK_AXIS_Y,
- GDK_AXIS_PRESSURE,
- GDK_AXIS_XTILT,
- GDK_AXIS_YTILT,
- GDK_AXIS_WHEEL,
- GDK_AXIS_DISTANCE,
- GDK_AXIS_ROTATION,
- GDK_AXIS_SLIDER,
- GDK_AXIS_LAST
-} GdkAxisUse;
-
-/**
- * GdkAxisFlags:
- * @GDK_AXIS_FLAG_X: X axis is present
- * @GDK_AXIS_FLAG_Y: Y axis is present
- * @GDK_AXIS_FLAG_PRESSURE: Pressure axis is present
- * @GDK_AXIS_FLAG_XTILT: X tilt axis is present
- * @GDK_AXIS_FLAG_YTILT: Y tilt axis is present
- * @GDK_AXIS_FLAG_WHEEL: Wheel axis is present
- * @GDK_AXIS_FLAG_DISTANCE: Distance axis is present
- * @GDK_AXIS_FLAG_ROTATION: Z-axis rotation is present
- * @GDK_AXIS_FLAG_SLIDER: Slider axis is present
- *
- * Flags describing the current capabilities of a device/tool.
- *
- * Since: 3.22
- */
-typedef enum
-{
- GDK_AXIS_FLAG_X = 1 << GDK_AXIS_X,
- GDK_AXIS_FLAG_Y = 1 << GDK_AXIS_Y,
- GDK_AXIS_FLAG_PRESSURE = 1 << GDK_AXIS_PRESSURE,
- GDK_AXIS_FLAG_XTILT = 1 << GDK_AXIS_XTILT,
- GDK_AXIS_FLAG_YTILT = 1 << GDK_AXIS_YTILT,
- GDK_AXIS_FLAG_WHEEL = 1 << GDK_AXIS_WHEEL,
- GDK_AXIS_FLAG_DISTANCE = 1 << GDK_AXIS_DISTANCE,
- GDK_AXIS_FLAG_ROTATION = 1 << GDK_AXIS_ROTATION,
- GDK_AXIS_FLAG_SLIDER = 1 << GDK_AXIS_SLIDER,
-} GdkAxisFlags;
-
-/**
* GdkDeviceType:
* @GDK_DEVICE_TYPE_MASTER: Device is a master (or virtual) device. There will
* be an associated focus indicator on the screen.
@@ -164,33 +97,6 @@ typedef enum {
GDK_DEVICE_TYPE_FLOATING
} GdkDeviceType;
-/**
- * GdkDeviceToolType:
- * @GDK_DEVICE_TOOL_TYPE_UNKNOWN: Tool is of an unknown type.
- * @GDK_DEVICE_TOOL_TYPE_PEN: Tool is a standard tablet stylus.
- * @GDK_DEVICE_TOOL_TYPE_ERASER: Tool is standard tablet eraser.
- * @GDK_DEVICE_TOOL_TYPE_BRUSH: Tool is a brush stylus.
- * @GDK_DEVICE_TOOL_TYPE_PENCIL: Tool is a pencil stylus.
- * @GDK_DEVICE_TOOL_TYPE_AIRBRUSH: Tool is an airbrush stylus.
- * @GDK_DEVICE_TOOL_TYPE_MOUSE: Tool is a mouse.
- * @GDK_DEVICE_TOOL_TYPE_LENS: Tool is a lens cursor.
- *
- * Indicates the specific type of tool being used being a tablet. Such as an
- * airbrush, pencil, etc.
- *
- * Since: 3.22
- */
-typedef enum {
- GDK_DEVICE_TOOL_TYPE_UNKNOWN,
- GDK_DEVICE_TOOL_TYPE_PEN,
- GDK_DEVICE_TOOL_TYPE_ERASER,
- GDK_DEVICE_TOOL_TYPE_BRUSH,
- GDK_DEVICE_TOOL_TYPE_PENCIL,
- GDK_DEVICE_TOOL_TYPE_AIRBRUSH,
- GDK_DEVICE_TOOL_TYPE_MOUSE,
- GDK_DEVICE_TOOL_TYPE_LENS,
-} GdkDeviceToolType;
-
/* We don't allocate each coordinate this big, but we use it to
* be ANSI compliant and avoid accessing past the defined limits.
*/
@@ -352,15 +258,6 @@ GdkSeat *gdk_device_get_seat (GdkDevice *device);
GDK_AVAILABLE_IN_3_22
GdkAxisFlags gdk_device_get_axes (GdkDevice *device);
-GDK_AVAILABLE_IN_3_22
-GType gdk_device_tool_get_type (void) G_GNUC_CONST;
-
-GDK_AVAILABLE_IN_3_22
-guint gdk_device_tool_get_serial (GdkDeviceTool *tool);
-
-GDK_AVAILABLE_IN_3_22
-GdkDeviceToolType gdk_device_tool_get_tool_type (GdkDeviceTool *tool);
-
G_END_DECLS
#endif /* __GDK_DEVICE_H__ */
diff --git a/gdk/gdkdeviceprivate.h b/gdk/gdkdeviceprivate.h
index d0007ea9b4..2bf96eb6c1 100644
--- a/gdk/gdkdeviceprivate.h
+++ b/gdk/gdkdeviceprivate.h
@@ -19,6 +19,7 @@
#define __GDK_DEVICE_PRIVATE_H__
#include "gdkdevice.h"
+#include "gdkdevicetool.h"
#include "gdkdevicemanager.h"
#include "gdkevents.h"
#include "gdkseat.h"
@@ -30,22 +31,8 @@ G_BEGIN_DECLS
#define GDK_DEVICE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDK_TYPE_DEVICE, GdkDeviceClass))
typedef struct _GdkDeviceClass GdkDeviceClass;
-typedef struct _GdkDeviceToolClass GdkDeviceToolClass;
typedef struct _GdkDeviceKey GdkDeviceKey;
-struct _GdkDeviceTool
-{
- GObject parent_instance;
- guint64 serial;
- GdkDeviceToolType type;
- GdkAxisFlags tool_axes;
-};
-
-struct _GdkDeviceToolClass
-{
- GObjectClass parent_class;
-};
-
struct _GdkDeviceKey
{
guint keyval;
@@ -199,10 +186,6 @@ GdkWindow * _gdk_device_window_at_position (GdkDevice *device,
void gdk_device_set_seat (GdkDevice *device,
GdkSeat *seat);
-/* Device tools */
-GdkDeviceTool *gdk_device_tool_new (guint64 serial,
- GdkDeviceToolType type,
- GdkAxisFlags tool_axes);
void gdk_device_update_tool (GdkDevice *device,
GdkDeviceTool *tool);
diff --git a/gdk/gdkdevicetool.c b/gdk/gdkdevicetool.c
new file mode 100644
index 0000000000..54076b6481
--- /dev/null
+++ b/gdk/gdkdevicetool.c
@@ -0,0 +1,173 @@
+/* GDK - The GIMP Drawing Kit
+ * Copyright (C) 2009 Carlos Garnacho <carlosg@gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <math.h>
+
+#include "gdkdevicetoolprivate.h"
+#include "gdkinternals.h"
+#include "gdkintl.h"
+
+
+G_DEFINE_TYPE (GdkDeviceTool, gdk_device_tool, G_TYPE_OBJECT)
+
+enum {
+ TOOL_PROP_0,
+ TOOL_PROP_SERIAL,
+ TOOL_PROP_TOOL_TYPE,
+ TOOL_PROP_AXES,
+ N_TOOL_PROPS
+};
+
+GParamSpec *tool_props[N_TOOL_PROPS] = { 0 };
+
+static void
+gdk_device_tool_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GdkDeviceTool *tool = GDK_DEVICE_TOOL (object);
+
+ switch (prop_id)
+ {
+ case TOOL_PROP_SERIAL:
+ tool->serial = g_value_get_uint64 (value);
+ break;
+ case TOOL_PROP_TOOL_TYPE:
+ tool->type = g_value_get_enum (value);
+ break;
+ case TOOL_PROP_AXES:
+ tool->tool_axes = g_value_get_flags (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gdk_device_tool_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GdkDeviceTool *tool = GDK_DEVICE_TOOL (object);
+
+ switch (prop_id)
+ {
+ case TOOL_PROP_SERIAL:
+ g_value_set_uint64 (value, tool->serial);
+ break;
+ case TOOL_PROP_TOOL_TYPE:
+ g_value_set_enum (value, tool->type);
+ break;
+ case TOOL_PROP_AXES:
+ g_value_set_flags (value, tool->tool_axes);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gdk_device_tool_class_init (GdkDeviceToolClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->set_property = gdk_device_tool_set_property;
+ object_class->get_property = gdk_device_tool_get_property;
+
+ tool_props[TOOL_PROP_SERIAL] = g_param_spec_uint64 ("serial",
+ "Serial",
+ "Serial number",
+ 0, G_MAXUINT64, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY);
+ tool_props[TOOL_PROP_TOOL_TYPE] = g_param_spec_enum ("tool-type",
+ "Tool type",
+ "Tool type",
+ GDK_TYPE_DEVICE_TOOL_TYPE,
+ GDK_DEVICE_TOOL_TYPE_UNKNOWN,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY);
+ tool_props[TOOL_PROP_AXES] = g_param_spec_flags ("axes",
+ "Axes",
+ "Tool axes",
+ GDK_TYPE_AXIS_FLAGS, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY);
+
+ g_object_class_install_properties (object_class, N_TOOL_PROPS, tool_props);
+}
+
+static void
+gdk_device_tool_init (GdkDeviceTool *tool)
+{
+}
+
+GdkDeviceTool *
+gdk_device_tool_new (guint64 serial,
+ GdkDeviceToolType type,
+ GdkAxisFlags tool_axes)
+{
+ return g_object_new (GDK_TYPE_DEVICE_TOOL,
+ "serial", serial,
+ "tool-type", type,
+ "axes", tool_axes,
+ NULL);
+}
+
+/**
+ * gdk_device_tool_get_serial:
+ * @tool: a #GdkDeviceTool
+ *
+ * Gets the serial of this tool, this value can be used to identify a
+ * physical tool (eg. a tablet pen) across program executions.
+ *
+ * Returns: The serial ID for this tool
+ *
+ * Since: 3.22
+ **/
+guint
+gdk_device_tool_get_serial (GdkDeviceTool *tool)
+{
+ g_return_val_if_fail (tool != NULL, 0);
+
+ return tool->serial;
+}
+
+/**
+ * gdk_device_tool_get_tool_type:
+ * @tool: a #GdkDeviceTool
+ *
+ * Gets the #GdkDeviceToolType of the tool.
+ *
+ * Returns: The physical type for this tool. This can be used to figure out what
+ * sort of pen is being used, such as an airbrush or a pencil.
+ *
+ * Since: 3.22
+ **/
+GdkDeviceToolType
+gdk_device_tool_get_tool_type (GdkDeviceTool *tool)
+{
+ g_return_val_if_fail (tool != NULL, GDK_DEVICE_TOOL_TYPE_UNKNOWN);
+
+ return tool->type;
+}
diff --git a/gdk/gdkdevicetool.h b/gdk/gdkdevicetool.h
new file mode 100644
index 0000000000..9a00d8a866
--- /dev/null
+++ b/gdk/gdkdevicetool.h
@@ -0,0 +1,75 @@
+/* GDK - The GIMP Drawing Kit
+ * Copyright (C) 2009 Carlos Garnacho <carlosg@gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GDK_DEVICE_TOOL_H__
+#define __GDK_DEVICE_TOOL_H__
+
+#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
+#error "Only <gdk/gdk.h> can be included directly."
+#endif
+
+#include <gdk/gdkversionmacros.h>
+#include <gdk/gdktypes.h>
+
+
+G_BEGIN_DECLS
+
+#define GDK_TYPE_DEVICE_TOOL (gdk_device_tool_get_type ())
+#define GDK_DEVICE_TOOL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDK_TYPE_DEVICE_TOOL, GdkDeviceTool))
+#define GDK_IS_DEVICE_TOOL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDK_TYPE_DEVICE_TOOL))
+
+typedef struct _GdkDeviceTool GdkDeviceTool;
+
+/**
+ * GdkDeviceToolType:
+ * @GDK_DEVICE_TOOL_TYPE_UNKNOWN: Tool is of an unknown type.
+ * @GDK_DEVICE_TOOL_TYPE_PEN: Tool is a standard tablet stylus.
+ * @GDK_DEVICE_TOOL_TYPE_ERASER: Tool is standard tablet eraser.
+ * @GDK_DEVICE_TOOL_TYPE_BRUSH: Tool is a brush stylus.
+ * @GDK_DEVICE_TOOL_TYPE_PENCIL: Tool is a pencil stylus.
+ * @GDK_DEVICE_TOOL_TYPE_AIRBRUSH: Tool is an airbrush stylus.
+ * @GDK_DEVICE_TOOL_TYPE_MOUSE: Tool is a mouse.
+ * @GDK_DEVICE_TOOL_TYPE_LENS: Tool is a lens cursor.
+ *
+ * Indicates the specific type of tool being used being a tablet. Such as an
+ * airbrush, pencil, etc.
+ *
+ * Since: 3.22
+ */
+typedef enum {
+ GDK_DEVICE_TOOL_TYPE_UNKNOWN,
+ GDK_DEVICE_TOOL_TYPE_PEN,
+ GDK_DEVICE_TOOL_TYPE_ERASER,
+ GDK_DEVICE_TOOL_TYPE_BRUSH,
+ GDK_DEVICE_TOOL_TYPE_PENCIL,
+ GDK_DEVICE_TOOL_TYPE_AIRBRUSH,
+ GDK_DEVICE_TOOL_TYPE_MOUSE,
+ GDK_DEVICE_TOOL_TYPE_LENS,
+} GdkDeviceToolType;
+
+GDK_AVAILABLE_IN_3_22
+GType gdk_device_tool_get_type (void) G_GNUC_CONST;
+
+GDK_AVAILABLE_IN_3_22
+guint gdk_device_tool_get_serial (GdkDeviceTool *tool);
+
+GDK_AVAILABLE_IN_3_22
+GdkDeviceToolType gdk_device_tool_get_tool_type (GdkDeviceTool *tool);
+
+G_END_DECLS
+
+#endif /* __GDK_DEVICE_TOOL_H__ */
diff --git a/gdk/gdkdevicetoolprivate.h b/gdk/gdkdevicetoolprivate.h
new file mode 100644
index 0000000000..ff9a40403e
--- /dev/null
+++ b/gdk/gdkdevicetoolprivate.h
@@ -0,0 +1,46 @@
+/* GDK - The GIMP Drawing Kit
+ * Copyright (C) 2009 Carlos Garnacho <carlosg@gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GDK_DEVICE_TOOL_PRIVATE_H__
+#define __GDK_DEVICE_TOOL_PRIVATE_H__
+
+#include "gdkdevicetool.h"
+
+G_BEGIN_DECLS
+
+typedef struct _GdkDeviceToolClass GdkDeviceToolClass;
+
+struct _GdkDeviceTool
+{
+ GObject parent_instance;
+ guint64 serial;
+ GdkDeviceToolType type;
+ GdkAxisFlags tool_axes;
+};
+
+struct _GdkDeviceToolClass
+{
+ GObjectClass parent_class;
+};
+
+GdkDeviceTool *gdk_device_tool_new (guint64 serial,
+ GdkDeviceToolType type,
+ GdkAxisFlags tool_axes);
+
+G_END_DECLS
+
+#endif /* __GDK_DEVICE_TOOL_PRIVATE_H__ */
diff --git a/gdk/gdkevents.h b/gdk/gdkevents.h
index 286b051fd8..3e7824f5cc 100644
--- a/gdk/gdkevents.h
+++ b/gdk/gdkevents.h
@@ -33,6 +33,7 @@
#include <gdk/gdktypes.h>
#include <gdk/gdkdnd.h>
#include <gdk/gdkdevice.h>
+#include <gdk/gdkdevicetool.h>
G_BEGIN_DECLS
diff --git a/gdk/gdkseatdefault.c b/gdk/gdkseatdefault.c
index 87150642c9..dc3f2887d3 100644
--- a/gdk/gdkseatdefault.c
+++ b/gdk/gdkseatdefault.c
@@ -18,7 +18,7 @@
*/
#include "gdkseatdefaultprivate.h"
-#include "gdkdeviceprivate.h"
+#include "gdkdevicetoolprivate.h"
typedef struct _GdkSeatDefaultPrivate GdkSeatDefaultPrivate;
diff --git a/gdk/gdktypes.h b/gdk/gdktypes.h
index 01366fd6b7..690cc499e1 100644
--- a/gdk/gdktypes.h
+++ b/gdk/gdktypes.h
@@ -529,6 +529,68 @@ typedef enum
GDK_WINDOW_TYPE_HINT_DND
} GdkWindowTypeHint;
+/**
+ * GdkAxisUse:
+ * @GDK_AXIS_IGNORE: the axis is ignored.
+ * @GDK_AXIS_X: the axis is used as the x axis.
+ * @GDK_AXIS_Y: the axis is used as the y axis.
+ * @GDK_AXIS_PRESSURE: the axis is used for pressure information.
+ * @GDK_AXIS_XTILT: the axis is used for x tilt information.
+ * @GDK_AXIS_YTILT: the axis is used for y tilt information.
+ * @GDK_AXIS_WHEEL: the axis is used for wheel information.
+ * @GDK_AXIS_DISTANCE: the axis is used for pen/tablet distance information. (Since: 3.22)
+ * @GDK_AXIS_ROTATION: the axis is used for pen rotation information. (Since: 3.22)
+ * @GDK_AXIS_SLIDER: the axis is used for pen slider information. (Since: 3.22)
+ * @GDK_AXIS_LAST: a constant equal to the numerically highest axis value.
+ *
+ * An enumeration describing the way in which a device
+ * axis (valuator) maps onto the predefined valuator
+ * types that GTK+ understands.
+ */
+typedef enum
+{
+ GDK_AXIS_IGNORE,
+ GDK_AXIS_X,
+ GDK_AXIS_Y,
+ GDK_AXIS_PRESSURE,
+ GDK_AXIS_XTILT,
+ GDK_AXIS_YTILT,
+ GDK_AXIS_WHEEL,
+ GDK_AXIS_DISTANCE,
+ GDK_AXIS_ROTATION,
+ GDK_AXIS_SLIDER,
+ GDK_AXIS_LAST
+} GdkAxisUse;
+
+/**
+ * GdkAxisFlags:
+ * @GDK_AXIS_FLAG_X: X axis is present
+ * @GDK_AXIS_FLAG_Y: Y axis is present
+ * @GDK_AXIS_FLAG_PRESSURE: Pressure axis is present
+ * @GDK_AXIS_FLAG_XTILT: X tilt axis is present
+ * @GDK_AXIS_FLAG_YTILT: Y tilt axis is present
+ * @GDK_AXIS_FLAG_WHEEL: Wheel axis is present
+ * @GDK_AXIS_FLAG_DISTANCE: Distance axis is present
+ * @GDK_AXIS_FLAG_ROTATION: Z-axis rotation is present
+ * @GDK_AXIS_FLAG_SLIDER: Slider axis is present
+ *
+ * Flags describing the current capabilities of a device/tool.
+ *
+ * Since: 3.22
+ */
+typedef enum
+{
+ GDK_AXIS_FLAG_X = 1 << GDK_AXIS_X,
+ GDK_AXIS_FLAG_Y = 1 << GDK_AXIS_Y,
+ GDK_AXIS_FLAG_PRESSURE = 1 << GDK_AXIS_PRESSURE,
+ GDK_AXIS_FLAG_XTILT = 1 << GDK_AXIS_XTILT,
+ GDK_AXIS_FLAG_YTILT = 1 << GDK_AXIS_YTILT,
+ GDK_AXIS_FLAG_WHEEL = 1 << GDK_AXIS_WHEEL,
+ GDK_AXIS_FLAG_DISTANCE = 1 << GDK_AXIS_DISTANCE,
+ GDK_AXIS_FLAG_ROTATION = 1 << GDK_AXIS_ROTATION,
+ GDK_AXIS_FLAG_SLIDER = 1 << GDK_AXIS_SLIDER,
+} GdkAxisFlags;
+
G_END_DECLS
#endif /* __GDK_TYPES_H__ */
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index 3ba1f4d793..0b18211155 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -29,6 +29,7 @@
#include "gdkwayland.h"
#include "gdkkeysyms.h"
#include "gdkdeviceprivate.h"
+#include "gdkdevicetoolprivate.h"
#include "gdkdevicemanagerprivate.h"
#include "gdkseatprivate.h"
#include "pointer-gestures-unstable-v1-client-protocol.h"
diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c
index 497a18a9fd..836f455abb 100644
--- a/gdk/x11/gdkdevicemanager-xi2.c
+++ b/gdk/x11/gdkdevicemanager-xi2.c
@@ -22,6 +22,7 @@
#include "gdkdevicemanagerprivate-core.h"
#include "gdkdeviceprivate.h"
+#include "gdkdevicetoolprivate.h"
#include "gdkdisplayprivate.h"
#include "gdkeventtranslator.h"
#include "gdkprivate-x11.h"