Blob Blame History Raw
From 0ed9577c7edc9b227d86d3110bb8294940507f19 Mon Sep 17 00:00:00 2001
From: Kouhei Sutou <kou@clear-code.com>
Date: Tue, 11 Feb 2014 16:28:26 +0900
Subject: [PATCH] gdk3: add missing methods derived from GdkEventAny to all
 event classes

GitHub: #222

Reported by mtasaka. Thanks!!!
---
 gdk3/ext/gdk3/rbgdkevent.c  |  15 ++---
 gdk3/test/test-gdk-event.rb | 134 +++++++++++++++++++++++++++++++++++++-------
 2 files changed, 121 insertions(+), 28 deletions(-)

diff --git a/gdk3/ext/gdk3/rbgdkevent.c b/gdk3/ext/gdk3/rbgdkevent.c
index c5e908e..46f33f5 100644
--- a/gdk3/ext/gdk3/rbgdkevent.c
+++ b/gdk3/ext/gdk3/rbgdkevent.c
@@ -1,6 +1,6 @@
 /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
 /*
- *  Copyright (C) 2002-2013 Ruby-GNOME2 Project Team
+ *  Copyright (C) 2002-2014 Ruby-GNOME2 Project Team
  *  Copyright (C) 1998-2000 Yukihiro Matsumoto,
  *                          Daisuke Kanda,
  *                          Hiroshi Igarashi
@@ -721,8 +721,6 @@ gboolean    gdk_event_get_state             (GdkEvent *event,
 ATTR_FLOAT(button, y_root);
 
 /* GdkEventTouch */
-ATTR_GOBJ(touch, window);
-ATTR_BOOL(touch, send_event);
 ATTR_UINT(touch, time);
 ATTR_FLOAT(touch, x);
 ATTR_FLOAT(touch, y);
