[gtkmm] Gdk:Event: Split event.hg and event.ccg



commit c8a5e280732a48fe5531bffb93eb99cdcbdbf0c5
Author: Kjell Ahlstedt <kjellahlstedt gmail com>
Date:   Mon May 29 16:49:56 2017 +0200

    Gdk:Event: Split event.hg and event.ccg
    
    Split them into event.[hg|ccg] with the Event class and events.[hg|ccg]
    with all the subclasses. This split makes it easier to avoid cyclic
    inclusions (where a.h includes b.h, and b.h includes a.h).
    Bug 135978

 .gitignore          |    2 +
 gdk/gdkmm.h         |    1 +
 gdk/src/event.ccg   |   65 +---
 gdk/src/event.hg    | 1105 +-------------------------------------------------
 gdk/src/events.ccg  |   83 ++++
 gdk/src/events.hg   | 1129 +++++++++++++++++++++++++++++++++++++++++++++++++++
 gdk/src/filelist.am |    1 +
 7 files changed, 1230 insertions(+), 1156 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index df2f506..a8a2e97 100644
--- a/.gitignore
+++ b/.gitignore
@@ -70,6 +70,8 @@ gdk/gdkmm/enums.cc
 gdk/gdkmm/enums.h
 gdk/gdkmm/event.cc
 gdk/gdkmm/event.h
+gdk/gdkmm/events.cc
+gdk/gdkmm/events.h
 gdk/gdkmm/glcontext.cc
 gdk/gdkmm/glcontext.h
 gdk/gdkmm/monitor.cc
diff --git a/gdk/gdkmm.h b/gdk/gdkmm.h
index 3969510..a706483 100644
--- a/gdk/gdkmm.h
+++ b/gdk/gdkmm.h
@@ -31,6 +31,7 @@
 #include <gdkmm/applaunchcontext.h>
 #include <gdkmm/cursor.h>
 #include <gdkmm/drawingcontext.h>
+#include <gdkmm/events.h>
 #include <gdkmm/glcontext.h>
 #include <gdkmm/rectangle.h>
 #include <gdkmm/display.h>
diff --git a/gdk/src/event.ccg b/gdk/src/event.ccg
index 246c070..1db98a5 100644
--- a/gdk/src/event.ccg
+++ b/gdk/src/event.ccg
@@ -15,8 +15,9 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <gdkmm/device.h>
+#include <gdkmm/screen.h>
 #include <gdkmm/seat.h>
+#include <gdkmm/window.h>
 
 namespace Gdk
 {
@@ -25,66 +26,4 @@ bool Event::is_send_event() const
   return gobj()->any.send_event;
 }
 
-int EventKey::get_scancode() const
-{
-  return gdk_event_get_scancode(const_cast<GdkEvent*>(Event::gobj()));
-}
-
-guint EventButton::get_click_count() const
-{
-  guint click_count = 0;
-  gdk_event_get_click_count(Event::gobj(), &click_count);
-  return click_count;
-}
-
-bool EventButton::shall_trigger_context_menu() const
-{
-  return gdk_event_triggers_context_menu(Event::gobj());
-}
-
-bool EventButton::get_axis(Gdk::AxisUse axis_use, double& value) const
-{
-  return gdk_event_get_axis(Event::gobj(), static_cast<GdkAxisUse>(axis_use), &value);
-}
-
-bool EventMotion::get_axis(Gdk::AxisUse axis_use, double& value) const
-{
-  return gdk_event_get_axis(Event::gobj(), static_cast<GdkAxisUse>(axis_use), &value);
-}
-
-bool EventTouch::get_axis(Gdk::AxisUse axis_use, double& value) const
-{
-  return gdk_event_get_axis(Event::gobj(), static_cast<GdkAxisUse>(axis_use), &value);
-}
-
-bool EventScroll::is_scroll_stop_event() const
-{
-  return gobj()->is_stop;
-}
-
-bool EventSelection::has_requestor() const
-{
-  return gobj()->requestor != nullptr;
-}
-
-bool EventOwnerChange::has_owner() const
-{
-  return gobj()->owner != nullptr;
-}
-
-bool EventGrabBroken::is_keyboard() const
-{
-  return gobj()->keyboard;
-}
-
-bool EventGrabBroken::is_implicit() const
-{
-  return gobj()->implicit;
-}
-
-bool EventGrabBroken::has_grab_window() const
-{
-  return gobj()->grab_window != nullptr;
-}
-
 } //namespace Gdk
diff --git a/gdk/src/event.hg b/gdk/src/event.hg
index 6fd025c..1de5138 100644
--- a/gdk/src/event.hg
+++ b/gdk/src/event.hg
@@ -19,12 +19,10 @@ _DEFS(gdkmm,gdk)
 _CC_INCLUDE(gdk/gdk.h)
 
 #include <glibmm/refptr.h>
-#include <gdkmm/types.h>
-#include <gdkmm/enums.h>
-#include <gdkmm/screen.h>
-#include <gdkmm/window.h>
+#include <glibmm/value.h>
 
 /* Shadow DELETE macro (from winnt.h).
+ * It interferes with Gdk::Event::Type::DELETE.
  */
 #if defined(DELETE) && !defined(GTKMM_MACRO_SHADOW_DELETE)
 enum { GTKMM_MACRO_DEFINITION_DELETE = DELETE };
