diff -Nur sexy-python-0.1.9/sexy/sexy.override sexy-python-0.1.9.new/sexy/sexy.override --- sexy-python-0.1.9/sexy/sexy.override 2006-03-18 22:48:12.000000000 +0100 +++ sexy-python-0.1.9.new/sexy/sexy.override 2007-03-08 11:11:46.000000000 +0100 @@ -163,5 +163,46 @@ return 0; } %% +override sexy_tooltip_position_to_rect kwargs + +/* Stock pygdk_rectangle_from_pyobject crashes with (at least) PyGTK 2.6.8 */ +static gboolean +_gimmie_pygdk_rectangle_from_pyobject(PyObject *object, GdkRectangle *rectangle) +{ + g_return_val_if_fail(rectangle != NULL, FALSE); + + if (pyg_boxed_check(object, GDK_TYPE_RECTANGLE)) { + *rectangle = *pyg_boxed_get(object, GdkRectangle); + return TRUE; + } + if (PyArg_ParseTuple(object, "iiii", &rectangle->x, &rectangle->y, + &rectangle->width, &rectangle->height)) { + return TRUE; + } + PyErr_Clear(); + PyErr_SetString(PyExc_TypeError, "could not convert to GdkRectangle"); + return FALSE; +} + +static PyObject * +_wrap_sexy_tooltip_position_to_rect(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "rect", "screen", NULL }; + PyObject *py_rect; + PyGObject *screen; + GdkRectangle rect = { 0, 0, 0, 0 }; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO!:SexyTooltip.position_to_rect", kwlist, &py_rect, &PyGdkScreen_Type, &screen)) + return NULL; + + /* FIXME: Force the use of a newer version which does not crash */ + if (!_gimmie_pygdk_rectangle_from_pyobject(py_rect, &rect)) + return NULL; + + sexy_tooltip_position_to_rect(SEXY_TOOLTIP(self->obj), &rect, GDK_SCREEN(screen->obj)); + Py_INCREF(Py_None); + return Py_None; +} +%% init pyg_set_object_has_new_constructor(SEXY_TYPE_URL_LABEL);