+/**
+ * gdk_event_get_button:
+ * @event: a #GdkEvent
+ * @button: (out): location to store mouse button number
+ *
+ * Extract the button number from an event.
+ *
+ * Return value: %TRUE if the event delivered a button number
+ *
+ * Since: 3.2
+ **/
+gboolean
+gdk_event_get_button (const GdkEvent *event,
+ guint *button)
+{
+ gboolean fetched = TRUE;
+ guint number = 0;
+
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ switch (event->type)
+ {
+ case GDK_BUTTON_PRESS:
+ case GDK_2BUTTON_PRESS:
+ case GDK_3BUTTON_PRESS:
+ case GDK_BUTTON_RELEASE:
+ number = event->button.button;
+ break;
+ default:
+ fetched = FALSE;
+ break;
+ }
+
+ if (button)
+ *button = number;
+
+ return fetched;
+}
+
+/**
+ * gdk_event_get_click_count:
+ * @event: a #GdkEvent
+ * @click_count: (out): location to store click count
+ *
+ * Extracts the click count from an event.
+ *
+ * Return value: %TRUE if the event delivered a click count
+ *
+ * Since: 3.2
+ */
+gboolean
+gdk_event_get_click_count (const GdkEvent *event,
+ guint *click_count)
+{
+ gboolean fetched = TRUE;
+ guint number = 0;
+
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ switch (event->type)
+ {
+ case GDK_BUTTON_PRESS:
+ case GDK_BUTTON_RELEASE:
+ number = 1;
+ break;
+ case GDK_2BUTTON_PRESS:
+ number = 2;
+ break;
+ case GDK_3BUTTON_PRESS:
+ number = 3;
+ break;
+ default:
+ fetched = FALSE;
+ break;
+ }
+
+ if (click_count)
+ *click_count = number;
+
+ return fetched;
+}
+
+/**
+ * gdk_event_get_keyval:
+ * @event: a #GdkEvent
+ * @keyval: (out): location to store the keyval
+ *
+ * Extracts the keyval from an event.
+ *
+ * Return value: %TRUE if the event delivered a key symbol
+ *
+ * Since: 3.2
+ */
+gboolean
+gdk_event_get_keyval (const GdkEvent *event,
+ guint *keyval)
+{
+ gboolean fetched = TRUE;
+ guint number = 0;
+
+ switch (event->type)
+ {
+ case GDK_KEY_PRESS:
+ case GDK_KEY_RELEASE:
+ number = event->key.keyval;
+ break;
+ default:
+ fetched = FALSE;
+ break;
+ }
+
+ if (keyval)
+ *keyval = number;
+
+ return fetched;
+}
+
+/**
+ * gdk_event_get_keycode:
+ * @event: a #GdkEvent
+ * @keycode: (out): location to store the keycode
+ *
+ * Extracts the hardware keycode from an event.
+ *
+ * Return value: %TRUE if the event delivered a hardware keycode
+ *
+ * Since: 3.2
+ */
+gboolean
+gdk_event_get_keycode (const GdkEvent *event,
+ guint16 *keycode)
+{
+ gboolean fetched = TRUE;
+ guint16 number = 0;
+
+ switch (event->type)
+ {
+ case GDK_KEY_PRESS:
+ case GDK_KEY_RELEASE:
+ number = event->key.hardware_keycode;
+ break;
+ default:
+ fetched = FALSE;
+ break;
+ }
+
+ if (keycode)
+ *keycode = number;
+
+ return fetched;
+}
+
+/**
+ * gdk_event_get_scroll_direction:
+ * @event: a #GdkEvent
+ * @direction: (out): location to store the scroll direction
+ *
+ * Extracts the scroll direction from an event.
+ *
+ * Return value: %TRUE if the event delivered a scroll direction
+ *
+ * Since: 3.2
+ */
+gboolean
+gdk_event_get_scroll_direction (const GdkEvent *event,
+ GdkScrollDirection *direction)
+{
+ gboolean fetched = TRUE;
+ GdkScrollDirection dir = 0;
+
+ switch (event->type)
+ {
+ case GDK_SCROLL:
+ if (event->scroll.direction == GDK_SCROLL_SMOOTH)
+ fetched = FALSE;
+ else
+ dir = event->scroll.direction;
+ break;
+ default:
+ fetched = FALSE;
+ break;
+ }
+
+ if (direction)
+ *direction = dir;
+
+ return fetched;
+}
+
+/**
+ * gdk_event_get_scroll_deltas:
+ * @event: a #GdkEvent
+ * @delta_x: (out): return location for X delta
+ * @delta_y: (out): return location for Y delta
+ *
+ * Retrieves the scroll deltas from a #GdkEvent
+ *
+ * Returns: %TRUE if the event contains smooth scroll information
+ *
+ * Since: 3.4
+ **/
+gboolean
+gdk_event_get_scroll_deltas (const GdkEvent *event,
+ gdouble *delta_x,
+ gdouble *delta_y)
+{
+ gboolean fetched = TRUE;
+ gdouble dx = 0.0;
+ gdouble dy = 0.0;
+
+ switch (event->type)
+ {
+ case GDK_SCROLL:
+ if (event->scroll.direction == GDK_SCROLL_SMOOTH)
+ {
+ dx = event->scroll.delta_x;
+ dy = event->scroll.delta_y;
+ }
+ else
+ fetched = FALSE;
+ break;
+ default:
+ fetched = FALSE;
+ break;
+ }
+
+ if (delta_x)
+ *delta_x = dx;
+
+ if (delta_y)
+ *delta_y = dy;
+
+ return fetched;
+}
+