@@ -40,14 +38,9 @@ extern "C" { typedef union _GdkEvent GdkEvent; }
 
 namespace Gdk
 {
-
-class Device;
+class Screen;
 class Seat;
-
-/** Representing an event sequence.
- * Used to differentiate between multiple touches on multitouch touchscreens.
- */
-struct EventSequence;
+class Window;
 
 /** Represents an event.
  */
@@ -96,1089 +89,15 @@ public:
 
   //TODO: If GdkDeviceTool is wrapped in gtkmm, wrap gdk_event_get_device_tool().
   _IGNORE(gdk_event_set_device_tool) // "Should be rarely used"
-};
-
-/** Generated when a key is pressed or released.
- *
- * get_event_type() will return Gdk::Event::Type::KEY_PRESS or
- * Gdk::Event::Type::KEY_RELEASE.
- *
- * @newin{3,90}
- */
-class EventKey : public Event
-{
-  _CLASS_GDKEVENT(EventKey, GdkEventKey, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
-  _IGNORE(gdk_event_get_time)
-
-  /**
-   * Returns a bit mask representing the state of the modifier keys (e.g.
-   * Control, Shift and Alt) and the pointer buttons.
-   */
-  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
-  _IGNORE(gdk_event_get_state)
-
-  /**
-   * Returns the key that was pressed or released. See the <gdk/gdkkeysyms.h>
-   * header file for a complete list of GDK key codes.
-   */
-  _MEMBER_GET(keyval, keyval, guint, guint)
-  _IGNORE(gdk_event_get_keyval)
-
-  /**
-   * Returns the raw code of the key that was pressed or released.
-   */
-  _MEMBER_GET(hardware_keycode, hardware_keycode, guint16, guint16)
-  _IGNORE(gdk_event_get_keycode)
-
-  _WRAP_METHOD_DOCS_ONLY(gdk_event_get_scancode)
-  int get_scancode() const;
-  _IGNORE(gdk_event_get_scancode)
-
-  /**
-   * Returns the keyboard group
-   */
-  _MEMBER_GET(group, group, guint8, guint8)
-
-  /**
-   * Returns @c true if the hardware keycode is mapped to a modifier key
-   */
-  _MEMBER_GET(is_modifier, is_modifier, bool, guint)
-};
-
-/** Represents a mouse button press or release event.
- *
- * get_event_type() will return one of Gdk::Event::Type::BUTTON_PRESS,
- * Gdk::Event::Type::DOUBLE_BUTTON_PRESS, Gdk::Event::Type::TRIPLE_BUTTON_PRESS
- * or Gdk::Event::Type::BUTTON_RELEASE.
- *
- * Double and triple-clicks result in a sequence of events being received. For
- * double-clicks the order of events will be:
- *
- * @code
- * Gdk::Event::Type::BUTTON_PRESS
- * Gdk::Event::Type::BUTTON_RELEASE
- * Gdk::Event::Type::BUTTON_PRESS
- * Gdk::Event::Type::DOUBLE_BUTTON_PRESS
- * Gdk::Event::Type::BUTTON_RELEASE
- * @endcode
- *
- * Note that the first click is received just like a normal button press, while
- * the second click results in a Gdk::Event::Type::DOUBLE_BUTTON_PRESS being
- * received just after the Gdk::Event::Type::BUTTON_PRESS.
- *
- * Triple-clicks are very similar to double-clicks, except that
- * Gdk::Event::Type::TRIPLE_BUTTON_PRESS is inserted after the third click.
- * The order of the events is:
- *
- * @code
- * Gdk::Event::Type::BUTTON_PRESS
- * Gdk::Event::Type::BUTTON_RELEASE
- * Gdk::Event::Type::BUTTON_PRESS
- * Gdk::Event::Type::DOUBLE_BUTTON_PRESS
- * Gdk::Event::Type::BUTTON_RELEASE
- * Gdk::Event::Type::BUTTON_PRESS
- * Gdk::Event::Type::TRIPLE_BUTTON_PRESS
- * Gdk::Event::Type::BUTTON_RELEASE
- * @endcode
- *
- * For a double click to occur, the second button press must occur within 1/4 of
- * a second of the first. For a triple click to occur, the third button press
- * must also occur within 1/2 second of the first button press.
- *
- * @newin{3,90}
- */
-class EventButton : public Event
-{
-  _CLASS_GDKEVENT(EventButton, GdkEventButton, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
-
-  /**
-   * Returns a bit mask representing the state of the modifier keys (e.g.
-   * Control, Shift and Alt) and the pointer buttons.
-   */
-  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
-
-  /**
-   * Returns the X coordinate of the pointer relative to the window.
-   */
-  _MEMBER_GET(x, x, double, gdouble)
-  _IGNORE(gdk_event_get_coords)
-
-  /**
-   * Returns the Y coordinate of the pointer relative to the window.
-   */
-  _MEMBER_GET(y, y, double, gdouble)
-
-  /**
-   * Returns the X coordinate of the pointer relative to the root screen.
-   */
-  _MEMBER_GET(root_x, x_root, double, gdouble)
-  _IGNORE(gdk_event_get_root_coords)
-
-  /**
-   * Returns the Y coordinate of the pointer relative to the root screen.
-   */
-  _MEMBER_GET(root_y, y_root, double, gdouble)
-
-  _WRAP_METHOD_DOCS_ONLY(gdk_event_get_axis)
-  bool get_axis(Gdk::AxisUse axis_use, double& value) const;
-
-  /**
-   * Returns the number of the button which was pressed or released, numbered
-   * from 1 to 5. Normally button 1 is the left mouse button, 2 is the middle
-   * button, and 3 is the right button. On 2-button mice, the middle button can
-   * often be simulated by pressing both mouse buttons together
-   */
-  _MEMBER_GET(button, button, guint, guint)
-  _IGNORE(gdk_event_get_button)
-
-  /**
-   * Returns the device where the event originated from.
-   */
-  _MEMBER_GET_GOBJECT(device, device, Gdk::Device, GdkDevice*)
-  _IGNORE(gdk_event_get_device)
-
-  /** Extracts the click count from an event.
-   * @return The click count (0..3).
-   */
-  guint get_click_count() const;
-  _IGNORE(gdk_event_get_click_count)
-
-  _WRAP_METHOD_DOCS_ONLY(gdk_event_triggers_context_menu)
-  bool shall_trigger_context_menu() const;
-};
-
-/** Generated when the mouse is scrolled.
- *
- * These events are from button presses for the buttons 4 to 7. Wheel mice are
- * usually configured to generate button press events for buttons 4 and 5 when
- * the wheel is turned.
- *
- * get_event_type() will return Gdk::Event::Type::SCROLL.
- *
- * Some GDK backends can also generate 'smooth' scroll events, which can be
- * recognized by the Gdk::ScrollDirection::SMOOTH scroll direction. For these,
- * scroll deltas can be obtained with get_delta_x() and get_delta_y().
- *
- * @newin{3,90}
- */
-class EventScroll : public Event
-{
-  _CLASS_GDKEVENT(EventScroll, GdkEventScroll, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
-
-  /**
-   * Returns a bit mask representing the state of the modifier keys (e.g.
-   * Control, Shift and Alt) and the pointer buttons.
-   */
-  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
-
-  /**
-   * Returns the X coordinate of the pointer relative to the window.
-   */
-  _MEMBER_GET(x, x, double, gdouble)
-
-  /**
-   * Returns the Y coordinate of the pointer relative to the window.
-   */
-  _MEMBER_GET(y, y, double, gdouble)
-
-  /**
-   * Returns the X coordinate of the pointer relative to the root screen.
-   */
-  _MEMBER_GET(root_x, x_root, double, gdouble)
-
-  /**
-   * Returns the Y coordinate of the pointer relative to the root screen.
-   */
-  _MEMBER_GET(root_y, y_root, double, gdouble)
-
-  /**
-   * Returns the scroll delta in the X axis. Meaningful only if get_direction()
-   * returns Gdk::ScrollDirection::SMOOTH
-   */
-  _MEMBER_GET(delta_x, delta_x, double, gdouble)
-  _IGNORE(gdk_event_get_scroll_deltas)
-
-  /**
-   * Returns the scroll delta in the Y axis. Meaningful only if get_direction()
-   * returns Gdk::ScrollDirection::SMOOTH
-   */
-  _MEMBER_GET(delta_y, delta_y, double, gdouble)
-
-  /**
-   * Returns the direction of the scroll.
-   */
-  _MEMBER_GET(direction, direction, ScrollDirection, GdkScrollDirection)
-  _IGNORE(gdk_event_get_scroll_direction)
-
-  _WRAP_METHOD_DOCS_ONLY(gdk_event_is_scroll_stop_event)
-  bool is_scroll_stop_event() const;
-
-  /**
-   * Returns the device where the event originated from.
-   */
-  _MEMBER_GET_GOBJECT(device, device, Gdk::Device, GdkDevice*)
-};
-
-/** Generated when a mouse pointer is moved.
- *
- * get_event_type() will return Gdk::Event::Type::MOTION_NOTIFY.
- *
- * @newin{3,90}
- */
-class EventMotion : public Event
-{
-  _CLASS_GDKEVENT(EventMotion, GdkEventMotion, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
-
-  /**
-   * Returns a bit mask representing the state of the modifier keys (e.g.
-   * Control, Shift and Alt) and the pointer buttons.
-   */
-  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
-
-  /**
-   * Returns the X coordinate of the pointer relative to the window.
-   */
-  _MEMBER_GET(x, x, double, gdouble)
-
-  /**
-   * Returns the Y coordinate of the pointer relative to the window.
-   */
-  _MEMBER_GET(y, y, double, gdouble)
-
-  /**
-   * Returns the X coordinate of the pointer relative to the root screen.
-   */
-  _MEMBER_GET(root_x, x_root, double, gdouble)
-
-  /**
-   * Returns the Y coordinate of the pointer relative to the root screen.
-   */
-  _MEMBER_GET(root_y, y_root, double, gdouble)
-
-  _WRAP_METHOD_DOCS_ONLY(gdk_event_get_axis)
-  bool get_axis(Gdk::AxisUse axis_use, double& value) const;
-
-#m4 _CONVERSION(`gint16',`bool',`$3')
-  /**
-   * Returns @c true if the event is motion hint.
-   *
-   * Motion hints are received only if Gdk::EventMask::POINTER_MOTION_HINT_MASK is set.
-   * It is used to reduce the number of Gdk::Event::Type::MOTION_NOTIFY events received.
-   * Normally a Gdk::Event::Type::MOTION_NOTIFY event is received each time the mouse
-   * moves. However, if the application spends a lot of time processing the
-   * event (updating the display, for example), it can lag behind the position
-   * of the mouse. When using Gdk::EventMask::POINTER_MOTION_HINT_MASK, fewer
-   * Gdk::Event::Type::MOTION_NOTIFY events will be sent, some of which are marked as a
-   * hint. To receive more motion events after a motion hint event, the
-   * application needs to ask for more, by calling request_motions().
-   */
-  _MEMBER_GET(is_hint, is_hint, bool, gint16)
-
-  _WRAP_METHOD(void request_motions(), gdk_event_request_motions)
-
-  /**
-   * Returns the device where the event originated from.
-   */
-  _MEMBER_GET_GOBJECT(device, device, Gdk::Device, GdkDevice*)
-};
-
-/** Generated during an attached touchscreen is touched.
- *
- * get_event_type() will return one of Gdk::Event::Type::TOUCH_BEGIN,
- * Gdk::Event::Type::TOUCH_UPDATE, Gdk::Event::Type::TOUCH_END or
- * Gdk::Event::Type::TOUCH_CANCEL.
- *
- * Touch events are grouped into sequences by means of the sequence field, which
- * can also be obtained with get_event_sequence(). Each sequence
- * begins with a Gdk::Event::Type::TOUCH_BEGIN event, followed by any number of
- * Gdk::Event::Type::TOUCH_UPDATE events, and ends with a Gdk::Event::Type::TOUCH_END
- * (or Gdk::Event::Type::TOUCH_CANCEL) event. With multitouch devices, there may
- * be several active sequences at the same time.
- *
- * @newin{3,90}
- */
-class EventTouch : public Event
-{
-  _CLASS_GDKEVENT(EventTouch, GdkEventTouch, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
-
-  /**
-   * Returns a bit mask representing the state of the modifier keys (e.g.
-   * Control, Shift and Alt) and the pointer buttons.
-   */
-  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
-
-  /**
-   * Returns the X coordinate of the pointer relative to the window.
-   */
-  _MEMBER_GET(x, x, double, gdouble)
-
-  /**
-   * Returns the Y coordinate of the pointer relative to the window.
-   */
-  _MEMBER_GET(y, y, double, gdouble)
-
-  /**
-   * Returns the X coordinate of the pointer relative to the root screen.
-   */
-  _MEMBER_GET(root_x, x_root, double, gdouble)
-
-  /**
-   * Returns the Y coordinate of the pointer relative to the root screen.
-   */
-  _MEMBER_GET(root_y, y_root, double, gdouble)
-
-  _WRAP_METHOD_DOCS_ONLY(gdk_event_get_axis)
-  bool get_axis(Gdk::AxisUse axis_use, double& value) const;
-
-#m4 _CONVERSION(`const GdkEventSequence*',`const Gdk::EventSequence*',`reinterpret_cast<$2>($3)')
-  /**
-   * Returns the event sequence that the event belongs to
-   */
-  _MEMBER_GET(event_sequence, sequence, const Gdk::EventSequence*, const GdkEventSequence*)
-  _IGNORE(gdk_event_get_event_sequence)
-
-  /**
-   * Returns @c true if the event should be used for emulating pointer event
-   */
-  _MEMBER_GET(is_emulating_pointer, emulating_pointer, bool, gboolean)
-  _IGNORE(gdk_event_get_pointer_emulated)
-
-  /**
-   * Returns the device where the event originated from.
-   */
-  _MEMBER_GET_GOBJECT(device, device, Gdk::Device, GdkDevice*)
-};
-
-/** Generated when the mouse pointer leaves or enters the window.
- *
- * get_event_type() will return one of Gdk::Event::Type::LEAVE_NOTIFY or
- * Gdk::Event::Type::ENTER_NOTIFY.
- *
- * @newin{3,90}
- */
-class EventCrossing : public Event
-{
-  _CLASS_GDKEVENT(EventCrossing, GdkEventCrossing, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
-
-  /**
-   * Returns the window that was entered or left
-   */
-  _MEMBER_GET_GOBJECT(subwindow, subwindow, Gdk::Window, GdkWindow*)
-
-  /**
-   * Returns a bit mask representing the state of the modifier keys (e.g.
-   * Control, Shift and Alt) and the pointer buttons.
-   */
-  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
-
-  /**
-   * Returns the X coordinate of the pointer relative to the window.
-   */
-  _MEMBER_GET(x, x, double, gdouble)
-
-  /**
-   * Returns the Y coordinate of the pointer relative to the window.
-   */
-  _MEMBER_GET(y, y, double, gdouble)
-
-  /**
-   * Returns the X coordinate of the pointer relative to the root screen.
-   */
-  _MEMBER_GET(root_x, x_root, double, gdouble)
-
-  /**
-   * Returns the Y coordinate of the pointer relative to the root screen.
-   */
-  _MEMBER_GET(root_y, y_root, double, gdouble)
-
-  /*** Returns the crossing mode.
-   * Gdk::CrossingMode::GTK_GRAB, Gdk::CrossingMode::GTK_UNGRAB, and
-   * Gdk::CrossingMode::STATE_CHANGED are always synthesized, never native.
-   */
-  _MEMBER_GET(mode, mode, Gdk::CrossingMode, GdkCrossingMode)
-
-  /**
-   * Returns the kind of crossing that has been made
-   */
-  _MEMBER_GET(detail, detail, Gdk::NotifyType, GdkNotifyType)
-
-  /**
-   * Returns @c true if the window was the focus window, @c false otherwise
-   */
-  _MEMBER_GET(focus, focus, bool, gboolean)
-};
-
-/** Generated when all or part of a window becomes visible and needs to be
- * redrawn.
- *
- * get_event_type() will return one of Gdk::Event::Type::EXPOSE, Gdk::Event::Type::DAMAGE.
- *
- * @newin{3,90}
- */
-class EventExpose : public Event
-{
-  _CLASS_GDKEVENT(EventExpose, GdkEventExpose, Event, GdkEvent)
-
-public:
-
-#m4 _CONVERSION(`GdkRectangle',`const Gdk::Rectangle&',`Glib::wrap(&$3)')
-  /**
-   * Returns the bounding box of the region to be redrawn
-   */
-  _MEMBER_GET(area, area, const Gdk::Rectangle&, GdkRectangle)
-
-#m4 _CONVERSION(`cairo_region_t*',`::Cairo::RefPtr<const 
::Cairo::Region>',`::Cairo::RefPtr<::Cairo::Region>(new ::Cairo::Region($3, false /* take ref */))')
-  /**
-   * Returns the region to be redrawn
-   */
-  _MEMBER_GET(region, region, ::Cairo::RefPtr<const ::Cairo::Region>, cairo_region_t*);
-
-  /**
-   * Returns the number of contiguous Gdk::Event::Type::EXPOSE events following this one.
-   * The only use for this is "exposure compression", i.e. handling all contiguous
-   * Gdk::Event::Type::EXPOSE events in one go, though GDK performs some exposure
-   * compression so this is not normally needed.
-   */
-  _MEMBER_GET(count, count, int, gint)
-};
-
-// GdkEventVisibility is deprecated. It's not used in gtk+ 4.
-
-/** Generated when the keyboard focus changes.
- *
- * get_event_type() will return Gdk::Event::Type::FOCUS_CHANGE.
- *
- * @newin{3,90}
- */
-class EventFocus : public Event
-{
-  _CLASS_GDKEVENT(EventFocus, GdkEventFocus, Event, GdkEvent)
-
-public:
-
-  /**
-   * @c true if the window gained focus, @c false if lost
-   */
-  _MEMBER_GET(focus, in, bool, gint16)
-};
-
-/** Generated when the position or size of a window changes.
- *
- * get_event_type() will return Gdk::Event::Type::CONFIGURE.
- *
- * @newin{3,90}
- */
-class EventConfigure : public Event
-{
-  _CLASS_GDKEVENT(EventConfigure, GdkEventConfigure, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the new X coordinate of the window, relative to its parent
-   */
-  _MEMBER_GET(x, x, int, gint)
-
-  /**
-   * Returns the new Y coordinate of the window, relative to its parent
-   */
-  _MEMBER_GET(y, y, int, gint)
-
-  /**
-   * Returns the new width of the window
-   */
-  _MEMBER_GET(width, width, int, gint)
-
-  /**
-   * Returns the new height of the window
-   */
-  _MEMBER_GET(height, height, int, gint)
-
-  /**
-   * Convenience method to access all position and size information at once
-   */
-  Gdk::Rectangle get_rect() const;
-};
-
-/** Rarely used event. Generated when a property of a window changes.
- *
- * get_event_type() will return Gdk::Event::Type::PROPERTY_NOTIFY.
- *
- * @newin{3,90}
- */
-class EventProperty : public Event
-{
-  _CLASS_GDKEVENT(EventProperty, GdkEventProperty, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
 
-  /**
-   * Returns the atom indicating the property that was changed
-   */
-  _MEMBER_GET(atom, atom, GdkAtom, GdkAtom)
-
-  /**
-   * Identifies whether the property was changed (Gdk::PropertyState::NEW_VALUE) or
-   * deleted (Gdk::PropertyState::DELETE).
-   */
-  _MEMBER_GET(state, state, Gdk::PropertyState, GdkPropertyState)
-};
-
-/** Rarely used event. Generated when a selection is requested or ownership of a
- * selection is taken over by another client application.
- *
- * get_event_type() will return one of Gdk::Event::Type::SELECTION_CLEAR,
- * Gdk::Event::Type::SELECTION_NOTIFY or Gdk::Event::Type::SELECTION_REQUEST.
- *
- * @newin{3,90}
- */
-class EventSelection : public Event
-{
-  _CLASS_GDKEVENT(EventSelection, GdkEventSelection, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
-
-  /**
-   * Returns the atom identifying the selection
-   */
-  _MEMBER_GET(selection, selection, GdkAtom, GdkAtom)
-
-  /**
-   * Returns the atom identifying the target to which the selection should be
-   * converted
-   */
-  _MEMBER_GET(target, target, GdkAtom, GdkAtom)
-
-  /**
-   * Returns the atom identifying the property in which to place the result of
-   * the conversion
-   */
-  _MEMBER_GET(property, property, GdkAtom, GdkAtom)
-
-  /**
-   * Checks whether there's window on which to place the property. The results
-   * are undefined if has_requestor() returns @c false and get_requestor()
-   * is called.
-   */
-  bool has_requestor() const;
-
-  /**
-   * Returns the window on which to place the property. The results are
-   * undefined if has_requestor() would return @c false before the call.
-   */
-  _MEMBER_GET_GOBJECT(requestor, requestor, Gdk::Window, GdkWindow*)
-};
-
-/** Rarely used event. Generated when the owner of a selection changes. On X11,
- * this information is only available if the X server supports the XFIXES
- * extension.
- *
- * get_event_type() will return Gdk::Event::Type::OWNER_CHANGE.
- *
- * @newin{3,90}
- */
-class EventOwnerChange : public Event
-{
-  _CLASS_GDKEVENT(EventOwnerChange, GdkEventOwnerChange, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
-
-  /**
-   * Returns the time at which the ownership changed
-   */
-  _MEMBER_GET(selection_time, selection_time, guint32, guint32)
-
-  /**
-   * Returns the atom identifying the selection
-   */
-  _MEMBER_GET(selection, selection, GdkAtom, GdkAtom)
-
-  /**
-   * Returns the reason of the ownership change
-   */
-  _MEMBER_GET(reason, reason, Gdk::OwnerChange, GdkOwnerChange)
-
-  /**
-   * Checks whether there's new owner of the selection. The results are
-   * undefined if has_owner() returns @c false and get_owner() is called.
-   */
-  bool has_owner() const;
-
-  /**
-   * Returns the window which is the new owner of the selection. The results are
-   * undefined if has_owner() would return @c false before the call.
-   */
-  _MEMBER_GET_GOBJECT(owner, owner, Gdk::Window, GdkWindow*)
-};
-
-/** Generated during Drag-and-Drop (DND) operations.
- *
- * get_event_type() will return one of Gdk::Event::Type::DRAG_ENTER,
- * Gdk::Event::Type::DRAG_LEAVE, Gdk::Event::Type::DRAG_MOTION,
- * Gdk::Event::Type::DRAG_STATUS, Gdk::Event::Type::DROP_START
- * or Gdk::Event::Type::DROP_FINISHED.
- *
- * @newin{3,90}
- */
-class EventDND : public Event
-{
-  _CLASS_GDKEVENT(EventDND, GdkEventDND, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
-
-  /**
-   * Returns the X coordinate of the pointer relative to the root screen. Only
-   * meaningful if get_event_type() returns Gdk::Event::Type::DRAG_MOTION or
-   * Gdk::Event::Type::DROP_START.
-   */
-  _MEMBER_GET(root_x, x_root, double, gdouble)
-
-  /**
-   * Returns the Y coordinate of the pointer relative to the root screen.
-   */
-  _MEMBER_GET(root_y, y_root, double, gdouble)
-
-  /**
-   * Returns the drag context
-   */
-#m4 _CONVERSION(`GdkDragContext*',`Glib::RefPtr<const Gdk::DragContext>', `Glib::wrap($3)')
-  _MEMBER_GET_GOBJECT(context, context, Gdk::DragContext, GdkDragContext*)
-};
-
-/** Rarely used event. Generated when a stylus has moved in or out of contact
- * with the tablet, or perhaps that the user's finger has moved in or out of
- * contact with a touch screen.
- *
- * This event type will be used pretty rarely. It only is important for XInput
- * aware programs that are drawing their own cursor.
- *
- * get_event_type() will return one of Gdk::Event::Type::PROXIMITY_IN,
- * Gdk::Event::Type::PROXIMITY_OUT.
- *
- * @newin{3,90}
- */
-class EventProximity : public Event
-{
-  _CLASS_GDKEVENT(EventProximity, GdkEventProximity, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
-
-  /**
-   * Returns the device where the event originated from.
-   */
-  _MEMBER_GET_GOBJECT(device, device, Gdk::Device, GdkDevice*)
-};
-
-/** Generated when the state of the toplevel window changes.
- *
- * get_event_type() will return Gdk::Event::Type::WINDOW_STATE.
- *
- * @newin{3,90}
- */
-class EventWindowState : public Event
-{
-  _CLASS_GDKEVENT(EventWindowState, GdkEventWindowState, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns a bit mask identifying which bits of the state have been changed
-   */
-  _MEMBER_GET(mask, changed_mask, Gdk::Window::State, GdkWindowState)
-
-  /**
-   * Returns the new window state
-   */
-  _MEMBER_GET(state, new_window_state, Gdk::Window::State, GdkWindowState)
-
-};
-
-/** Generated when a setting is modified.
- *
- * get_event_type() will return Gdk::Event::Type::SETTING.
- *
- * @newin{3,90}
- */
-class EventSetting : public Event
-{
-  _CLASS_GDKEVENT(EventSetting, GdkEventSetting, Event, GdkEvent)
-
-public:
-
-  /**
-   * Specifies what happened to the setting.
-   */
-  _MEMBER_GET(action, action, Gdk::SettingAction, GdkSettingAction)
-
-  /**
-   * Returns the name of the setting
-   */
-  _MEMBER_GET(name, name, Glib::ustring, const char*)
-
-};
-
-/** Generated when a pointer or keyboard grab is broken. On X11, this happens
- * when the grab window becomes unviewable (i.e. it or one of its ancestors is
- * unmapped), or if the same application grabs the pointer or keyboard again.
- * Note that implicit grabs (which are initiated by button presses) can also
- * cause Gdk::EventGrabBroken events.
- *
- * get_event_type() will return Gdk::Event::Type::GRAB_BROKEN.
- *
- * @newin{3,90}
- */
-class EventGrabBroken : public Event
-{
-  _CLASS_GDKEVENT(EventGrabBroken, GdkEventGrabBroken, Event, GdkEvent)
-
-public:
-
-  /**
-   * @c true if a keyboard grab was broken, @c false if a pointer grab was
-   * broken
-   */
-  bool is_keyboard() const;
-
-  /**
-   * @c true if the broken grab was implicit.
-   */
-  bool is_implicit() const;
-
-  /**
-   * Checks whether this event was caused by another grab in the same
-   * application. In this case, get_grab_window() can be used to acquire the
-   * new grab window. The results are undefined if has_grab_window() returns
-   * @c false and get_grab_window() is called.
-   */
-  bool has_grab_window() const;
-
-  /**
-   * Returns the new grab window. The results are undefined if
-   * has_grab_window() would return @c false before the call.
-   */
-  _MEMBER_GET_GOBJECT(grab_window, grab_window, Gdk::Window, GdkWindow*)
-};
-
-/** Generated during touchpad swipe gestures.
- *
- * get_event_type() will return Gdk::Event::Type::TOUCHPAD_SWIPE.
- *
- * @newin{3,90}
- */
-class EventTouchpadSwipe : public Event
-{
-  _CLASS_GDKEVENT(EventTouchpadSwipe, GdkEventTouchpadSwipe, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
-
-  /**
-   * Returns the current phase of the gesture.
-   */
-  _MEMBER_GET(phase, phase, TouchpadGesturePhase, GdkTouchpadGesturePhase)
-
-#m4 _CONVERSION(`gint8',`int',`$3')
-  /**
-   * Returns the number of fingers triggering the swipe.
-   */
-  _MEMBER_GET(n_fingers, n_fingers, int, gint8)
-
-  /**
-   * Returns a bit mask representing the state of the modifier keys (e.g.
-   * Control, Shift and Alt) and the pointer buttons.
-   */
-  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
-
-  /**
-   * Returns the X coordinate of the pointer relative to the window.
-   */
-  _MEMBER_GET(x, x, double, gdouble)
-
-  /**
-   * Returns the Y coordinate of the pointer relative to the window.
-   */
-  _MEMBER_GET(y, y, double, gdouble)
-
-  /**
-   * Returns the movement delta in the X axis of the swipe focal point.
-   */
-  _MEMBER_GET(dx, dx, double, gdouble)
-
-  /**
-   * Returns the movement delta in the Y axis of the swipe focal point.
-   */
-  _MEMBER_GET(dy, dy, double, gdouble)
-
-  /**
-   * Returns the X coordinate of the pointer relative to the root of the screen.
-   */
-  _MEMBER_GET(root_x, x_root, double, gdouble)
-
-  /**
-   * Returns the Y coordinate of the pointer relative to the root of the screen.
-   */
-  _MEMBER_GET(root_y, y_root, double, gdouble)
-};
-
-/** Generated during touchpad swipe gestures.
- *
- * get_event_type() will return Gdk::Event::Type::TOUCHPAD_PINCH.
- *
- * @newin{3,90}
- */
-class EventTouchpadPinch : public Event
-{
-  _CLASS_GDKEVENT(EventTouchpadPinch, GdkEventTouchpadPinch, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
-
-  /**
-   * Returns the current phase of the gesture.
-   */
-  _MEMBER_GET(phase, phase, TouchpadGesturePhase, GdkTouchpadGesturePhase)
-
-  /**
-   * Returns the number of fingers triggering the swipe.
-   */
-  _MEMBER_GET(n_fingers, n_fingers, int, gint8)
-
-  /**
-   * Returns a bit mask representing the state of the modifier keys (e.g.
-   * Control, Shift and Alt) and the pointer buttons.
-   */
-  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
-
-  /**
-   * Returns the X coordinate of the pointer relative to the window.
-   */
-  _MEMBER_GET(x, x, double, gdouble)
-
-  /**
-   * Returns the Y coordinate of the pointer relative to the window.
-   */
-  _MEMBER_GET(y, y, double, gdouble)
-
-  /**
-   * Returns the movement delta in the X axis of the swipe focal point.
-   */
-  _MEMBER_GET(dx, dx, double, gdouble)
-
-  /**
-   * Returns the movement delta in the Y axis of the swipe focal point.
-   */
-  _MEMBER_GET(dy, dy, double, gdouble)
-
-  /**
-   * Returns the angle change in radians. Negative angles denote counter-
-   * clockwise movements.
-   */
-  _MEMBER_GET(angle_delta, angle_delta, double, gdouble)
-
-  /**
-   * Returns the current scale, relative to that at the time of the
-   * corresponding Gdk::TouchpadGesturePhase::BEGIN event.
-   */
-  _MEMBER_GET(scale, scale, double, gdouble)
-
-  /**
-   * Returns the X coordinate of the pointer relative to the root of the screen.
-   */
-  _MEMBER_GET(root_x, x_root, double, gdouble)
-
-  /**
-   * Returns the Y coordinate of the pointer relative to the root of the screen.
-   */
-  _MEMBER_GET(root_y, y_root, double, gdouble)
-};
-
-/** Generated during Gdk::InputSource::TABLET_PAD button presses and releases.
- *
- * get_event_type() will return Gdk::Event::Type::PAD_BUTTON_PRESS or
- * Gdk::Event::Type::PAD_BUTTON_RELEASE.
- *
- * @newin{3,90}
- */
-class EventPadButton : public Event
-{
-  _CLASS_GDKEVENT(EventPadButton, GdkEventPadButton, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
-
-  /**
-   * Returns the pad group the button belongs to.
-   * A Gdk::InputSource::TABLET_PAD device may have one or more groups
-   * containing a set of buttons/rings/strips each.
-   */
-  _MEMBER_GET(group, group, guint, guint)
-
-  /**
-   * Returns the pad button that was pressed.
-   */
-  _MEMBER_GET(button, button, guint, guint)
-
-  /**
-   * Returns the current mode of @a group.
-   * Different groups in a Gdk::InputSource::TABLET_PAD device may have
-   * different current modes.
-   */
-  _MEMBER_GET(mode, mode, guint, guint)
-};
-
-/** Generated during Gdk::InputSource::TABLET_PAD interaction with tactile sensors.
- *
- * get_event_type() will return Gdk::Event::Type::PAD_RING or
- * Gdk::Event::Type::PAD_STRIP.
- *
- * @newin{3,90}
- */
-class EventPadAxis : public Event
-{
-  _CLASS_GDKEVENT(EventPadAxis, GdkEventPadAxis, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
-
-  /**
-   * Returns the pad group the ring/strip belongs to.
-   * A Gdk::InputSource::TABLET_PAD device may have one or more groups
-   * containing a set of buttons/rings/strips each.
-   */
-  _MEMBER_GET(group, group, guint, guint)
-
-  /**
-   * Returns the number of strip/ring that was interacted.
-   * This number is 0-indexed.
-   */
-  _MEMBER_GET(index, index, guint, guint)
-
-  /**
-   * Returns the current mode of @a group.
-   * Different groups in a Gdk::InputSource::TABLET_PAD device may have
-   * different current modes.
-   */
-  _MEMBER_GET(mode, mode, guint, guint)
-
-  /**
-   * Returns the current value for the given axis.
-   */
-  _MEMBER_GET(value, value, double, gdouble)
-};
-
-/** Generated during Gdk::InputSource::TABLET_PAD mode switches in a group.
- *
- * get_event_type() will return Gdk::Event::Type::PAD_GROUP_MODE.
- *
- * @newin{3,90}
- */
-class EventPadGroupMode : public Event
-{
-  _CLASS_GDKEVENT(EventPadGroupMode, GdkEventPadGroupMode, Event, GdkEvent)
-
-public:
-
-  /**
-   * Returns the timestamp of the event in milliseconds
-   */
-  _MEMBER_GET(time, time, guint32, guint32)
-
-  /**
-   * Returns the pad group that is switching mode.
-   * A Gdk::InputSource::TABLET_PAD device may have one or more groups
-   * containing a set of buttons/rings/strips each.
-   */
-  _MEMBER_GET(group, group, guint, guint)
-
-  /**
-   * Returns the new mode of @a group.
-   * Different groups in a Gdk::InputSource::TABLET_PAD device may have
-   * different current modes.
-   */
-  _MEMBER_GET(mode, mode, guint, guint)
+  // Belong to subclasses:
+  _IGNORE(gdk_event_get_time, gdk_event_get_state, gdk_event_get_keyval,
+    gdk_event_get_keycode, gdk_event_get_scancode, gdk_event_get_coords,
+    gdk_event_get_root_coords, gdk_event_get_button, gdk_event_get_device,
+    gdk_event_get_click_count, gdk_event_get_scroll_deltas,
+    gdk_event_get_scroll_direction, gdk_event_get_event_sequence,
+    gdk_event_get_pointer_emulated, gdk_event_get_axis, shall_trigger_context_menu,
+    gdk_event_is_scroll_stop_event, gdk_event_request_motions)
 };
 
 } // namespace Gdk
diff --git a/gdk/src/events.ccg b/gdk/src/events.ccg
new file mode 100644
index 0000000..8154928
--- /dev/null
+++ b/gdk/src/events.ccg
@@ -0,0 +1,83 @@
+/* Copyright (C) 2017 The gtkmm Development Team
+ *
+ * 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.1 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 <gdkmm/device.h>
+
+namespace Gdk
+{
+int EventKey::get_scancode() const
+{
+  return gdk_event_get_scancode(const_cast<GdkEvent*>(Event::gobj()));
+}
+
+guint EventButton::get_click_count() const
+{
+  guint click_count = 0;
+  gdk_event_get_click_count(Event::gobj(), &click_count);
+  return click_count;
+}
+
+bool EventButton::shall_trigger_context_menu() const
+{
+  return gdk_event_triggers_context_menu(Event::gobj());
+}
+
+bool EventButton::get_axis(Gdk::AxisUse axis_use, double& value) const
+{
+  return gdk_event_get_axis(Event::gobj(), static_cast<GdkAxisUse>(axis_use), &value);
+}
+
+bool EventMotion::get_axis(Gdk::AxisUse axis_use, double& value) const
+{
+  return gdk_event_get_axis(Event::gobj(), static_cast<GdkAxisUse>(axis_use), &value);
+}
+
+bool EventTouch::get_axis(Gdk::AxisUse axis_use, double& value) const
+{
+  return gdk_event_get_axis(Event::gobj(), static_cast<GdkAxisUse>(axis_use), &value);
+}
+
+bool EventScroll::is_scroll_stop_event() const
+{
+  return gobj()->is_stop;
+}
+
+bool EventSelection::has_requestor() const
+{
+  return gobj()->requestor != nullptr;
+}
+
+bool EventOwnerChange::has_owner() const
+{
+  return gobj()->owner != nullptr;
+}
+
+bool EventGrabBroken::is_keyboard() const
+{
+  return gobj()->keyboard;
+}
+
+bool EventGrabBroken::is_implicit() const
+{
+  return gobj()->implicit;
+}
+
+bool EventGrabBroken::has_grab_window() const
+{
+  return gobj()->grab_window != nullptr;
+}
+
+} //namespace Gdk
diff --git a/gdk/src/events.hg b/gdk/src/events.hg
new file mode 100644
index 0000000..475afb9
--- /dev/null
+++ b/gdk/src/events.hg
@@ -0,0 +1,1129 @@
+/* Copyright (C) 2017 The gtkmm Development Team
+ *
+ * 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.1 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/>.
+ */
+
+_DEFS(gdkmm,gdk)
+_CC_INCLUDE(gdk/gdk.h)
+
+#include <glibmm/refptr.h>
+#include <gdkmm/event.h>
+#include <gdkmm/enums.h>
+#include <gdkmm/rectangle.h>
+#include <gdkmm/types.h>
+#include <gdkmm/window.h>
+
+// All subclasses of Gdk::Event.
+//
+// Keeping the subclasses in a separate file makes it easier to avoid cyclic
+// inclusions (where a.h includes b.h, and b.h includes a.h).
+// One file per subclass would result in too many small files.
+
+namespace Gdk
+{
+class Device;
+
+/** Representing an event sequence.
+ * Used to differentiate between multiple touches on multitouch touchscreens.
+ */
+struct EventSequence;
+
+/** Generated when a key is pressed or released.
+ *
+ * get_event_type() will return Gdk::Event::Type::KEY_PRESS or
+ * Gdk::Event::Type::KEY_RELEASE.
+ *
+ * @newin{3,90}
+ */
+class EventKey : public Event
+{
+  _CLASS_GDKEVENT(EventKey, GdkEventKey, Event, GdkEvent)
+  _IGNORE(gdk_event_new, gdk_event_copy, gdk_event_free)
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+  _IGNORE(gdk_event_get_time)
+
+  /**
+   * Returns a bit mask representing the state of the modifier keys (e.g.
+   * Control, Shift and Alt) and the pointer buttons.
+   */
+  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
+  _IGNORE(gdk_event_get_state)
+
+  /**
+   * Returns the key that was pressed or released. See the <gdk/gdkkeysyms.h>
+   * header file for a complete list of GDK key codes.
+   */
+  _MEMBER_GET(keyval, keyval, guint, guint)
+  _IGNORE(gdk_event_get_keyval)
+
+  /**
+   * Returns the raw code of the key that was pressed or released.
+   */
+  _MEMBER_GET(hardware_keycode, hardware_keycode, guint16, guint16)
+  _IGNORE(gdk_event_get_keycode)
+
+  _WRAP_METHOD_DOCS_ONLY(gdk_event_get_scancode)
+  int get_scancode() const;
+
+  /**
+   * Returns the keyboard group
+   */
+  _MEMBER_GET(group, group, guint8, guint8)
+
+  /**
+   * Returns @c true if the hardware keycode is mapped to a modifier key
+   */
+  _MEMBER_GET(is_modifier, is_modifier, bool, guint)
+
+  // Belong to the base class:
+  _IGNORE(gdk_event_get_event_type, gdk_event_get_window, gdk_event_get_screen,
+    gdk_event_get_seat, gdk_event_get, gdk_event_peek, gdk_event_put,
+    gdk_events_pending, gdk_event_get_device_tool, gdk_event_set_device_tool)
+};
+
+/** Represents a mouse button press or release event.
+ *
+ * get_event_type() will return one of Gdk::Event::Type::BUTTON_PRESS,
+ * Gdk::Event::Type::DOUBLE_BUTTON_PRESS, Gdk::Event::Type::TRIPLE_BUTTON_PRESS
+ * or Gdk::Event::Type::BUTTON_RELEASE.
+ *
+ * Double and triple-clicks result in a sequence of events being received. For
+ * double-clicks the order of events will be:
+ *
+ * @code
+ * Gdk::Event::Type::BUTTON_PRESS
+ * Gdk::Event::Type::BUTTON_RELEASE
+ * Gdk::Event::Type::BUTTON_PRESS
+ * Gdk::Event::Type::DOUBLE_BUTTON_PRESS
+ * Gdk::Event::Type::BUTTON_RELEASE
+ * @endcode
+ *
+ * Note that the first click is received just like a normal button press, while
+ * the second click results in a Gdk::Event::Type::DOUBLE_BUTTON_PRESS being
+ * received just after the Gdk::Event::Type::BUTTON_PRESS.
+ *
+ * Triple-clicks are very similar to double-clicks, except that
+ * Gdk::Event::Type::TRIPLE_BUTTON_PRESS is inserted after the third click.
+ * The order of the events is:
+ *
+ * @code
+ * Gdk::Event::Type::BUTTON_PRESS
+ * Gdk::Event::Type::BUTTON_RELEASE
+ * Gdk::Event::Type::BUTTON_PRESS
+ * Gdk::Event::Type::DOUBLE_BUTTON_PRESS
+ * Gdk::Event::Type::BUTTON_RELEASE
+ * Gdk::Event::Type::BUTTON_PRESS
+ * Gdk::Event::Type::TRIPLE_BUTTON_PRESS
+ * Gdk::Event::Type::BUTTON_RELEASE
+ * @endcode
+ *
+ * For a double click to occur, the second button press must occur within 1/4 of
+ * a second of the first. For a triple click to occur, the third button press
+ * must also occur within 1/2 second of the first button press.
+ *
+ * @newin{3,90}
+ */
+class EventButton : public Event
+{
+  _CLASS_GDKEVENT(EventButton, GdkEventButton, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+
+  /**
+   * Returns a bit mask representing the state of the modifier keys (e.g.
+   * Control, Shift and Alt) and the pointer buttons.
+   */
+  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
+
+  /**
+   * Returns the X coordinate of the pointer relative to the window.
+   */
+  _MEMBER_GET(x, x, double, gdouble)
+  _IGNORE(gdk_event_get_coords)
+
+  /**
+   * Returns the Y coordinate of the pointer relative to the window.
+   */
+  _MEMBER_GET(y, y, double, gdouble)
+
+  /**
+   * Returns the X coordinate of the pointer relative to the root screen.
+   */
+  _MEMBER_GET(root_x, x_root, double, gdouble)
+  _IGNORE(gdk_event_get_root_coords)
+
+  /**
+   * Returns the Y coordinate of the pointer relative to the root screen.
+   */
+  _MEMBER_GET(root_y, y_root, double, gdouble)
+
+  _WRAP_METHOD_DOCS_ONLY(gdk_event_get_axis)
+  bool get_axis(Gdk::AxisUse axis_use, double& value) const;
+
+  /**
+   * Returns the number of the button which was pressed or released, numbered
+   * from 1 to 5. Normally button 1 is the left mouse button, 2 is the middle
+   * button, and 3 is the right button. On 2-button mice, the middle button can
+   * often be simulated by pressing both mouse buttons together
+   */
+  _MEMBER_GET(button, button, guint, guint)
+  _IGNORE(gdk_event_get_button)
+
+  /**
+   * Returns the device where the event originated from.
+   */
+  _MEMBER_GET_GOBJECT(device, device, Gdk::Device, GdkDevice*)
+  _IGNORE(gdk_event_get_device)
+
+  /** Extracts the click count from an event.
+   * @return The click count (0..3).
+   */
+  guint get_click_count() const;
+  _IGNORE(gdk_event_get_click_count)
+
+  _WRAP_METHOD_DOCS_ONLY(gdk_event_triggers_context_menu)
+  bool shall_trigger_context_menu() const;
+};
+
+/** Generated when the mouse is scrolled.
+ *
+ * These events are from button presses for the buttons 4 to 7. Wheel mice are
+ * usually configured to generate button press events for buttons 4 and 5 when
+ * the wheel is turned.
+ *
+ * get_event_type() will return Gdk::Event::Type::SCROLL.
+ *
+ * Some GDK backends can also generate 'smooth' scroll events, which can be
+ * recognized by the Gdk::ScrollDirection::SMOOTH scroll direction. For these,
+ * scroll deltas can be obtained with get_delta_x() and get_delta_y().
+ *
+ * @newin{3,90}
+ */
+class EventScroll : public Event
+{
+  _CLASS_GDKEVENT(EventScroll, GdkEventScroll, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+
+  /**
+   * Returns a bit mask representing the state of the modifier keys (e.g.
+   * Control, Shift and Alt) and the pointer buttons.
+   */
+  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
+
+  /**
+   * Returns the X coordinate of the pointer relative to the window.
+   */
+  _MEMBER_GET(x, x, double, gdouble)
+
+  /**
+   * Returns the Y coordinate of the pointer relative to the window.
+   */
+  _MEMBER_GET(y, y, double, gdouble)
+
+  /**
+   * Returns the X coordinate of the pointer relative to the root screen.
+   */
+  _MEMBER_GET(root_x, x_root, double, gdouble)
+
+  /**
+   * Returns the Y coordinate of the pointer relative to the root screen.
+   */
+  _MEMBER_GET(root_y, y_root, double, gdouble)
+
+  /**
+   * Returns the scroll delta in the X axis. Meaningful only if get_direction()
+   * returns Gdk::ScrollDirection::SMOOTH
+   */
+  _MEMBER_GET(delta_x, delta_x, double, gdouble)
+  _IGNORE(gdk_event_get_scroll_deltas)
+
+  /**
+   * Returns the scroll delta in the Y axis. Meaningful only if get_direction()
+   * returns Gdk::ScrollDirection::SMOOTH
+   */
+  _MEMBER_GET(delta_y, delta_y, double, gdouble)
+
+  /**
+   * Returns the direction of the scroll.
+   */
+  _MEMBER_GET(direction, direction, ScrollDirection, GdkScrollDirection)
+  _IGNORE(gdk_event_get_scroll_direction)
+
+  _WRAP_METHOD_DOCS_ONLY(gdk_event_is_scroll_stop_event)
+  bool is_scroll_stop_event() const;
+
+  /**
+   * Returns the device where the event originated from.
+   */
+  _MEMBER_GET_GOBJECT(device, device, Gdk::Device, GdkDevice*)
+};
+
+/** Generated when a mouse pointer is moved.
+ *
+ * get_event_type() will return Gdk::Event::Type::MOTION_NOTIFY.
+ *
+ * @newin{3,90}
+ */
+class EventMotion : public Event
+{
+  _CLASS_GDKEVENT(EventMotion, GdkEventMotion, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+
+  /**
+   * Returns a bit mask representing the state of the modifier keys (e.g.
+   * Control, Shift and Alt) and the pointer buttons.
+   */
+  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
+
+  /**
+   * Returns the X coordinate of the pointer relative to the window.
+   */
+  _MEMBER_GET(x, x, double, gdouble)
+
+  /**
+   * Returns the Y coordinate of the pointer relative to the window.
+   */
+  _MEMBER_GET(y, y, double, gdouble)
+
+  /**
+   * Returns the X coordinate of the pointer relative to the root screen.
+   */
+  _MEMBER_GET(root_x, x_root, double, gdouble)
+
+  /**
+   * Returns the Y coordinate of the pointer relative to the root screen.
+   */
+  _MEMBER_GET(root_y, y_root, double, gdouble)
+
+  _WRAP_METHOD_DOCS_ONLY(gdk_event_get_axis)
+  bool get_axis(Gdk::AxisUse axis_use, double& value) const;
+
+#m4 _CONVERSION(`gint16',`bool',`$3')
+  /**
+   * Returns @c true if the event is motion hint.
+   *
+   * Motion hints are received only if Gdk::EventMask::POINTER_MOTION_HINT_MASK is set.
+   * It is used to reduce the number of Gdk::Event::Type::MOTION_NOTIFY events received.
+   * Normally a Gdk::Event::Type::MOTION_NOTIFY event is received each time the mouse
+   * moves. However, if the application spends a lot of time processing the
+   * event (updating the display, for example), it can lag behind the position
+   * of the mouse. When using Gdk::EventMask::POINTER_MOTION_HINT_MASK, fewer
+   * Gdk::Event::Type::MOTION_NOTIFY events will be sent, some of which are marked as a
+   * hint. To receive more motion events after a motion hint event, the
+   * application needs to ask for more, by calling request_motions().
+   */
+  _MEMBER_GET(is_hint, is_hint, bool, gint16)
+
+  _WRAP_METHOD(void request_motions(), gdk_event_request_motions)
+
+  /**
+   * Returns the device where the event originated from.
+   */
+  _MEMBER_GET_GOBJECT(device, device, Gdk::Device, GdkDevice*)
+};
+
+/** Generated during an attached touchscreen is touched.
+ *
+ * get_event_type() will return one of Gdk::Event::Type::TOUCH_BEGIN,
+ * Gdk::Event::Type::TOUCH_UPDATE, Gdk::Event::Type::TOUCH_END or
+ * Gdk::Event::Type::TOUCH_CANCEL.
+ *
+ * Touch events are grouped into sequences by means of the sequence field, which
+ * can also be obtained with get_event_sequence(). Each sequence
+ * begins with a Gdk::Event::Type::TOUCH_BEGIN event, followed by any number of
+ * Gdk::Event::Type::TOUCH_UPDATE events, and ends with a Gdk::Event::Type::TOUCH_END
+ * (or Gdk::Event::Type::TOUCH_CANCEL) event. With multitouch devices, there may
+ * be several active sequences at the same time.
+ *
+ * @newin{3,90}
+ */
+class EventTouch : public Event
+{
+  _CLASS_GDKEVENT(EventTouch, GdkEventTouch, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+
+  /**
+   * Returns a bit mask representing the state of the modifier keys (e.g.
+   * Control, Shift and Alt) and the pointer buttons.
+   */
+  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
+
+  /**
+   * Returns the X coordinate of the pointer relative to the window.
+   */
+  _MEMBER_GET(x, x, double, gdouble)
+
+  /**
+   * Returns the Y coordinate of the pointer relative to the window.
+   */
+  _MEMBER_GET(y, y, double, gdouble)
+
+  /**
+   * Returns the X coordinate of the pointer relative to the root screen.
+   */
+  _MEMBER_GET(root_x, x_root, double, gdouble)
+
+  /**
+   * Returns the Y coordinate of the pointer relative to the root screen.
+   */
+  _MEMBER_GET(root_y, y_root, double, gdouble)
+
+  _WRAP_METHOD_DOCS_ONLY(gdk_event_get_axis)
+  bool get_axis(Gdk::AxisUse axis_use, double& value) const;
+
+#m4 _CONVERSION(`const GdkEventSequence*',`const Gdk::EventSequence*',`reinterpret_cast<$2>($3)')
+  /**
+   * Returns the event sequence that the event belongs to
+   */
+  _MEMBER_GET(event_sequence, sequence, const Gdk::EventSequence*, const GdkEventSequence*)
+  _IGNORE(gdk_event_get_event_sequence)
+
+  /**
+   * Returns @c true if the event should be used for emulating pointer event
+   */
+  _MEMBER_GET(is_emulating_pointer, emulating_pointer, bool, gboolean)
+  _IGNORE(gdk_event_get_pointer_emulated)
+
+  /**
+   * Returns the device where the event originated from.
+   */
+  _MEMBER_GET_GOBJECT(device, device, Gdk::Device, GdkDevice*)
+};
+
+/** Generated when the mouse pointer leaves or enters the window.
+ *
+ * get_event_type() will return one of Gdk::Event::Type::LEAVE_NOTIFY or
+ * Gdk::Event::Type::ENTER_NOTIFY.
+ *
+ * @newin{3,90}
+ */
+class EventCrossing : public Event
+{
+  _CLASS_GDKEVENT(EventCrossing, GdkEventCrossing, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+
+  /**
+   * Returns the window that was entered or left
+   */
+  _MEMBER_GET_GOBJECT(subwindow, subwindow, Gdk::Window, GdkWindow*)
+
+  /**
+   * Returns a bit mask representing the state of the modifier keys (e.g.
+   * Control, Shift and Alt) and the pointer buttons.
+   */
+  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
+
+  /**
+   * Returns the X coordinate of the pointer relative to the window.
+   */
+  _MEMBER_GET(x, x, double, gdouble)
+
+  /**
+   * Returns the Y coordinate of the pointer relative to the window.
+   */
+  _MEMBER_GET(y, y, double, gdouble)
+
+  /**
+   * Returns the X coordinate of the pointer relative to the root screen.
+   */
+  _MEMBER_GET(root_x, x_root, double, gdouble)
+
+  /**
+   * Returns the Y coordinate of the pointer relative to the root screen.
+   */
+  _MEMBER_GET(root_y, y_root, double, gdouble)
+
+  /*** Returns the crossing mode.
+   * Gdk::CrossingMode::GTK_GRAB, Gdk::CrossingMode::GTK_UNGRAB, and
+   * Gdk::CrossingMode::STATE_CHANGED are always synthesized, never native.
+   */
+  _MEMBER_GET(mode, mode, Gdk::CrossingMode, GdkCrossingMode)
+
+  /**
+   * Returns the kind of crossing that has been made
+   */
+  _MEMBER_GET(detail, detail, Gdk::NotifyType, GdkNotifyType)
+
+  /**
+   * Returns @c true if the window was the focus window, @c false otherwise
+   */
+  _MEMBER_GET(focus, focus, bool, gboolean)
+};
+
+/** Generated when all or part of a window becomes visible and needs to be
+ * redrawn.
+ *
+ * get_event_type() will return one of Gdk::Event::Type::EXPOSE, Gdk::Event::Type::DAMAGE.
+ *
+ * @newin{3,90}
+ */
+class EventExpose : public Event
+{
+  _CLASS_GDKEVENT(EventExpose, GdkEventExpose, Event, GdkEvent)
+
+public:
+
+#m4 _CONVERSION(`GdkRectangle',`const Gdk::Rectangle&',`Glib::wrap(&$3)')
+  /**
+   * Returns the bounding box of the region to be redrawn
+   */
+  _MEMBER_GET(area, area, const Gdk::Rectangle&, GdkRectangle)
+
+#m4 _CONVERSION(`cairo_region_t*',`::Cairo::RefPtr<const 
::Cairo::Region>',`::Cairo::RefPtr<::Cairo::Region>(new ::Cairo::Region($3, false /* take ref */))')
+  /**
+   * Returns the region to be redrawn
+   */
+  _MEMBER_GET(region, region, ::Cairo::RefPtr<const ::Cairo::Region>, cairo_region_t*);
+
+  /**
+   * Returns the number of contiguous Gdk::Event::Type::EXPOSE events following this one.
+   * The only use for this is "exposure compression", i.e. handling all contiguous
+   * Gdk::Event::Type::EXPOSE events in one go, though GDK performs some exposure
+   * compression so this is not normally needed.
+   */
+  _MEMBER_GET(count, count, int, gint)
+};
+
+// GdkEventVisibility is deprecated. It's not used in gtk+ 4.
+
+/** Generated when the keyboard focus changes.
+ *
+ * get_event_type() will return Gdk::Event::Type::FOCUS_CHANGE.
+ *
+ * @newin{3,90}
+ */
+class EventFocus : public Event
+{
+  _CLASS_GDKEVENT(EventFocus, GdkEventFocus, Event, GdkEvent)
+
+public:
+
+  /**
+   * @c true if the window gained focus, @c false if lost
+   */
+  _MEMBER_GET(focus, in, bool, gint16)
+};
+
+/** Generated when the position or size of a window changes.
+ *
+ * get_event_type() will return Gdk::Event::Type::CONFIGURE.
+ *
+ * @newin{3,90}
+ */
+class EventConfigure : public Event
+{
+  _CLASS_GDKEVENT(EventConfigure, GdkEventConfigure, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the new X coordinate of the window, relative to its parent
+   */
+  _MEMBER_GET(x, x, int, gint)
+
+  /**
+   * Returns the new Y coordinate of the window, relative to its parent
+   */
+  _MEMBER_GET(y, y, int, gint)
+
+  /**
+   * Returns the new width of the window
+   */
+  _MEMBER_GET(width, width, int, gint)
+
+  /**
+   * Returns the new height of the window
+   */
+  _MEMBER_GET(height, height, int, gint)
+
+  /**
+   * Convenience method to access all position and size information at once
+   */
+  Gdk::Rectangle get_rect() const;
+};
+
+/** Rarely used event. Generated when a property of a window changes.
+ *
+ * get_event_type() will return Gdk::Event::Type::PROPERTY_NOTIFY.
+ *
+ * @newin{3,90}
+ */
+class EventProperty : public Event
+{
+  _CLASS_GDKEVENT(EventProperty, GdkEventProperty, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+
+  /**
+   * Returns the atom indicating the property that was changed
+   */
+  _MEMBER_GET(atom, atom, GdkAtom, GdkAtom)
+
+  /**
+   * Identifies whether the property was changed (Gdk::PropertyState::NEW_VALUE) or
+   * deleted (Gdk::PropertyState::DELETE).
+   */
+  _MEMBER_GET(state, state, Gdk::PropertyState, GdkPropertyState)
+};
+
+/** Rarely used event. Generated when a selection is requested or ownership of a
+ * selection is taken over by another client application.
+ *
+ * get_event_type() will return one of Gdk::Event::Type::SELECTION_CLEAR,
+ * Gdk::Event::Type::SELECTION_NOTIFY or Gdk::Event::Type::SELECTION_REQUEST.
+ *
+ * @newin{3,90}
+ */
+class EventSelection : public Event
+{
+  _CLASS_GDKEVENT(EventSelection, GdkEventSelection, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+
+  /**
+   * Returns the atom identifying the selection
+   */
+  _MEMBER_GET(selection, selection, GdkAtom, GdkAtom)
+
+  /**
+   * Returns the atom identifying the target to which the selection should be
+   * converted
+   */
+  _MEMBER_GET(target, target, GdkAtom, GdkAtom)
+
+  /**
+   * Returns the atom identifying the property in which to place the result of
+   * the conversion
+   */
+  _MEMBER_GET(property, property, GdkAtom, GdkAtom)
+
+  /**
+   * Checks whether there's window on which to place the property. The results
+   * are undefined if has_requestor() returns @c false and get_requestor()
+   * is called.
+   */
+  bool has_requestor() const;
+
+  /**
+   * Returns the window on which to place the property. The results are
+   * undefined if has_requestor() would return @c false before the call.
+   */
+  _MEMBER_GET_GOBJECT(requestor, requestor, Gdk::Window, GdkWindow*)
+};
+
+/** Rarely used event. Generated when the owner of a selection changes. On X11,
+ * this information is only available if the X server supports the XFIXES
+ * extension.
+ *
+ * get_event_type() will return Gdk::Event::Type::OWNER_CHANGE.
+ *
+ * @newin{3,90}
+ */
+class EventOwnerChange : public Event
+{
+  _CLASS_GDKEVENT(EventOwnerChange, GdkEventOwnerChange, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+
+  /**
+   * Returns the time at which the ownership changed
+   */
+  _MEMBER_GET(selection_time, selection_time, guint32, guint32)
+
+  /**
+   * Returns the atom identifying the selection
+   */
+  _MEMBER_GET(selection, selection, GdkAtom, GdkAtom)
+
+  /**
+   * Returns the reason of the ownership change
+   */
+  _MEMBER_GET(reason, reason, Gdk::OwnerChange, GdkOwnerChange)
+
+  /**
+   * Checks whether there's new owner of the selection. The results are
+   * undefined if has_owner() returns @c false and get_owner() is called.
+   */
+  bool has_owner() const;
+
+  /**
+   * Returns the window which is the new owner of the selection. The results are
+   * undefined if has_owner() would return @c false before the call.
+   */
+  _MEMBER_GET_GOBJECT(owner, owner, Gdk::Window, GdkWindow*)
+};
+
+/** Generated during Drag-and-Drop (DND) operations.
+ *
+ * get_event_type() will return one of Gdk::Event::Type::DRAG_ENTER,
+ * Gdk::Event::Type::DRAG_LEAVE, Gdk::Event::Type::DRAG_MOTION,
+ * Gdk::Event::Type::DRAG_STATUS, Gdk::Event::Type::DROP_START
+ * or Gdk::Event::Type::DROP_FINISHED.
+ *
+ * @newin{3,90}
+ */
+class EventDND : public Event
+{
+  _CLASS_GDKEVENT(EventDND, GdkEventDND, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+
+  /**
+   * Returns the X coordinate of the pointer relative to the root screen. Only
+   * meaningful if get_event_type() returns Gdk::Event::Type::DRAG_MOTION or
+   * Gdk::Event::Type::DROP_START.
+   */
+  _MEMBER_GET(root_x, x_root, double, gdouble)
+
+  /**
+   * Returns the Y coordinate of the pointer relative to the root screen.
+   */
+  _MEMBER_GET(root_y, y_root, double, gdouble)
+
+  /**
+   * Returns the drag context
+   */
+#m4 _CONVERSION(`GdkDragContext*',`Glib::RefPtr<const Gdk::DragContext>', `Glib::wrap($3)')
+  _MEMBER_GET_GOBJECT(context, context, Gdk::DragContext, GdkDragContext*)
+};
+
+/** Rarely used event. Generated when a stylus has moved in or out of contact
+ * with the tablet, or perhaps that the user's finger has moved in or out of
+ * contact with a touch screen.
+ *
+ * This event type will be used pretty rarely. It only is important for XInput
+ * aware programs that are drawing their own cursor.
+ *
+ * get_event_type() will return one of Gdk::Event::Type::PROXIMITY_IN,
+ * Gdk::Event::Type::PROXIMITY_OUT.
+ *
+ * @newin{3,90}
+ */
+class EventProximity : public Event
+{
+  _CLASS_GDKEVENT(EventProximity, GdkEventProximity, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+
+  /**
+   * Returns the device where the event originated from.
+   */
+  _MEMBER_GET_GOBJECT(device, device, Gdk::Device, GdkDevice*)
+};
+
+/** Generated when the state of the toplevel window changes.
+ *
+ * get_event_type() will return Gdk::Event::Type::WINDOW_STATE.
+ *
+ * @newin{3,90}
+ */
+class EventWindowState : public Event
+{
+  _CLASS_GDKEVENT(EventWindowState, GdkEventWindowState, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns a bit mask identifying which bits of the state have been changed
+   */
+  _MEMBER_GET(mask, changed_mask, Gdk::Window::State, GdkWindowState)
+
+  /**
+   * Returns the new window state
+   */
+  _MEMBER_GET(state, new_window_state, Gdk::Window::State, GdkWindowState)
+
+};
+
+/** Generated when a setting is modified.
+ *
+ * get_event_type() will return Gdk::Event::Type::SETTING.
+ *
+ * @newin{3,90}
+ */
+class EventSetting : public Event
+{
+  _CLASS_GDKEVENT(EventSetting, GdkEventSetting, Event, GdkEvent)
+
+public:
+
+  /**
+   * Specifies what happened to the setting.
+   */
+  _MEMBER_GET(action, action, Gdk::SettingAction, GdkSettingAction)
+
+  /**
+   * Returns the name of the setting
+   */
+  _MEMBER_GET(name, name, Glib::ustring, const char*)
+
+};
+
+/** Generated when a pointer or keyboard grab is broken. On X11, this happens
+ * when the grab window becomes unviewable (i.e. it or one of its ancestors is
+ * unmapped), or if the same application grabs the pointer or keyboard again.
+ * Note that implicit grabs (which are initiated by button presses) can also
+ * cause Gdk::EventGrabBroken events.
+ *
+ * get_event_type() will return Gdk::Event::Type::GRAB_BROKEN.
+ *
+ * @newin{3,90}
+ */
+class EventGrabBroken : public Event
+{
+  _CLASS_GDKEVENT(EventGrabBroken, GdkEventGrabBroken, Event, GdkEvent)
+
+public:
+
+  /**
+   * @c true if a keyboard grab was broken, @c false if a pointer grab was
+   * broken
+   */
+  bool is_keyboard() const;
+
+  /**
+   * @c true if the broken grab was implicit.
+   */
+  bool is_implicit() const;
+
+  /**
+   * Checks whether this event was caused by another grab in the same
+   * application. In this case, get_grab_window() can be used to acquire the
+   * new grab window. The results are undefined if has_grab_window() returns
+   * @c false and get_grab_window() is called.
+   */
+  bool has_grab_window() const;
+
+  /**
+   * Returns the new grab window. The results are undefined if
+   * has_grab_window() would return @c false before the call.
+   */
+  _MEMBER_GET_GOBJECT(grab_window, grab_window, Gdk::Window, GdkWindow*)
+};
+
+/** Generated during touchpad swipe gestures.
+ *
+ * get_event_type() will return Gdk::Event::Type::TOUCHPAD_SWIPE.
+ *
+ * @newin{3,90}
+ */
+class EventTouchpadSwipe : public Event
+{
+  _CLASS_GDKEVENT(EventTouchpadSwipe, GdkEventTouchpadSwipe, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+
+  /**
+   * Returns the current phase of the gesture.
+   */
+  _MEMBER_GET(phase, phase, TouchpadGesturePhase, GdkTouchpadGesturePhase)
+
+#m4 _CONVERSION(`gint8',`int',`$3')
+  /**
+   * Returns the number of fingers triggering the swipe.
+   */
+  _MEMBER_GET(n_fingers, n_fingers, int, gint8)
+
+  /**
+   * Returns a bit mask representing the state of the modifier keys (e.g.
+   * Control, Shift and Alt) and the pointer buttons.
+   */
+  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
+
+  /**
+   * Returns the X coordinate of the pointer relative to the window.
+   */
+  _MEMBER_GET(x, x, double, gdouble)
+
+  /**
+   * Returns the Y coordinate of the pointer relative to the window.
+   */
+  _MEMBER_GET(y, y, double, gdouble)
+
+  /**
+   * Returns the movement delta in the X axis of the swipe focal point.
+   */
+  _MEMBER_GET(dx, dx, double, gdouble)
+
+  /**
+   * Returns the movement delta in the Y axis of the swipe focal point.
+   */
+  _MEMBER_GET(dy, dy, double, gdouble)
+
+  /**
+   * Returns the X coordinate of the pointer relative to the root of the screen.
+   */
+  _MEMBER_GET(root_x, x_root, double, gdouble)
+
+  /**
+   * Returns the Y coordinate of the pointer relative to the root of the screen.
+   */
+  _MEMBER_GET(root_y, y_root, double, gdouble)
+};
+
+/** Generated during touchpad swipe gestures.
+ *
+ * get_event_type() will return Gdk::Event::Type::TOUCHPAD_PINCH.
+ *
+ * @newin{3,90}
+ */
+class EventTouchpadPinch : public Event
+{
+  _CLASS_GDKEVENT(EventTouchpadPinch, GdkEventTouchpadPinch, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+
+  /**
+   * Returns the current phase of the gesture.
+   */
+  _MEMBER_GET(phase, phase, TouchpadGesturePhase, GdkTouchpadGesturePhase)
+
+  /**
+   * Returns the number of fingers triggering the swipe.
+   */
+  _MEMBER_GET(n_fingers, n_fingers, int, gint8)
+
+  /**
+   * Returns a bit mask representing the state of the modifier keys (e.g.
+   * Control, Shift and Alt) and the pointer buttons.
+   */
+  _MEMBER_GET(state, state, ModifierType, GdkModifierType)
+
+  /**
+   * Returns the X coordinate of the pointer relative to the window.
+   */
+  _MEMBER_GET(x, x, double, gdouble)
+
+  /**
+   * Returns the Y coordinate of the pointer relative to the window.
+   */
+  _MEMBER_GET(y, y, double, gdouble)
+
+  /**
+   * Returns the movement delta in the X axis of the swipe focal point.
+   */
+  _MEMBER_GET(dx, dx, double, gdouble)
+
+  /**
+   * Returns the movement delta in the Y axis of the swipe focal point.
+   */
+  _MEMBER_GET(dy, dy, double, gdouble)
+
+  /**
+   * Returns the angle change in radians. Negative angles denote counter-
+   * clockwise movements.
+   */
+  _MEMBER_GET(angle_delta, angle_delta, double, gdouble)
+
+  /**
+   * Returns the current scale, relative to that at the time of the
+   * corresponding Gdk::TouchpadGesturePhase::BEGIN event.
+   */
+  _MEMBER_GET(scale, scale, double, gdouble)
+
+  /**
+   * Returns the X coordinate of the pointer relative to the root of the screen.
+   */
+  _MEMBER_GET(root_x, x_root, double, gdouble)
+
+  /**
+   * Returns the Y coordinate of the pointer relative to the root of the screen.
+   */
+  _MEMBER_GET(root_y, y_root, double, gdouble)
+};
+
+/** Generated during Gdk::InputSource::TABLET_PAD button presses and releases.
+ *
+ * get_event_type() will return Gdk::Event::Type::PAD_BUTTON_PRESS or
+ * Gdk::Event::Type::PAD_BUTTON_RELEASE.
+ *
+ * @newin{3,90}
+ */
+class EventPadButton : public Event
+{
+  _CLASS_GDKEVENT(EventPadButton, GdkEventPadButton, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+
+  /**
+   * Returns the pad group the button belongs to.
+   * A Gdk::InputSource::TABLET_PAD device may have one or more groups
+   * containing a set of buttons/rings/strips each.
+   */
+  _MEMBER_GET(group, group, guint, guint)
+
+  /**
+   * Returns the pad button that was pressed.
+   */
+  _MEMBER_GET(button, button, guint, guint)
+
+  /**
+   * Returns the current mode of @a group.
+   * Different groups in a Gdk::InputSource::TABLET_PAD device may have
+   * different current modes.
+   */
+  _MEMBER_GET(mode, mode, guint, guint)
+};
+
+/** Generated during Gdk::InputSource::TABLET_PAD interaction with tactile sensors.
+ *
+ * get_event_type() will return Gdk::Event::Type::PAD_RING or
+ * Gdk::Event::Type::PAD_STRIP.
+ *
+ * @newin{3,90}
+ */
+class EventPadAxis : public Event
+{
+  _CLASS_GDKEVENT(EventPadAxis, GdkEventPadAxis, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+
+  /**
+   * Returns the pad group the ring/strip belongs to.
+   * A Gdk::InputSource::TABLET_PAD device may have one or more groups
+   * containing a set of buttons/rings/strips each.
+   */
+  _MEMBER_GET(group, group, guint, guint)
+
+  /**
+   * Returns the number of strip/ring that was interacted.
+   * This number is 0-indexed.
+   */
+  _MEMBER_GET(index, index, guint, guint)
+
+  /**
+   * Returns the current mode of @a group.
+   * Different groups in a Gdk::InputSource::TABLET_PAD device may have
+   * different current modes.
+   */
+  _MEMBER_GET(mode, mode, guint, guint)
+
+  /**
+   * Returns the current value for the given axis.
+   */
+  _MEMBER_GET(value, value, double, gdouble)
+};
+
+/** Generated during Gdk::InputSource::TABLET_PAD mode switches in a group.
+ *
+ * get_event_type() will return Gdk::Event::Type::PAD_GROUP_MODE.
+ *
+ * @newin{3,90}
+ */
+class EventPadGroupMode : public Event
+{
+  _CLASS_GDKEVENT(EventPadGroupMode, GdkEventPadGroupMode, Event, GdkEvent)
+
+public:
+
+  /**
+   * Returns the timestamp of the event in milliseconds
+   */
+  _MEMBER_GET(time, time, guint32, guint32)
+
+  /**
+   * Returns the pad group that is switching mode.
+   * A Gdk::InputSource::TABLET_PAD device may have one or more groups
+   * containing a set of buttons/rings/strips each.
+   */
+  _MEMBER_GET(group, group, guint, guint)
+
+  /**
+   * Returns the new mode of @a group.
+   * Different groups in a Gdk::InputSource::TABLET_PAD device may have
+   * different current modes.
+   */
+  _MEMBER_GET(mode, mode, guint, guint)
+};
+
+} // namespace Gdk
diff --git a/gdk/src/filelist.am b/gdk/src/filelist.am
index 297c292..13777aa 100644
--- a/gdk/src/filelist.am
+++ b/gdk/src/filelist.am
@@ -24,6 +24,7 @@ gdkmm_files_any_hg =          \
        drawingcontext.hg               \
        enums.hg                \
        event.hg                \
+       events.hg               \
        glcontext.hg            \
        monitor.hg \
        pixbuf.hg               \


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]