diff options
author | Johan Dahlin <johan@src.gnome.org> | 2004-08-02 11:03:05 +0000 |
---|---|---|
committer | Johan Dahlin <johan@src.gnome.org> | 2004-08-02 11:03:05 +0000 |
commit | 92e0b9e24a60f47c216cf625de22fa46e7df0296 (patch) | |
tree | 67fff2ad85c5926e1f1be38710ef1827b229495f /gtk/pygtkcellrenderer.c | |
parent | 3c5e6f41e151f4b8b8471b5b3a8de1c64ad36588 (diff) | |
download | pygtk-92e0b9e24a60f47c216cf625de22fa46e7df0296.tar.gz |
Call PyEval_InitThreads. Perhaps its something that always should be
* gobject/gobjectmodule.c (initgobject): Call
PyEval_InitThreads. Perhaps its something that always should be
called.
* README (Author): Add a requirements section
* configure.in: Require Python 2.3
* setup.py (version): Ditto
* gobject/pygtype.c, gobject/pygobject.h: Remove 2.2 compat.
* All over the place: Add support for PyGILState.
Diffstat (limited to 'gtk/pygtkcellrenderer.c')
-rw-r--r-- | gtk/pygtkcellrenderer.c | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/gtk/pygtkcellrenderer.c b/gtk/pygtkcellrenderer.c index 6a1c82c3..094439da 100644 --- a/gtk/pygtkcellrenderer.c +++ b/gtk/pygtkcellrenderer.c @@ -112,12 +112,14 @@ pygtk_generic_cell_renderer_get_size (GtkCellRenderer *cell, gint *width, gint *height) { + PyGILState_STATE state; PyObject *self, *py_ret, *py_widget, *py_cell_area; gint my_x, my_y, my_width, my_height; g_return_if_fail(PYGTK_IS_GENERIC_CELL_RENDERER (cell)); pyg_block_threads(); + state = PyGILState_Ensure(); self = pygobject_new((GObject *)cell); @@ -133,6 +135,7 @@ pygtk_generic_cell_renderer_get_size (GtkCellRenderer *cell, PyErr_Print(); Py_DECREF(py_widget); Py_DECREF(py_cell_area); + PyGILState_Release(state); pyg_unblock_threads(); return; } @@ -143,12 +146,14 @@ pygtk_generic_cell_renderer_get_size (GtkCellRenderer *cell, &my_x, &my_y, &my_width, &my_height)) { PyErr_Clear(); Py_DECREF(py_ret); + PyGILState_Release(state); pyg_unblock_threads(); g_warning("could not parse return value of get_size() method. " "Should be of form (x_offset, y_offset, width, height)"); return; } + PyGILState_Release(state); pyg_unblock_threads(); /* success */ @@ -175,12 +180,14 @@ pygtk_generic_cell_renderer_render (GtkCellRenderer *cell, GdkRectangle *expose_area, GtkCellRendererState flags) { + PyGILState_STATE state; PyObject *self, *py_ret, *py_window, *py_widget; PyObject *py_background_area, *py_cell_area, *py_expose_area; g_return_if_fail(PYGTK_IS_GENERIC_CELL_RENDERER (cell)); pyg_block_threads(); + state = PyGILState_Ensure(); self = pygobject_new((GObject *)cell); @@ -205,6 +212,7 @@ pygtk_generic_cell_renderer_render (GtkCellRenderer *cell, Py_DECREF(py_cell_area); Py_DECREF(py_expose_area); + PyGILState_Release(state); pyg_unblock_threads(); } @@ -217,13 +225,15 @@ pygtk_generic_cell_renderer_activate (GtkCellRenderer *cell, GdkRectangle *cell_area, GtkCellRendererState flags) { + PyGILState_STATE state; PyObject *self, *py_ret, *py_event, *py_widget; PyObject *py_background_area, *py_cell_area; - gboolean ret; + gboolean ret = FALSE; g_return_val_if_fail(PYGTK_IS_GENERIC_CELL_RENDERER (cell), FALSE); pyg_block_threads(); + state = PyGILState_Ensure(); self = pygobject_new((GObject *)cell); @@ -240,19 +250,18 @@ pygtk_generic_cell_renderer_activate (GtkCellRenderer *cell, py_cell_area, flags); if (!py_ret) { PyErr_Print(); - Py_DECREF(py_event); - Py_DECREF(py_widget); - Py_DECREF(py_background_area); - Py_DECREF(py_cell_area); - pyg_unblock_threads(); - return FALSE; + goto out; } + + ret = PyObject_IsTrue(py_ret); + Py_DECREF(py_ret); + +out: Py_DECREF(py_event); Py_DECREF(py_widget); Py_DECREF(py_background_area); Py_DECREF(py_cell_area); - ret = PyObject_IsTrue(py_ret); - Py_DECREF(py_ret); + PyGILState_Release(state); pyg_unblock_threads(); return ret; } @@ -266,6 +275,7 @@ pygtk_generic_cell_renderer_start_editing (GtkCellRenderer *cell, GdkRectangle *cell_area, GtkCellRendererState flags) { + PyGILState_STATE state; PyObject *self, *py_ret, *py_event, *py_widget; PyObject *py_background_area, *py_cell_area; GtkCellEditable *ret = NULL; @@ -274,6 +284,7 @@ pygtk_generic_cell_renderer_start_editing (GtkCellRenderer *cell, g_return_val_if_fail(PYGTK_IS_GENERIC_CELL_RENDERER (cell), NULL); pyg_block_threads(); + state = PyGILState_Ensure(); self = pygobject_new((GObject *)cell); @@ -294,6 +305,7 @@ pygtk_generic_cell_renderer_start_editing (GtkCellRenderer *cell, Py_DECREF(py_widget); Py_DECREF(py_background_area); Py_DECREF(py_cell_area); + PyGILState_Release(state); pyg_unblock_threads(); return NULL; } @@ -311,6 +323,7 @@ pygtk_generic_cell_renderer_start_editing (GtkCellRenderer *cell, g_warning("return of start_editing() was not a GtkCellEditable"); } Py_DECREF(py_ret); + PyGILState_Release(state); pyg_unblock_threads(); return ret; } |