summaryrefslogtreecommitdiff
path: root/gtk/pygtkcellrenderer.c
diff options
context:
space:
mode:
authorJohan Dahlin <johan@src.gnome.org>2004-08-02 11:03:05 +0000
committerJohan Dahlin <johan@src.gnome.org>2004-08-02 11:03:05 +0000
commit92e0b9e24a60f47c216cf625de22fa46e7df0296 (patch)
tree67fff2ad85c5926e1f1be38710ef1827b229495f /gtk/pygtkcellrenderer.c
parent3c5e6f41e151f4b8b8471b5b3a8de1c64ad36588 (diff)
downloadpygtk-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.c31
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;
}