[pygobject] Gdk.Event: Override __setattr__ to set fields based on the event type
- From: Simon Feltman <sfeltman src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pygobject] Gdk.Event: Override __setattr__ to set fields based on the event type
- Date: Tue, 15 Apr 2014 02:16:26 +0000 (UTC)
commit 906977047df2fb2f394410e4ebf360b69af8dcfe
Author: Christoph Reiter <reiter christoph gmail com>
Date: Mon Apr 14 15:40:50 2014 +0200
Gdk.Event: Override __setattr__ to set fields based on the event type
Pass the setting of attributes through to the underlying union based
on event type. This mirrors the logic in __getattr__.
https://bugzilla.gnome.org/show_bug.cgi?id=727810
gi/overrides/Gdk.py | 7 +++++++
tests/test_overrides_gdk.py | 13 ++++++++++---
2 files changed, 17 insertions(+), 3 deletions(-)
---
diff --git a/gi/overrides/Gdk.py b/gi/overrides/Gdk.py
index d1128ad..95030f8 100644
--- a/gi/overrides/Gdk.py
+++ b/gi/overrides/Gdk.py
@@ -202,6 +202,13 @@ class Event(Gdk.Event):
else:
raise AttributeError("'%s' object has no attribute '%s'" % (self.__class__.__name__, name))
+ def __setattr__(self, name, value):
+ real_event = getattr(self, '_UNION_MEMBERS').get(self.type)
+ if real_event:
+ setattr(getattr(self, real_event), name, value)
+ else:
+ Gdk.Event.__setattr__(self, name, value)
+
def __repr__(self):
base_repr = Gdk.Event.__repr__(self).strip("><")
return "<%s type=%r>" % (base_repr, self.type)
diff --git a/tests/test_overrides_gdk.py b/tests/test_overrides_gdk.py
index bc3f968..60d5ae4 100644
--- a/tests/test_overrides_gdk.py
+++ b/tests/test_overrides_gdk.py
@@ -66,14 +66,21 @@ class TestGdk(unittest.TestCase):
self.assertEqual(event.type, Gdk.EventType.CONFIGURE)
self.assertEqual(event.send_event, 0)
+ event = Gdk.Event()
+ event.type = Gdk.EventType.SCROLL
+ self.assertRaises(AttributeError, lambda: getattr(event, 'foo_bar'))
+
+ def test_event_setattr(self):
event = Gdk.Event.new(Gdk.EventType.DRAG_MOTION)
event.x_root, event.y_root = 0, 5
+ self.assertEqual(event.dnd.x_root, 0)
+ self.assertEqual(event.dnd.y_root, 5)
self.assertEqual(event.x_root, 0)
self.assertEqual(event.y_root, 5)
- event = Gdk.Event()
- event.type = Gdk.EventType.SCROLL
- self.assertRaises(AttributeError, lambda: getattr(event, 'foo_bar'))
+ # this used to work, keep it that way
+ self.assertFalse(hasattr(event, "foo_bar"))
+ event.foo_bar = 42
def test_event_repr(self):
event = Gdk.Event.new(Gdk.EventType.CONFIGURE)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]