summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGustavo J. A. M. Carneiro <gjc@src.gnome.org>2007-01-20 14:25:37 +0000
committerGustavo J. A. M. Carneiro <gjc@src.gnome.org>2007-01-20 14:25:37 +0000
commit74620bd24024fd22e43a2f56b757ad631db7e667 (patch)
tree0f664f6a7fc955e5509eded872eb6bc7c8c2d65d
parentbc87216d1f7942e41d32b75af30f782f520d9b42 (diff)
downloadpygtk-74620bd24024fd22e43a2f56b757ad631db7e667.tar.gz
more refcount fixes in gdk.gdk.Display.close
svn path=/trunk/; revision=2806
-rw-r--r--ChangeLog6
-rw-r--r--gtk/gdk.override8
-rw-r--r--tests/test_gdk.py23
3 files changed, 30 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 6e7f5195..adda4f12 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2007-01-20 Gustavo J. A. M. Carneiro <gjc@gnome.org>
+ * gtk/gdk.override (_wrap_gdk_display_close): Force keeping of a
+ reference to the display GObject even when we close() it.
+
+ * tests/test_gdk.py (GdkTest.testDisplay): Johan's unit test with
+ minor modifications.
+
* gtk/gdk.override (_wrap_gdk_display_close): Override and make it
aware that calling gdk_display_close unrefs the GdkDisplay.
diff --git a/gtk/gdk.override b/gtk/gdk.override
index 6ddc1310..2b06b2a1 100644
--- a/gtk/gdk.override
+++ b/gtk/gdk.override
@@ -1483,11 +1483,11 @@ override gdk_display_close noargs
static PyObject *
_wrap_gdk_display_close(PyGObject *self)
{
- if (self->obj) {
- gdk_display_close(GDK_DISPLAY(self->obj));
- self->obj = NULL;
+ GdkDisplay *display = GDK_DISPLAY(self->obj);
+ if (self->obj && !display->closed) {
+ g_object_ref(self->obj);
+ gdk_display_close(display);
}
-
Py_INCREF(Py_None);
return Py_None;
}
diff --git a/tests/test_gdk.py b/tests/test_gdk.py
index 95b23794..77fe5cc1 100644
--- a/tests/test_gdk.py
+++ b/tests/test_gdk.py
@@ -48,11 +48,28 @@ class GdkTest(unittest.TestCase):
[0xdeadbe, 0xbebabe])
def testDisplay(self):
- gc.collect()
+ while gc.collect():
+ pass
+
display = gtk.gdk.Display(None)
del display
- self.assertEquals(gc.collect(), 1)
+
+ cnt = 0
+ while True:
+ x = gc.collect()
+ cnt += x
+ if x:
+ break
+ self.assertEquals(cnt, 1)
+
display = gtk.gdk.Display(None)
display.close()
del display
- #self.assertEquals(gc.collect(), 1)
+
+ cnt = 0
+ while True:
+ x = gc.collect()
+ cnt += x
+ if x:
+ break
+ self.assertEquals(cnt, 1)