@@ -902,6 +900,11 @@ gboolean    gdk_event_get_state             (GdkEvent *event,
     rbg_define_method(rb_cGdkEvent, "screen", gdkevent_screen, 0);
     rbg_define_method(rb_cGdkEvent, "set_screen", gdkevent_set_screen, 1);
 
+    /* GdkEventAny's fields */
+    DEFINE_ACCESSOR(rb_cGdkEvent, any, window);
+    rbg_define_method(rb_cGdkEvent, "send_event?", gdkeventany_send_event, 0);
+    rbg_define_method(rb_cGdkEvent, "set_send_event", gdkeventany_set_send_event, 1);
+
     /*
      * GdkEvent's Constants
      */
@@ -926,9 +929,6 @@ gboolean    gdk_event_get_state             (GdkEvent *event,
     rb_cGdkEventAny =
         G_DEF_CLASS_WITH_PARENT(GDK_TYPE_EVENT_ANY, "EventAny",
                                 mGdk, rb_cGdkEvent);
-    DEFINE_ACCESSOR(rb_cGdkEventAny, any, window);
-    rbg_define_method(rb_cGdkEventAny, "send_event?", gdkeventany_send_event, 0);
-    rbg_define_method(rb_cGdkEventAny, "set_send_event", gdkeventany_set_send_event, 1);
 
     /* GdkEventExpose */
     rb_cGdkEventExpose =
@@ -988,9 +988,6 @@ gboolean    gdk_event_get_state             (GdkEvent *event,
     rb_cGdkEventTouch =
         G_DEF_CLASS_WITH_PARENT(GDK_TYPE_EVENT_TOUCH, "EventTouch",
                                 mGdk, rb_cGdkEvent);
-    DEFINE_ACCESSOR(rb_cGdkEventTouch, touch, window);
-    rbg_define_method(rb_cGdkEventTouch, "send_event?", gdkeventtouch_send_event, 0);
-    rbg_define_method(rb_cGdkEventTouch, "set_send_event", gdkeventtouch_set_send_event, 1);
     DEFINE_ACCESSOR(rb_cGdkEventTouch, touch, time);
     DEFINE_ACCESSOR(rb_cGdkEventTouch, touch, x);
     DEFINE_ACCESSOR(rb_cGdkEventTouch, touch, y);
diff --git a/gdk3/test/test-gdk-event.rb b/gdk3/test/test-gdk-event.rb
index 5117a53..a011f25 100644
--- a/gdk3/test/test-gdk-event.rb
+++ b/gdk3/test/test-gdk-event.rb
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
-# Copyright (C) 2013  Ruby-GNOME2 Project Team
+# Copyright (C) 2013-2014  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -17,11 +17,27 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
 class TestGdkEvent < Test::Unit::TestCase
+  module TestAnyMethods
+    def test_window
+      assert_nil(event.window)
+    end
+
+    def test_send_event
+      assert_false(event.send_event?)
+    end
+  end
+
   class TestAny < self
+    include TestAnyMethods
+
     def setup
       @event = Gdk::EventAny.new(:delete)
     end
 
+    def event
+      @event
+    end
+
     def test_delete
       assert_equal("GDK_DELETE",
                    Gdk::EventAny.new(:delete).event_type.name)
@@ -31,23 +47,19 @@ def test_destroy
       assert_equal("GDK_DESTROY",
                    Gdk::EventAny.new(:destroy).event_type.name)
     end
-
-    def test_window
-      assert_nothing_raised do
-        @event.window
-      end
-    end
-
-    def test_send_event
-      assert_false(@event.send_event?)
-    end
   end
 
   class TestKey < self
+    include TestAnyMethods
+
     def setup
       @key = Gdk::EventKey.new(:key_press)
     end
 
+    def event
+      @key
+    end
+
     def test_key_press
       assert_equal("GDK_KEY_PRESS",
                    Gdk::EventKey.new(:key_press).event_type.name)
@@ -72,10 +84,16 @@ def test_keyval
   end
 
   class TestButton < self
+    include TestAnyMethods
+
     def setup
       @button = Gdk::EventButton.new(:button_press)
     end
 
+    def event
+      @button
+    end
+
     def test_button_press
       assert_equal("GDK_BUTTON_PRESS",
                    Gdk::EventButton.new(:button_press).event_type.name)
@@ -126,18 +144,14 @@ def test_y_root
   end
 
   class TestTouch < self
+    include TestAnyMethods
+
     def setup
       @touch = Gdk::EventTouch.new(:touch_begin)
     end
 
-    def test_window
-      assert_nothing_raised do
-        @touch.window
-      end
-    end
-
-    def test_send_event
-      assert_false(@touch.send_event?)
+    def event
+      @touch
     end
 
     def test_time
@@ -204,10 +218,16 @@ def test_y_root
   end
 
   class TestScroll < self
+    include TestAnyMethods
+
     def setup
       @scroll = Gdk::EventScroll.new
     end
 
+    def event
+      @scroll
+    end
+
     def test_time
       assert_kind_of(Integer, @scroll.time)
     end
@@ -238,10 +258,16 @@ def test_y_root
   end
 
   class TestMotion < self
+    include TestAnyMethods
+
     def setup
       @motion = Gdk::EventMotion.new
     end
 
+    def event
+      @motion
+    end
+
     def test_time
       assert_kind_of(Integer, @motion.time)
     end
@@ -274,20 +300,32 @@ def test_request
   end
 
   class TestVisibility < self
+    include TestAnyMethods
+
     def setup
       @visibility = Gdk::EventVisibility.new(:visibility_notify)
     end
 
+    def event
+      @visibility
+    end
+
     def test_state
       assert_kind_of(Gdk::EventVisibility::State, @visibility.state)
     end
   end
 
   class TestCrossing < self
+    include TestAnyMethods
+
     def setup
       @crossing = Gdk::EventCrossing.new(:enter_notify)
     end
 
+    def event
+      @crossing
+    end
+
     def test_enter_notify
       assert_equal("GDK_ENTER_NOTIFY",
                    Gdk::EventCrossing.new(:enter_notify).event_type.name)
@@ -334,20 +372,32 @@ def test_state
   end
 
   class TestFocus < self
+    include TestAnyMethods
+
     def setup
       @focus = Gdk::EventFocus.new
     end
 
+    def event
+      @focus
+    end
+
     def test_in
       assert_false(@focus.in?)
     end
   end
 
   class TestConfigure < self
+    include TestAnyMethods
+
     def setup
       @configure = Gdk::EventConfigure.new
     end
 
+    def event
+      @configure
+    end
+
     def test_x
       assert_kind_of(Integer, @configure.x)
     end
@@ -366,10 +416,16 @@ def test_height
   end
 
   class TestProperty < self
+    include TestAnyMethods
+
     def setup
       @property = Gdk::EventProperty.new
     end
 
+    def event
+      @property
+    end
+
     def test_atom
       assert_nothing_raised do
         @property.atom
@@ -386,10 +442,16 @@ def test_state
   end
 
   class TestSelection < self
+    include TestAnyMethods
+
     def setup
       @selection = Gdk::EventSelection.new(:selection_clear)
     end
 
+    def event
+      @selection
+    end
+
     def test_selection_clear
       assert_equal("GDK_SELECTION_CLEAR",
                    Gdk::EventSelection.new(:selection_clear).event_type.name)
@@ -429,10 +491,16 @@ def test_time
   end
 
   class TestDND < self
+    include TestAnyMethods
+
     def setup
       @dnd = Gdk::EventDND.new(:drag_enter)
     end
 
+    def event
+      @dnd
+    end
+
     def test_drag_enter
       assert_equal("GDK_DRAG_ENTER",
                    Gdk::EventDND.new(:drag_enter).event_type.name)
@@ -483,10 +551,16 @@ def test_y_root
   end
 
   class TestProximity < self
+    include TestAnyMethods
+
     def setup
       @proximity = Gdk::EventProximity.new(:proximity_in)
     end
 
+    def event
+      @proximity
+    end
+
     def test_proximity_in
       assert_equal("GDK_PROXIMITY_IN",
                    Gdk::EventProximity.new(:proximity_in).event_type.name)
@@ -509,10 +583,16 @@ def test_device
   end
 
   class TestWindowState < self
+    include TestAnyMethods
+
     def setup
       @window_state = Gdk::EventWindowState.new
     end
 
+    def event
+      @window_state
+    end
+
     def test_changed_mask
       assert_nothing_raised do
         @window_state.changed_mask
@@ -527,10 +607,16 @@ def test_new_window_state
   end
 
   class TestSetting < self
+    include TestAnyMethods
+
     def setup
       @setting = Gdk::EventSetting.new
     end
 
+    def event
+      @setting
+    end
+
     def test_action
       assert_nothing_raised do
         @setting.action
@@ -549,6 +635,10 @@ def setup
       @owner_change = Gdk::EventOwnerChange.new
     end
 
+    def event
+      @owner_change
+    end
+
     def test_owner
       assert_nothing_raised do
         @owner_change.owner
@@ -577,10 +667,16 @@ def test_selection_time
   end
 
   class TestGrabBroken < self
+    include TestAnyMethods
+
     def setup
       @grab_broken = Gdk::EventGrabBroken.new
     end
 
+    def event
+      @grab_broken
+    end
+
     def test_keyboard
       assert_boolean(@grab_broken.keyboard?)
     end
-- 
1.8.5.1