[gtkmm] Gtk: Use Gdk::Event instead of GdkEvent



commit 2de3922538ceb651f3526a9b815801145b72f5e6
Author: Kjell Ahlstedt <kjellahlstedt gmail com>
Date:   Wed May 31 16:34:56 2017 +0200

    Gtk: Use Gdk::Event instead of GdkEvent
    
    Use Gdk::Event and its subclasses. Bug 135978

 demos/gtk-demo/example_change_display.cc |    4 +-
 demos/gtk-demo/example_drawingarea.cc    |   26 ++++-----
 demos/gtk-demo/example_gestures.cc       |    4 +-
 demos/gtk-demo/example_iconbrowser.cc    |    4 +-
 gdk/src/events.hg                        |    2 +
 gtk/src/cellarea.hg                      |    4 +-
 gtk/src/celleditable.hg                  |    8 ++-
 gtk/src/cellrenderer.hg                  |    9 ++-
 gtk/src/clipboard.hg                     |    6 +-
 gtk/src/entry.hg                         |    8 ++-
 gtk/src/eventcontroller.hg               |    6 +-
 gtk/src/gesture.ccg                      |    6 +-
 gtk/src/gesture.hg                       |   39 +++++++------
 gtk/src/gesturesingle.hg                 |    4 +-
 gtk/src/menu.hg                          |    9 ++-
 gtk/src/searchbar.hg                     |    7 +-
 gtk/src/searchentry.hg                   |    7 +-
 gtk/src/texttag.hg                       |    6 +-
 gtk/src/textview.hg                      |    3 +-
 gtk/src/widget.ccg                       |    6 ++
 gtk/src/widget.hg                        |   90 +++++++++++++++++++----------
 tools/m4/class_gdkevent.m4               |    2 +
 tools/m4/convert_gdk.m4                  |   13 +++-
 23 files changed, 163 insertions(+), 110 deletions(-)
---
diff --git a/demos/gtk-demo/example_change_display.cc b/demos/gtk-demo/example_change_display.cc
index 71f3758..18edcc4 100644
--- a/demos/gtk-demo/example_change_display.cc
+++ b/demos/gtk-demo/example_change_display.cc
@@ -62,7 +62,7 @@ protected:
 
   virtual void on_display_closed(bool is_error, Glib::RefPtr<Gdk::Display> display);
 
-  virtual bool on_popup_button_release_event(GdkEventButton* event);
+  virtual bool on_popup_button_release_event(Gdk::EventButton& event);
 
   void on_response(int response_id) override;
 
@@ -360,7 +360,7 @@ Gtk::Widget* Example_ChangeDisplay::find_toplevel_at_pointer(const Glib::RefPtr<
 }
 
 
-bool Example_ChangeDisplay::on_popup_button_release_event(GdkEventButton* /* event */)
+bool Example_ChangeDisplay::on_popup_button_release_event(Gdk::EventButton& /* event */)
 {
   m_popup_clicked = true;
   return true;
diff --git a/demos/gtk-demo/example_drawingarea.cc b/demos/gtk-demo/example_drawingarea.cc
index 0b0e386..81cff7e 100644
--- a/demos/gtk-demo/example_drawingarea.cc
+++ b/demos/gtk-demo/example_drawingarea.cc
@@ -27,9 +27,9 @@ protected:
   void on_drawingarea_scribble_draw(const Cairo::RefPtr<Cairo::Context>& cr, int width, int height);
 
   //signal handlers:
-  bool on_drawingarea_scribble_configure_event(GdkEventConfigure* event);
-  bool on_drawingarea_scribble_motion_notify_event(GdkEventMotion* event);
-  bool on_drawingarea_scribble_button_press_event(GdkEventButton* event);
+  bool on_drawingarea_scribble_configure_event(Gdk::EventConfigure& event);
+  bool on_drawingarea_scribble_motion_notify_event(Gdk::EventMotion& event);
+  bool on_drawingarea_scribble_button_press_event(Gdk::EventButton& event);
 
   void scribble_draw_brush(int x, int y);
 
@@ -158,7 +158,7 @@ void Example_DrawingArea::on_drawingarea_scribble_draw(const Cairo::RefPtr<Cairo
   cr->paint();
 }
 
-bool Example_DrawingArea::on_drawingarea_scribble_configure_event(GdkEventConfigure*)
+bool Example_DrawingArea::on_drawingarea_scribble_configure_event(Gdk::EventConfigure&)
 {
   const auto allocation = m_DrawingArea_Scribble.get_allocation();
   m_surface =
@@ -172,7 +172,7 @@ bool Example_DrawingArea::on_drawingarea_scribble_configure_event(GdkEventConfig
   return true;
 }
 
-bool Example_DrawingArea::on_drawingarea_scribble_motion_notify_event(GdkEventMotion* motion_event)
+bool Example_DrawingArea::on_drawingarea_scribble_motion_notify_event(Gdk::EventMotion& motion_event)
 {
   if(!m_surface)
     return false; // paranoia check, in case we haven't gotten a configure event
@@ -181,21 +181,19 @@ bool Example_DrawingArea::on_drawingarea_scribble_motion_notify_event(GdkEventMo
    * don't call Gdk::Window::get_device_position() you'll only get a single motion
    * event.  The reason is that we specified Gdk::POINTER_MOTION_HINT_MASK to
    * Gtk::Widget::add_events().  If we hadn't specified that, we could just use
-   * motion_event->x, motion_event->y as the pointer location. But we'd also get deluged in
+   * motion_event.get_x(), motion_event.get_y() as the pointer location. But we'd also get deluged in
    * events.  By requesting the next event as we handle the current one, we
    * avoid getting a huge number of events faster than we can cope.
    */
-  if(motion_event && motion_event->window)
+  if(motion_event && motion_event.get_window())
   {
-    const auto refWindow =
-        Glib::wrap(motion_event->window, true); // true == take_copy
+    const auto refWindow = motion_event.get_window();
 
     if(refWindow)
     {
       int x = 0, y = 0;
       auto state = Gdk::ModifierType(0);
-      const auto device =
-        Glib::wrap(motion_event->device, true); // true == take_copy
+      const auto device = motion_event.get_device();
       refWindow->get_device_position(device, x, y, state);
 
       if((state & Gdk::ModifierType::BUTTON1_MASK) != Gdk::ModifierType::BUTTON1_MASK)
@@ -207,13 +205,13 @@ bool Example_DrawingArea::on_drawingarea_scribble_motion_notify_event(GdkEventMo
   return true;
 }
 
-bool Example_DrawingArea::on_drawingarea_scribble_button_press_event(GdkEventButton* button_event)
+bool Example_DrawingArea::on_drawingarea_scribble_button_press_event(Gdk::EventButton& button_event)
 {
   if(!m_surface)
     return false; // paranoia check, in case we haven't gotten a configure event
 
-  if(button_event->button == 1)
-    scribble_draw_brush(int(button_event->x), int(button_event->y));
+  if(button_event.get_button() == 1)
+    scribble_draw_brush(int(button_event.get_x()), int(button_event.get_y()));
 
   // We've handled the event, stop processing.
   return true;
diff --git a/demos/gtk-demo/example_gestures.cc b/demos/gtk-demo/example_gestures.cc
index 88c5465..4eb78f9 100644
--- a/demos/gtk-demo/example_gestures.cc
+++ b/demos/gtk-demo/example_gestures.cc
@@ -19,7 +19,7 @@ protected:
   // Signal handlers:
   void on_gesture_swipe_swipe(double velocity_x, double velocity_y);
   void on_gesture_long_press_pressed(double x, double y);
-  void on_gesture_long_press_end(GdkEventSequence* sequence);
+  void on_gesture_long_press_end(Gdk::EventSequence* sequence);
   void on_gesture_rotate_angle_changed(double angle, double angle_delta);
   void on_gesture_zoom_scale_changed(double scale);
 
@@ -142,7 +142,7 @@ void Example_Gestures::on_gesture_long_press_pressed(double /* x */, double /* y
   m_DrawingArea.queue_draw();
 }
 
-void Example_Gestures::on_gesture_long_press_end(GdkEventSequence* /* sequence */)
+void Example_Gestures::on_gesture_long_press_end(Gdk::EventSequence* /* sequence */)
 {
   m_long_pressed = false;
   m_DrawingArea.queue_draw();
diff --git a/demos/gtk-demo/example_iconbrowser.cc b/demos/gtk-demo/example_iconbrowser.cc
index 94c60b4..d65a816 100644
--- a/demos/gtk-demo/example_iconbrowser.cc
+++ b/demos/gtk-demo/example_iconbrowser.cc
@@ -120,7 +120,7 @@ public:
 
 protected:
   // Signal handlers:
-  bool on_window_key_press_event(GdkEventKey* event);
+  bool on_window_key_press_event(Gdk::EventKey& event);
   void on_symbolic_radio_toggled();
   void on_context_list_selected_rows_changed();
   void on_icon_view_item_activated(const Gtk::TreeModel::Path& path);
@@ -268,7 +268,7 @@ Example_IconBrowser::~Example_IconBrowser()
 {
 }
 
-bool Example_IconBrowser::on_window_key_press_event(GdkEventKey* key_press_event)
+bool Example_IconBrowser::on_window_key_press_event(Gdk::EventKey& key_press_event)
 {
   return m_search_bar.handle_event(key_press_event);
 }
diff --git a/gdk/src/events.hg b/gdk/src/events.hg
index 475afb9..7a9461f 100644
--- a/gdk/src/events.hg
+++ b/gdk/src/events.hg
@@ -36,6 +36,8 @@ class Device;
 
 /** Representing an event sequence.
  * Used to differentiate between multiple touches on multitouch touchscreens.
+ * It's a hidden struct. You can test %EventSequence pointers for equality,
+ * but you can't do much more with them.
  */
 struct EventSequence;
 
diff --git a/gtk/src/cellarea.hg b/gtk/src/cellarea.hg
index 98fb16b..8ff3c23 100644
--- a/gtk/src/cellarea.hg
+++ b/gtk/src/cellarea.hg
@@ -157,7 +157,7 @@ public:
   void foreach(const Glib::RefPtr<CellAreaContext>& context, Widget* widget, const Gdk::Rectangle& 
cell_area, const Gdk::Rectangle& background_area, const SlotForeachAlloc& slot);
   _IGNORE(gtk_cell_area_foreach_alloc)
 
-  _WRAP_METHOD(int event(const Glib::RefPtr<CellAreaContext>& context, Widget& widget, GdkEvent* gdk_event, 
const Gdk::Rectangle& cell_area,  GtkCellRendererState  flags), gtk_cell_area_event)
+  _WRAP_METHOD(int event(const Glib::RefPtr<CellAreaContext>& context, Widget& widget, Gdk::Event& 
gdk_event, const Gdk::Rectangle& cell_area,  GtkCellRendererState  flags), gtk_cell_area_event)
 
   _WRAP_METHOD(void snapshot(const Glib::RefPtr<CellAreaContext>& context, Widget& widget,
      Snapshot& snapshot, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area,
@@ -220,7 +220,7 @@ public:
   _WRAP_METHOD(CellEditable* get_edit_widget(), gtk_cell_area_get_edit_widget)
   _WRAP_METHOD(const CellEditable* get_edit_widget() const, gtk_cell_area_get_edit_widget, constversion)
 
-  _WRAP_METHOD(bool activate_cell(Widget& widget, CellRenderer& renderer, GdkEvent* gdk_event, const 
Gdk::Rectangle& cell_area, CellRendererState flags), gtk_cell_area_activate_cell)
+  _WRAP_METHOD(bool activate_cell(Widget& widget, CellRenderer& renderer, Gdk::Event& gdk_event, const 
Gdk::Rectangle& cell_area, CellRendererState flags), gtk_cell_area_activate_cell)
   _WRAP_METHOD(void stop_editing(bool canceled), gtk_cell_area_stop_editing)
 
   _WRAP_METHOD(void inner_cell_area(Widget& widget, const Gdk::Rectangle& cell_area, Gdk::Rectangle& 
inner_area), gtk_cell_area_inner_cell_area)
diff --git a/gtk/src/celleditable.hg b/gtk/src/celleditable.hg
index 4fdedca..211b708 100644
--- a/gtk/src/celleditable.hg
+++ b/gtk/src/celleditable.hg
@@ -16,6 +16,8 @@
  */
 
 #include <glibmm/interface.h>
+#include <gdkmm/event.h>
+
 _DEFS(gtkmm,gtk)
 _PINCLUDE(glibmm/private/interface_p.h)
 
@@ -23,7 +25,6 @@ _PINCLUDE(glibmm/private/interface_p.h)
 extern "C"
 {
 typedef struct _GtkCellEditableIface GtkCellEditableIface;
-typedef union _GdkEvent GdkEvent;
 }
 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
 
@@ -39,7 +40,7 @@ class CellEditable : public Glib::Interface
   _CLASS_INTERFACE(CellEditable,GtkCellEditable,GTK_CELL_EDITABLE,GtkCellEditableIface)
 
 public:
-  _WRAP_METHOD(void start_editing(GdkEvent* event), gtk_cell_editable_start_editing)
+  _WRAP_METHOD(void start_editing(Gdk::Event& event), gtk_cell_editable_start_editing)
   _WRAP_METHOD(void editing_done(), gtk_cell_editable_editing_done)
   _WRAP_METHOD(void remove_widget(), gtk_cell_editable_remove_widget)
 
@@ -49,7 +50,8 @@ public:
   _WRAP_PROPERTY("editing-canceled", bool)
 
 protected:
-  _WRAP_VFUNC(void start_editing(GdkEvent* event), start_editing)
+#m4 _CONVERSION(`GdkEvent*',`Gdk::Event&',`Gdk::wrap_event($3)')
+  _WRAP_VFUNC(void start_editing(Gdk::Event& event), start_editing)
 };
 
 } // namespace Gtk
diff --git a/gtk/src/cellrenderer.hg b/gtk/src/cellrenderer.hg
index f7b1944..745f9b3 100644
--- a/gtk/src/cellrenderer.hg
+++ b/gtk/src/cellrenderer.hg
@@ -64,7 +64,7 @@ public:
                   CellRendererState flags), gtk_cell_renderer_snapshot)
 
   _WRAP_METHOD(bool activate(
-                  GdkEvent* event,
+                  Gdk::Event& event,
                   Widget& widget,
                   const Glib::ustring& path,
                   const Gdk::Rectangle& background_area,
@@ -72,7 +72,7 @@ public:
                   CellRendererState flags), gtk_cell_renderer_activate)
 
   _WRAP_METHOD(CellEditable* start_editing(
-                  GdkEvent* event, Widget& widget,
+                  Gdk::Event& event, Widget& widget,
                   const Glib::ustring& path,
                   const Gdk::Rectangle& background_area,
                   const Gdk::Rectangle& cell_area,
@@ -156,8 +156,9 @@ protected:
                   const Gdk::Rectangle& cell_area,
                   CellRendererState flags), snapshot)
 
+#m4 _CONVERSION(`GdkEvent*',`Gdk::Event&',`Gdk::wrap_event($3)')
   _WRAP_VFUNC(bool activate(
-                  GdkEvent* event,
+                  Gdk::Event& event,
                   Widget& widget,
                   const Glib::ustring& path,
                   const Gdk::Rectangle& background_area,
@@ -165,7 +166,7 @@ protected:
                   CellRendererState flags), activate)
 
   _WRAP_VFUNC(CellEditable* start_editing(
-                  GdkEvent* event,
+                  Gdk::Event& event,
                   Widget& widget,
                   const Glib::ustring& path,
                   const Gdk::Rectangle& background_area,
diff --git a/gtk/src/clipboard.hg b/gtk/src/clipboard.hg
index ce6d713..b0af1b4 100644
--- a/gtk/src/clipboard.hg
+++ b/gtk/src/clipboard.hg
@@ -19,6 +19,7 @@
 #include <vector>
 
 #include <gdkmm/display.h>
+#include <gdkmm/events.h>
 #include <gdkmm/pixbuf.h>
 #include <gtkmm/targetentry.h>
 #include <gtkmm/selectiondata.h>
@@ -27,7 +28,6 @@
 _DEFS(gtkmm,gtk)
 _PINCLUDE(glibmm/private/object_p.h)
 
-
 namespace Gtk
 {
 
@@ -310,7 +310,9 @@ public:
   _WRAP_METHOD(void store(), gtk_clipboard_store)
   _WRAP_METHOD(GdkAtom get_selection() const, gtk_clipboard_get_selection)
 
-  _WRAP_SIGNAL(void owner_change(GdkEventOwnerChange* event), "owner_change", no_default_handler)
+#m4 _CONVERSION(`GdkEventOwnerChange*',`Gdk::EventOwnerChange&',`Gdk::wrap_event($3)')
+  // no_default_handler because GtkClipboardClass is private.
+  _WRAP_SIGNAL(void owner_change(Gdk::EventOwnerChange& event), "owner_change", no_default_handler)
 
 };
 
diff --git a/gtk/src/entry.hg b/gtk/src/entry.hg
index a10d0a1..f63f3e4 100644
--- a/gtk/src/entry.hg
+++ b/gtk/src/entry.hg
@@ -180,7 +180,7 @@ public:
   _IGNORE(gtk_entry_get_icon_area)
 
   _WRAP_METHOD(int get_current_icon_drag_source(), gtk_entry_get_current_icon_drag_source)
-  _WRAP_METHOD(bool im_context_filter_keypress(GdkEventKey* gdk_event), gtk_entry_im_context_filter_keypress)
+  _WRAP_METHOD(bool im_context_filter_keypress(Gdk::EventKey& gdk_event), 
gtk_entry_im_context_filter_keypress)
   _WRAP_METHOD(void reset_im_context(), gtk_entry_reset_im_context)
 
   _WRAP_METHOD(void set_input_purpose(InputPurpose purpose), gtk_entry_set_input_purpose)
@@ -207,8 +207,10 @@ public:
   //Note that the GTK+ C documentation for the activate signal says (as of 2012-06) that it should be used 
by applications even though it is a keybinding signal.
   _WRAP_SIGNAL(void activate(), "activate")
 
-  _WRAP_SIGNAL(void icon_release(IconPosition icon_position, const GdkEventButton* event), "icon-release", 
no_default_handler)
-  _WRAP_SIGNAL(void icon_press(IconPosition icon_position, const GdkEventButton* event), "icon-press", 
no_default_handler)
+#m4 _CONVERSION(`const GdkEventButton*',`const Gdk::EventButton&',`Gdk::wrap_event($3)')
+  // no_default_handler because the wrapped C signals have no default handlers.
+  _WRAP_SIGNAL(void icon_release(IconPosition icon_position, const Gdk::EventButton& event), "icon-release", 
no_default_handler)
+  _WRAP_SIGNAL(void icon_press(IconPosition icon_position, const Gdk::EventButton& event), "icon-press", 
no_default_handler)
 
   _IGNORE_SIGNAL("move_cursor")
   _IGNORE_SIGNAL("delete_from_cursor")
diff --git a/gtk/src/eventcontroller.hg b/gtk/src/eventcontroller.hg
index 16ce60e..1d5673e 100644
--- a/gtk/src/eventcontroller.hg
+++ b/gtk/src/eventcontroller.hg
@@ -27,7 +27,7 @@ namespace Gtk
  * These classes handle input events.
  *
  * Event controllers are standalone objects that can perform specific actions
- * upon received GdkEvent%s. These are tied to a Widget, and can be told of
+ * upon received Gdk::Event%s. These are tied to a Widget, and can be told of
  * the event propagation phase at which they will manage the events.
  *
  * Gestures are a set of specific controllers that are prepared to handle pointer
@@ -47,7 +47,7 @@ _WRAP_ENUM(PropagationPhase, GtkPropagationPhase)
 /** Self-contained handler of series of events.
  *
  * This is an abstract base class, low-level implementation for event
- * controllers. Those react to a series of GdkEvent%s, and possibly trigger
+ * controllers. Those react to a series of Gdk::Event%s, and possibly trigger
  * actions as a consequence of those.
  *
  * @newin{3,14}
@@ -69,7 +69,7 @@ public:
 
   _WRAP_METHOD(Widget* get_widget(), gtk_event_controller_get_widget)
   _WRAP_METHOD(const Widget* get_widget() const, gtk_event_controller_get_widget, constversion)
-  _WRAP_METHOD(bool handle_event(const GdkEvent* event), gtk_event_controller_handle_event)
+  _WRAP_METHOD(bool handle_event(const Gdk::Event& event), gtk_event_controller_handle_event)
   _WRAP_METHOD(void reset(), gtk_event_controller_reset)
   _WRAP_METHOD(PropagationPhase get_propagation_phase() const, gtk_event_controller_get_propagation_phase)
   _WRAP_METHOD(void set_propagation_phase(PropagationPhase phase), 
gtk_event_controller_set_propagation_phase)
diff --git a/gtk/src/gesture.ccg b/gtk/src/gesture.ccg
index 14dc3e2..6283a6c 100644
--- a/gtk/src/gesture.ccg
+++ b/gtk/src/gesture.ccg
@@ -20,13 +20,13 @@ namespace Gtk
 {
 // Glib::ListHandler is not well suited for this case, where the contents
 // of the GList shall not be converted to a C++ type.
-std::vector<const GdkEventSequence*> Gesture::get_sequences() const
+std::vector<const Gdk::EventSequence*> Gesture::get_sequences() const
 {
-  std::vector<const GdkEventSequence*> sequences;
+  std::vector<const Gdk::EventSequence*> sequences;
   auto list = g_list_first(gtk_gesture_get_sequences(const_cast<GtkGesture*>(gobj())));
 
   for (GList* node = list; node; node = g_list_next(node))
-    sequences.emplace_back(static_cast<GdkEventSequence*>(node->data));
+    sequences.emplace_back(static_cast<Gdk::EventSequence*>(node->data));
 
   g_list_free(list);
 
diff --git a/gtk/src/gesture.hg b/gtk/src/gesture.hg
index 7e52dc4..3562000 100644
--- a/gtk/src/gesture.hg
+++ b/gtk/src/gesture.hg
@@ -16,6 +16,7 @@
 
 #include <vector>
 #include <gtkmm/eventcontroller.h>
+#include <gdkmm/events.h>
 
 _DEFS(gtkmm,gtk)
 _PINCLUDE(gtkmm/private/eventcontroller_p.h)
@@ -29,7 +30,7 @@ _WRAP_ENUM(EventSequenceState, GtkEventSequenceState)
  * This is the base object for gesture recognition. Although this
  * object is quite generalized to serve as a base for multi-touch gestures,
  * it is suitable to implement single-touch and pointer-based gestures (using
- * the special GdkEventSequence value for these).
+ * the special Gdk::EventSequence value for these).
  *
  * The number of touches that a Gesture need to be recognized is controlled
  * by the n-points property. If a gesture is keeping track of less
@@ -71,7 +72,7 @@ _WRAP_ENUM(EventSequenceState, GtkEventSequenceState)
  * Gesture%s, both across the parents of the widget receiving the
  * event and parallelly within an individual widget. It is a responsibility of the
  * widgets using those gestures to set the state of touch sequences accordingly
- * in order to enable cooperation of gestures around the GdkEventSequence%s
+ * in order to enable cooperation of gestures around the Gdk::EventSequence%s
  * triggering those.
  *
  * Within a widget, gestures can be grouped through group().
@@ -105,7 +106,7 @@ _WRAP_ENUM(EventSequenceState, GtkEventSequenceState)
  * again.
  *
  * Sequence states can't be changed freely, see set_sequence_state()
- * to know about the possible lifetimes of a GdkEventSequence.
+ * to know about the possible lifetimes of a Gdk::EventSequence.
  *
  * @newin{3,14}
  *
@@ -127,24 +128,24 @@ public:
   _WRAP_METHOD(Glib::RefPtr<Gdk::Device> get_device(), gtk_gesture_get_device, refreturn)
   _WRAP_METHOD(Glib::RefPtr<const Gdk::Device> get_device() const, gtk_gesture_get_device, refreturn, 
constversion)
   _WRAP_METHOD(bool set_state(EventSequenceState state), gtk_gesture_set_state)
-  _WRAP_METHOD(EventSequenceState get_sequence_state(GdkEventSequence* sequence) const, 
gtk_gesture_get_sequence_state)
-  _WRAP_METHOD(bool set_sequence_state(GdkEventSequence* sequence, EventSequenceState state), 
gtk_gesture_set_sequence_state)
+  _WRAP_METHOD(EventSequenceState get_sequence_state(Gdk::EventSequence* sequence) const, 
gtk_gesture_get_sequence_state)
+  _WRAP_METHOD(bool set_sequence_state(Gdk::EventSequence* sequence, EventSequenceState state), 
gtk_gesture_set_sequence_state)
 
-  /** Returns the list of GdkEventSequence%s currently being interpreted.
+  /** Returns the list of Gdk::EventSequence%s currently being interpreted.
    *
    * @newin{3,14}
    *
-   * @return A std::vector of GdkEventSequence pointers.
-   *         The GdkEventSequence%s are owned by GTK+ and must not be freed or modified.
+   * @return A std::vector of Gdk::EventSequence pointers.
+   *         The Gdk::EventSequence%s are owned by GTK+ and must not be freed or modified.
    */
-  std::vector<const GdkEventSequence*> get_sequences() const;
+  std::vector<const Gdk::EventSequence*> get_sequences() const;
   _IGNORE(gtk_gesture_get_sequences)
 
-  _WRAP_METHOD(GdkEventSequence* get_last_updated_sequence(), gtk_gesture_get_last_updated_sequence)
-  _WRAP_METHOD(const GdkEventSequence* get_last_updated_sequence() const, 
gtk_gesture_get_last_updated_sequence, constversion)
-  _WRAP_METHOD(bool handles_sequence(GdkEventSequence* sequence) const, gtk_gesture_handles_sequence)
-  _WRAP_METHOD(const GdkEvent* get_last_event(GdkEventSequence* sequence) const, gtk_gesture_get_last_event)
-  _WRAP_METHOD(bool get_point(GdkEventSequence* sequence, double& x, double& y) const, gtk_gesture_get_point)
+  _WRAP_METHOD(Gdk::EventSequence* get_last_updated_sequence(), gtk_gesture_get_last_updated_sequence)
+  _WRAP_METHOD(const Gdk::EventSequence* get_last_updated_sequence() const, 
gtk_gesture_get_last_updated_sequence, constversion)
+  _WRAP_METHOD(bool handles_sequence(Gdk::EventSequence* sequence) const, gtk_gesture_handles_sequence)
+  _WRAP_METHOD(Gdk::Event get_last_event(Gdk::EventSequence* sequence) const, gtk_gesture_get_last_event)
+  _WRAP_METHOD(bool get_point(Gdk::EventSequence* sequence, double& x, double& y) const, 
gtk_gesture_get_point)
   _WRAP_METHOD(bool get_bounding_box(Gdk::Rectangle& rect) const, gtk_gesture_get_bounding_box)
   _WRAP_METHOD(bool get_bounding_box_center(double& x, double& y) const, gtk_gesture_get_bounding_box_center)
   _WRAP_METHOD(bool is_active() const, gtk_gesture_is_active)
@@ -162,11 +163,11 @@ public:
   _WRAP_METHOD(bool is_grouped_with(const Glib::RefPtr<Gesture>& other) const, gtk_gesture_is_grouped_with)
 
   // no_default_handler because GtkGestureClass is private.
-  _WRAP_SIGNAL(void begin(GdkEventSequence* sequence), "begin", no_default_handler)
-  _WRAP_SIGNAL(void end(GdkEventSequence* sequence), "end", no_default_handler)
-  _WRAP_SIGNAL(void update(GdkEventSequence* sequence), "update", no_default_handler)
-  _WRAP_SIGNAL(void cancel(GdkEventSequence* sequence), "cancel", no_default_handler)
-  _WRAP_SIGNAL(void sequence_state_changed(GdkEventSequence* sequence, EventSequenceState state), 
"sequence_state_changed", no_default_handler)
+  _WRAP_SIGNAL(void begin(Gdk::EventSequence* sequence), "begin", no_default_handler)
+  _WRAP_SIGNAL(void end(Gdk::EventSequence* sequence), "end", no_default_handler)
+  _WRAP_SIGNAL(void update(Gdk::EventSequence* sequence), "update", no_default_handler)
+  _WRAP_SIGNAL(void cancel(Gdk::EventSequence* sequence), "cancel", no_default_handler)
+  _WRAP_SIGNAL(void sequence_state_changed(Gdk::EventSequence* sequence, EventSequenceState state), 
"sequence_state_changed", no_default_handler)
 
   _WRAP_PROPERTY("n-points", unsigned int)
 };
diff --git a/gtk/src/gesturesingle.hg b/gtk/src/gesturesingle.hg
index 777cb90..fde0bdd 100644
--- a/gtk/src/gesturesingle.hg
+++ b/gtk/src/gesturesingle.hg
@@ -57,8 +57,8 @@ public:
   _WRAP_METHOD(unsigned int get_button() const, gtk_gesture_single_get_button)
   _WRAP_METHOD(void set_button(unsigned int button = 0), gtk_gesture_single_set_button)
   _WRAP_METHOD(unsigned int get_current_button() const, gtk_gesture_single_get_current_button)
-  _WRAP_METHOD(GdkEventSequence* get_current_sequence(), gtk_gesture_single_get_current_sequence)
-  _WRAP_METHOD(const GdkEventSequence* get_current_sequence() const, 
gtk_gesture_single_get_current_sequence, constversion)
+  _WRAP_METHOD(Gdk::EventSequence* get_current_sequence(), gtk_gesture_single_get_current_sequence)
+  _WRAP_METHOD(const Gdk::EventSequence* get_current_sequence() const, 
gtk_gesture_single_get_current_sequence, constversion)
 
   _WRAP_PROPERTY("touch-only", bool)
   _WRAP_PROPERTY("exclusive", bool)
diff --git a/gtk/src/menu.hg b/gtk/src/menu.hg
index 2574545..12885a5 100644
--- a/gtk/src/menu.hg
+++ b/gtk/src/menu.hg
@@ -97,9 +97,12 @@ public:
    */
   void popup(guint button, guint32 activate_time, const Glib::RefPtr<Gdk::Device>& device = 
Glib::RefPtr<Gdk::Device>());
 
-  _WRAP_METHOD(void popup_at_rect(const Glib::RefPtr<Gdk::Window>& rect_window, const Gdk::Rectangle& rect, 
Gdk::Gravity rect_anchor, Gdk::Gravity menu_anchor, const GdkEvent* trigger_event), gtk_menu_popup_at_rect)
-  _WRAP_METHOD(void popup_at_widget(Widget* widget, Gdk::Gravity widget_anchor, Gdk::Gravity menu_anchor, 
const GdkEvent* trigger_event), gtk_menu_popup_at_widget)
-  _WRAP_METHOD(void popup_at_pointer(const GdkEvent* trigger_event), gtk_menu_popup_at_pointer)
+  _WRAP_METHOD(void popup_at_rect(const Glib::RefPtr<Gdk::Window>& rect_window,
+    const Gdk::Rectangle& rect, Gdk::Gravity rect_anchor, Gdk::Gravity menu_anchor,
+    const Gdk::Event& trigger_event = Gdk::Event()), gtk_menu_popup_at_rect)
+  _WRAP_METHOD(void popup_at_widget(Widget* widget, Gdk::Gravity widget_anchor,
+   Gdk::Gravity menu_anchor, const Gdk::Event& trigger_event = Gdk::Event()), gtk_menu_popup_at_widget)
+  _WRAP_METHOD(void popup_at_pointer(const Gdk::Event& trigger_event = Gdk::Event()), 
gtk_menu_popup_at_pointer)
 
   _WRAP_METHOD(void reposition(), gtk_menu_reposition)
 
diff --git a/gtk/src/searchbar.hg b/gtk/src/searchbar.hg
index 1e611b9..d7844d4 100644
--- a/gtk/src/searchbar.hg
+++ b/gtk/src/searchbar.hg
@@ -65,10 +65,9 @@ public:
   _WRAP_METHOD(bool get_show_close_button() const, gtk_search_bar_get_show_close_button)
   _WRAP_METHOD(void set_show_close_button(bool visible=true), gtk_search_bar_set_show_close_button)
 
-  //TODO: Use Gdk::EventKey, if we ever use Gdk::Event elsewhere in the API:
-//We use GdkEventKey* rather than GdkEvent*. See GTK+ bug https://bugzilla.gnome.org/show_bug.cgi?id=709544
-#m4 _CONVERSION(`GdkEventKey*',`GdkEvent*',`(($2)($3))')
-  _WRAP_METHOD(bool handle_event(GdkEventKey* gdk_event), gtk_search_bar_handle_event)
+  // We use Gdk::EventKey& rather than Gdk::Event&. See GTK+ bug 
https://bugzilla.gnome.org/show_bug.cgi?id=709544
+#m4 _CONVERSION(`Gdk::EventKey&',`GdkEvent*',`($3).Event::gobj()')
+  _WRAP_METHOD(bool handle_event(Gdk::EventKey& gdk_event), gtk_search_bar_handle_event)
 
 
   _WRAP_PROPERTY("search-mode-enabled", bool)
diff --git a/gtk/src/searchentry.hg b/gtk/src/searchentry.hg
index 3717977..6d36bc0 100644
--- a/gtk/src/searchentry.hg
+++ b/gtk/src/searchentry.hg
@@ -60,10 +60,9 @@ public:
 
   _CTOR_DEFAULT
 
-  //TODO: Use Gdk::EventKey, if we ever use Gdk::Event elsewhere in the API:
-//We use GdkEventKey* rather than GdkEvent*. See GTK+ bug https://bugzilla.gnome.org/show_bug.cgi?id=709544
-#m4 _CONVERSION(`GdkEventKey*',`GdkEvent*',`(($2)($3))')
-  _WRAP_METHOD(bool handle_event(GdkEventKey* gdk_event), gtk_search_entry_handle_event)
+  // We use Gdk::EventKey& rather than Gdk::Event&. See GTK+ bug 
https://bugzilla.gnome.org/show_bug.cgi?id=709544
+#m4 _CONVERSION(`Gdk::EventKey&',`GdkEvent*',`($3).Event::gobj()')
+  _WRAP_METHOD(bool handle_event(Gdk::EventKey& gdk_event), gtk_search_entry_handle_event)
 
   _WRAP_SIGNAL(void search_changed(), "search-changed")
   // Although next-match, previous-match and stop-search are keybinding signals,
diff --git a/gtk/src/texttag.hg b/gtk/src/texttag.hg
index 011ba1b..c71c431 100644
--- a/gtk/src/texttag.hg
+++ b/gtk/src/texttag.hg
@@ -20,6 +20,7 @@ _CONFIGINCLUDE(gtkmmconfig.h)
 
 #include <glibmm/object.h>
 #include <gtkmm/enums.h>
+#include <gdkmm/event.h>
 #include <gdkmm/rgba.h>
 #include <pangomm/fontdescription.h>
 #include <pangomm/tabarray.h>
@@ -66,12 +67,13 @@ public:
   _WRAP_METHOD(int get_priority() const, gtk_text_tag_get_priority)
   _WRAP_METHOD(void set_priority(int priority), gtk_text_tag_set_priority)
 #m4 _CONVERSION(`const TextIter&',`const GtkTextIter*',__FR2P)
-  _WRAP_METHOD(bool event(const Glib::RefPtr<Glib::Object>& event_object, GdkEvent* gdk_event, const 
TextIter& iter), gtk_text_tag_event)
+  _WRAP_METHOD(bool event(const Glib::RefPtr<Glib::Object>& event_object, Gdk::Event& gdk_event, const 
TextIter& iter), gtk_text_tag_event)
   _WRAP_METHOD(void tag_changed(bool size_changed), gtk_text_tag_changed)
 
 #m4 _CONVERSION(`GObject*',`const Glib::RefPtr<Glib::Object>&',`Glib::wrap($3, true)')
+#m4 _CONVERSION(`GdkEvent*',`Gdk::Event&',`Gdk::wrap_event($3)')
 #m4 _CONVERSION(`const GtkTextIter*',`const TextIter&',`Glib::wrap_iter($3)')
-  _WRAP_SIGNAL(bool event(const Glib::RefPtr<Glib::Object>& event_object, GdkEvent* gdk_event, const 
TextIter& iter), "event")
+  _WRAP_SIGNAL(bool event(const Glib::RefPtr<Glib::Object>& event_object, Gdk::Event& gdk_event, const 
TextIter& iter), "event")
 
   _WRAP_PROPERTY("name", Glib::ustring) //construct-only.
   _WRAP_PROPERTY("background", Glib::ustring)
diff --git a/gtk/src/textview.hg b/gtk/src/textview.hg
index d7e0e63..14b837c 100644
--- a/gtk/src/textview.hg
+++ b/gtk/src/textview.hg
@@ -27,7 +27,6 @@ _CONFIGINCLUDE(gtkmmconfig.h)
 _DEFS(gtkmm,gtk)
 _PINCLUDE(gtkmm/private/container_p.h)
 
-
 namespace Gtk
 {
 
@@ -156,7 +155,7 @@ public:
   _WRAP_METHOD(bool starts_display_line(const TextBuffer::iterator&  iter), 
gtk_text_view_starts_display_line)
   _WRAP_METHOD(bool move_visually(TextBuffer::iterator& iter, int count), gtk_text_view_move_visually)
 
-  _WRAP_METHOD(bool im_context_filter_keypress(GdkEventKey* gdk_event), 
gtk_text_view_im_context_filter_keypress)
+  _WRAP_METHOD(bool im_context_filter_keypress(Gdk::EventKey& gdk_event), 
gtk_text_view_im_context_filter_keypress)
   _WRAP_METHOD(void reset_im_context(), gtk_text_view_reset_im_context)
 
   _WRAP_METHOD(void add_child_at_anchor(Widget& child, const Glib::RefPtr<TextBuffer::ChildAnchor>& anchor), 
gtk_text_view_add_child_at_anchor)
diff --git a/gtk/src/widget.ccg b/gtk/src/widget.ccg
index a2dc89d..5a50358 100644
--- a/gtk/src/widget.ccg
+++ b/gtk/src/widget.ccg
@@ -104,6 +104,12 @@ static void Widget_signal_selection_get_callback(GtkWidget* self, GtkSelectionDa
   }
 }
 
+// The reinterpret_cast works because Event is a standard-layout class
+// whose only data member is a GdkEvent pointer.
+Gdk::Event& wrap_event_any(GdkEventAny*& event)
+{
+  return reinterpret_cast<Gdk::Event&>(event);
+}
 
 } //anonymous
 
diff --git a/gtk/src/widget.hg b/gtk/src/widget.hg
index 689a6c9..eb8ccaf 100644
--- a/gtk/src/widget.hg
+++ b/gtk/src/widget.hg
@@ -29,7 +29,7 @@ _CONFIGINCLUDE(gtkmmconfig.h)
 
 #include <gtkmm/object.h>
 #include <gtkmm/buildable.h>
-#include <gdkmm/event.h>
+#include <gdkmm/events.h>
 #include <gdkmm/types.h>
 #include <gdkmm/window.h>
 #include <gdkmm/dragcontext.h>
@@ -147,9 +147,10 @@ public:
   _IGNORE(gtk_widget_can_activate_accel)
   //Probably not useful. Too C-specific: _WRAP_METHOD(bool can_activate_accel(guint signal_id) const, 
gtk_widget_can_activate_accel)
 
-  //TODO: Use C++ type
-  _WRAP_METHOD(bool event(GdkEvent* gdk_event), gtk_widget_event)
-  _WRAP_METHOD(bool send_focus_change(GdkEvent* gdk_event), gtk_widget_send_focus_change)
+  _WRAP_METHOD(bool event(const Gdk::Event& gdk_event), gtk_widget_event)
+  // We use Gdk::EventFocus& rather than Gdk::Event&. See GTK+ bug 
https://bugzilla.gnome.org/show_bug.cgi?id=709544
+#m4 _CONVERSION(`Gdk::EventFocus&',`GdkEvent*',`($3).Event::gobj()')
+  _WRAP_METHOD(bool send_focus_change(Gdk::EventFocus& gdk_event), gtk_widget_send_focus_change)
   _WRAP_METHOD(bool activate(), gtk_widget_activate)
 
   // gtk_widget_reparent() has been removed, but we want to keep Gtk::Widget::reparent().
@@ -439,7 +440,8 @@ public:
   _WRAP_METHOD(void drag_source_add_uri_targets(), gtk_drag_source_add_uri_targets)
   _WRAP_METHOD(void drag_source_add_image_targets(), gtk_drag_source_add_image_targets)
 
-  _WRAP_METHOD(Glib::RefPtr<Gdk::DragContext> drag_begin(const Glib::RefPtr<TargetList>& targets, 
Gdk::DragAction actions, int button, GdkEvent* gdk_event, int x, int y), gtk_drag_begin_with_coordinates, 
refreturn)
+  _WRAP_METHOD(Glib::RefPtr<Gdk::DragContext> drag_begin(const Glib::RefPtr<TargetList>& targets,
+    Gdk::DragAction actions, int button, Gdk::Event& gdk_event, int x, int y), 
gtk_drag_begin_with_coordinates, refreturn)
   _WRAP_METHOD(bool drag_check_threshold(int start_x, int start_y, int current_x, int current_y), 
gtk_drag_check_threshold)
 
   //These should be a method of Gdk::DragContext, but gdkmm can't depend on gtkmm.
@@ -569,22 +571,30 @@ public:
   _WRAP_SIGNAL(bool mnemonic_activate(bool group_cycling), "mnemonic_activate")
   _WRAP_SIGNAL(void grab_focus(), "grab_focus")
   _WRAP_SIGNAL(bool focus(DirectionType direction), "focus")
-  _WRAP_SIGNAL(bool event(GdkEvent* gdk_event), "event")
+#m4 _CONVERSION(`GdkEvent*',`Gdk::Event&',`Gdk::wrap_event($3)')
+  _WRAP_SIGNAL(bool event(Gdk::Event& gdk_event), "event")
   // The event_after signal can't have a default handler because the wrapped C signal has no default handler.
-  _WRAP_SIGNAL(void event_after(GdkEvent* gdk_event), "event_after", no_default_handler)
+  _WRAP_SIGNAL(void event_after(Gdk::Event& gdk_event), "event_after", no_default_handler)
 
+#m4 _CONVERSION(`GdkEventButton*',`Gdk::EventButton&',`Gdk::wrap_event($3)')
   /// Event triggered by user pressing button.
-  _WRAP_SIGNAL(bool button_press_event(GdkEventButton* button_event),"button_press_event")
+  _WRAP_SIGNAL(bool button_press_event(Gdk::EventButton& button_event),"button_press_event")
 
   /// Event triggered by user releasing button.
-  _WRAP_SIGNAL(bool button_release_event(GdkEventButton* release_event), "button_release_event")
+  _WRAP_SIGNAL(bool button_release_event(Gdk::EventButton& release_event), "button_release_event")
 
-  _WRAP_SIGNAL(bool scroll_event(GdkEventScroll* scroll_event), "scroll_event")
+#m4 _CONVERSION(`GdkEventScroll*',`Gdk::EventScroll&',`Gdk::wrap_event($3)')
+#m4 _CONVERSION(`Gdk::EventScroll&',`GdkEventScroll*',`($3).gobj()')
+  _WRAP_SIGNAL(bool scroll_event(Gdk::EventScroll& scroll_event), "scroll_event")
 
+#m4 _CONVERSION(`GdkEventMotion*',`Gdk::EventMotion&',`Gdk::wrap_event($3)')
+#m4 _CONVERSION(`Gdk::EventMotion&',`GdkEventMotion*',`($3).gobj()')
   /// Event triggered by user moving pointer.
-  _WRAP_SIGNAL(bool motion_notify_event(GdkEventMotion* motion_event), "motion_notify_event")
+  _WRAP_SIGNAL(bool motion_notify_event(Gdk::EventMotion& motion_event), "motion_notify_event")
 
-  _WRAP_SIGNAL(bool delete_event(GdkEventAny* any_event), "delete_event")
+#m4 _CONVERSION(`GdkEventAny*',`Gdk::Event&',`wrap_event_any($3)')
+#m4 _CONVERSION(`Gdk::Event&',`GdkEventAny*',`reinterpret_cast<GdkEventAny*>(($3).gobj())')
+  _WRAP_SIGNAL(bool delete_event(Gdk::Event& any_event), "delete_event")
 
 #m4begin
 dnl// Hook in special code to catch explicit uses of gtk_object_destroy() by
@@ -607,31 +617,46 @@ dnl
   //_WRAP_SIGNAL(bool draw(const ::Cairo::RefPtr< ::Cairo::Context>& cr), "draw")
   _IGNORE_SIGNAL(draw)
 
+#m4 _CONVERSION(`GdkEventKey*',`Gdk::EventKey&',`Gdk::wrap_event($3)')
   /// Event triggered by a key press will widget has focus.
-  _WRAP_SIGNAL(bool key_press_event(GdkEventKey* key_event), "key_press_event")
+  _WRAP_SIGNAL(bool key_press_event(Gdk::EventKey& key_event), "key_press_event")
 
   /// Event triggered by a key release will widget has focus.
-  _WRAP_SIGNAL(bool key_release_event(GdkEventKey* key_event), "key_release_event")
+  _WRAP_SIGNAL(bool key_release_event(Gdk::EventKey& key_event), "key_release_event")
 
+#m4 _CONVERSION(`GdkEventCrossing*',`Gdk::EventCrossing&',`Gdk::wrap_event($3)')
+#m4 _CONVERSION(`Gdk::EventCrossing&',`GdkEventCrossing*',`($3).gobj()')
   /// Event triggered by pointer entering widget area.
-  _WRAP_SIGNAL(bool enter_notify_event(GdkEventCrossing* crossing_event), "enter_notify_event")
+  _WRAP_SIGNAL(bool enter_notify_event(Gdk::EventCrossing& crossing_event), "enter_notify_event")
 
   /// Event triggered by pointer leaving widget area.
-  _WRAP_SIGNAL(bool leave_notify_event(GdkEventCrossing* crossing_event), "leave_notify_event")
+  _WRAP_SIGNAL(bool leave_notify_event(Gdk::EventCrossing& crossing_event), "leave_notify_event")
 
+#m4 _CONVERSION(`GdkEventConfigure*',`Gdk::EventConfigure&',`Gdk::wrap_event($3)')
+#m4 _CONVERSION(`Gdk::EventConfigure&',`GdkEventConfigure*',`($3).gobj()')
   /// Event triggered by a window resizing.
-  _WRAP_SIGNAL(bool configure_event(GdkEventConfigure* configure_event), "configure_event")
-  _WRAP_SIGNAL(bool focus_in_event(GdkEventFocus* focus_event), "focus_in_event")
-  _WRAP_SIGNAL(bool focus_out_event(GdkEventFocus* gdk_event), "focus_out_event")
-  _WRAP_SIGNAL(bool map_event(GdkEventAny* any_event), "map_event")
-  _WRAP_SIGNAL(bool unmap_event(GdkEventAny* any_event), "unmap_event")
-  _WRAP_SIGNAL(bool property_notify_event(GdkEventProperty* property_event), "property_notify_event")
-  _WRAP_SIGNAL(bool selection_clear_event(GdkEventSelection* selection_event), "selection_clear_event")
-  _WRAP_SIGNAL(bool selection_request_event(GdkEventSelection* selection_event), "selection_request_event")
-  _WRAP_SIGNAL(bool selection_notify_event(GdkEventSelection* selection_event), "selection_notify_event")
-  _WRAP_SIGNAL(bool proximity_in_event(GdkEventProximity* proximity_event), "proximity_in_event")
-  _WRAP_SIGNAL(bool proximity_out_event(GdkEventProximity* proximity_event), "proximity_out_event")
-  _WRAP_SIGNAL(bool window_state_event(GdkEventWindowState* window_state_event), "window_state_event")
+  _WRAP_SIGNAL(bool configure_event(Gdk::EventConfigure& configure_event), "configure_event")
+#m4 _CONVERSION(`GdkEventFocus*',`Gdk::EventFocus&',`Gdk::wrap_event($3)')
+#m4 _CONVERSION(`Gdk::EventFocus&',`GdkEventFocus*',`($3).gobj()')
+  _WRAP_SIGNAL(bool focus_in_event(Gdk::EventFocus& focus_event), "focus_in_event")
+  _WRAP_SIGNAL(bool focus_out_event(Gdk::EventFocus& gdk_event), "focus_out_event")
+  _WRAP_SIGNAL(bool map_event(Gdk::Event& any_event), "map_event")
+  _WRAP_SIGNAL(bool unmap_event(Gdk::Event& any_event), "unmap_event")
+#m4 _CONVERSION(`GdkEventProperty*',`Gdk::EventProperty&',`Gdk::wrap_event($3)')
+#m4 _CONVERSION(`Gdk::EventProperty&',`GdkEventProperty*',`($3).gobj()')
+  _WRAP_SIGNAL(bool property_notify_event(Gdk::EventProperty& property_event), "property_notify_event")
+#m4 _CONVERSION(`GdkEventSelection*',`Gdk::EventSelection&',`Gdk::wrap_event($3)')
+#m4 _CONVERSION(`Gdk::EventSelection&',`GdkEventSelection*',`($3).gobj()')
+  _WRAP_SIGNAL(bool selection_clear_event(Gdk::EventSelection& selection_event), "selection_clear_event")
+  _WRAP_SIGNAL(bool selection_request_event(Gdk::EventSelection& selection_event), "selection_request_event")
+  _WRAP_SIGNAL(bool selection_notify_event(Gdk::EventSelection& selection_event), "selection_notify_event")
+#m4 _CONVERSION(`GdkEventProximity*',`Gdk::EventProximity&',`Gdk::wrap_event($3)')
+#m4 _CONVERSION(`Gdk::EventProximity&',`GdkEventProximity*',`($3).gobj()')
+  _WRAP_SIGNAL(bool proximity_in_event(Gdk::EventProximity& proximity_event), "proximity_in_event")
+  _WRAP_SIGNAL(bool proximity_out_event(Gdk::EventProximity& proximity_event), "proximity_out_event")
+#m4 _CONVERSION(`GdkEventWindowState*',`Gdk::EventWindowState&',`Gdk::wrap_event($3)')
+#m4 _CONVERSION(`Gdk::EventWindowState&',`GdkEventWindowState*',`($3).gobj()')
+  _WRAP_SIGNAL(bool window_state_event(Gdk::EventWindowState& window_state_event), "window_state_event")
 
   //We use the optional custom_c_callback parameter with _WRAP_SIGNAL() for some of these,
   //so that we can write special code to wrap the non-const SelectionData& output parameters:
@@ -668,10 +693,13 @@ _CONVERSION(`GdkScreen*',`const Glib::RefPtr<Gdk::Screen>&',`Glib::wrap($3, true
 #m4 _CONVERSION(`GtkTooltip*',`const Glib::RefPtr<Tooltip>&',`Glib::wrap($3, true)')
   _WRAP_SIGNAL(bool query_tooltip(int x, int y, bool keyboard_tooltip, const Glib::RefPtr<Tooltip>& 
tooltip), "query_tooltip")
 
-  //(This was added to GTK+ 2.8 but forgotten by us until gtkmm 2.13/14):
-  _WRAP_SIGNAL(bool grab_broken_event(GdkEventGrabBroken* grab_broken_event), "grab_broken_event")
+#m4 _CONVERSION(`GdkEventGrabBroken*',`Gdk::EventGrabBroken&',`Gdk::wrap_event($3)')
+#m4 _CONVERSION(`Gdk::EventGrabBroken&',`GdkEventGrabBroken*',`($3).gobj()')
+  _WRAP_SIGNAL(bool grab_broken_event(Gdk::EventGrabBroken& grab_broken_event), "grab_broken_event")
 
-  _WRAP_SIGNAL(bool touch_event(GdkEventTouch* touch_event), "touch_event")
+#m4 _CONVERSION(`GdkEventTouch*',`Gdk::EventTouch&',`Gdk::wrap_event($3)')
+#m4 _CONVERSION(`Gdk::EventTouch&',`GdkEventTouch*',`($3).gobj()')
+  _WRAP_SIGNAL(bool touch_event(Gdk::EventTouch& touch_event), "touch_event")
 
   _WRAP_PROPERTY("name", Glib::ustring)
   _WRAP_PROPERTY("parent", Container*)
diff --git a/tools/m4/class_gdkevent.m4 b/tools/m4/class_gdkevent.m4
index 3bfc1c9..cb0027e 100644
--- a/tools/m4/class_gdkevent.m4
+++ b/tools/m4/class_gdkevent.m4
@@ -229,6 +229,8 @@ ifelse(__CPPPARENT__,,`dnl base class
 
   /** Creates an invalid event object.
    * Calling any member functions other than operator bool() is undefined behavior.
+   * An invalid event object can be used in a function call, if the underlying
+   * C function expects a NULL __CNAME__ pointer.
    */
   __CPPNAME__`'();
 
diff --git a/tools/m4/convert_gdk.m4 b/tools/m4/convert_gdk.m4
index 61bb9fe..13bce36 100644
--- a/tools/m4/convert_gdk.m4
+++ b/tools/m4/convert_gdk.m4
@@ -294,12 +294,19 @@ _CONVERSION(`GdkNativeWindow',`Gdk::NativeWindow',`static_cast<$2>($3)')
 _CONVERSION(`GdkNativeWindow',`NativeWindow',`static_cast<$2>($3)')
 _CONVERSION(`Gdk::NativeWindow',`GdkNativeWindow',`static_cast<$2>($3)')
 _CONVERSION(`NativeWindow',`GdkNativeWindow',`static_cast<$2>($3)')
-_CONVERSION(`GdkEvent*',`const GdkEvent*',`($3)')
 
-dnl GdkEvent
-_CONVERSION(`GdkEvent*',`Event',`Event($3)')
+dnl GdkEvent and GdkEventSequence
+_CONVERSION(`GdkEvent*',`Event',`Glib::wrap($3)')
+_CONVERSION(`GdkEvent*',`Gdk::Event',`Glib::wrap($3)')
+_CONVERSION(`const GdkEvent*',`Gdk::Event',`Glib::wrap(const_cast<GdkEvent*>($3), true)')
 _CONVERSION(`Event&',`GdkEvent*',`($3).gobj()')
+_CONVERSION(`Gdk::Event&',`GdkEvent*',`($3).gobj()')
 _CONVERSION(`const Event&',`const GdkEvent*',`($3).gobj()')
+_CONVERSION(`const Gdk::Event&',`const GdkEvent*',`($3).gobj()')
+_CONVERSION(`Gdk::EventButton&',`GdkEventButton*',`($3).gobj()')
+_CONVERSION(`Gdk::EventKey&',`GdkEventKey*',`($3).gobj()')
+_CONVERSION(`Gdk::EventSequence*',`GdkEventSequence*',`reinterpret_cast<$2>($3)')
+_CONVERSION(`GdkEventSequence*',`Gdk::EventSequence*',`reinterpret_cast<$2>($3)')
 
 _CONVERSION(`GdkDragContext*',`Glib::RefPtr<DragContext>',Glib::wrap($3, true))
 _CONVERSION(`GdkDragContext*',`Glib::RefPtr<Gdk::DragContext>',Glib::wrap($3, true))



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