root/gaphor/tags/gaphor-0.1.0/pygtk.patch
| Revision 48, 6.6 kB (checked in by arjanmol, 7 years ago) | |
|---|---|
| |
-
gtk/pygtktreemodel.c
old new 11 11 /* define this to print out debug messages */ 12 12 #undef DEBUG_TREE_MODEL 13 13 14 #ifndef _ 15 # define _(s) (s) 16 #endif 17 18 enum { 19 PROP_LEAK_REFERENCES = 1 20 }; 21 14 22 static void pygtk_generic_tree_model_class_init(PyGtkGenericTreeModelClass *klass); 15 23 static void pygtk_generic_tree_model_init(PyGtkGenericTreeModel *self); 16 24 static void pygtk_generic_tree_model_iface_init(GtkTreeModelIface *iface); 17 25 26 static void pygtk_generic_tree_model_set_property (GObject *object, 27 guint property_id, 28 const GValue *value, 29 GParamSpec *pspec); 30 static void pygtk_generic_tree_model_get_property (GObject *object, 31 guint property_id, 32 GValue *value, 33 GParamSpec *pspec); 34 18 35 GType 19 36 pygtk_generic_tree_model_get_type(void) 20 37 { … … 51 68 static void 52 69 pygtk_generic_tree_model_class_init(PyGtkGenericTreeModelClass *klass) 53 70 { 71 GObjectClass *object_class = (GObjectClass*) klass; 72 73 object_class->get_property = pygtk_generic_tree_model_get_property; 74 object_class->set_property = pygtk_generic_tree_model_set_property; 75 76 g_object_class_install_property (object_class, 77 PROP_LEAK_REFERENCES, 78 g_param_spec_boolean ("leak_references", 79 _("Leak references"), 80 _("Enable referencing iterator " 81 "objects (this will cause a memory leak or at least a reference " 82 "counting leak). You might need it though, if you return newly " 83 "created objects."), 84 TRUE, 85 G_PARAM_READWRITE)); 86 54 87 } 55 88 56 89 static guint pygtk_generic_tree_model_get_flags(GtkTreeModel *tree_model); … … 102 135 static void 103 136 pygtk_generic_tree_model_init(PyGtkGenericTreeModel *self) 104 137 { 138 self->leak_references = TRUE; 139 } 140 141 static void 142 pygtk_generic_tree_model_set_property (GObject *object, guint property_id, 143 const GValue *value, GParamSpec *pspec) 144 { 145 switch (property_id) { 146 case PROP_LEAK_REFERENCES: 147 PYGTK_GENERIC_TREE_MODEL (object)->leak_references = g_value_get_boolean (value); 148 break; 149 default: 150 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); 151 break; 152 } 105 153 } 106 154 155 static void 156 pygtk_generic_tree_model_get_property (GObject *object, guint property_id, 157 GValue *value, GParamSpec *pspec) 158 { 159 switch (property_id) { 160 case PROP_LEAK_REFERENCES: 161 g_value_set_boolean (value, 162 PYGTK_GENERIC_TREE_MODEL (object)->leak_references); 163 break; 164 default: 165 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); 166 break; 167 } 168 } 169 107 170 PyGtkGenericTreeModel * 108 171 pygtk_generic_tree_model_new(void) 109 172 { … … 224 287 if (py_ret) { 225 288 if (py_ret != Py_None) { 226 289 iter->user_data = py_ret; 290 if (!((PyGtkGenericTreeModel*) tree_model)->leak_references) { 291 Py_DECREF (py_ret); 292 } 227 293 return TRUE; 228 294 } else { 229 295 iter->user_data = NULL; … … 280 346 281 347 #ifdef DEBUG_TREE_MODEL 282 348 g_message("get_value(%p, %d)", iter, column); 349 _PyObject_Dump (iter->user_data); 283 350 #endif 284 351 /* init value to column type */ 285 352 g_value_init(value, pygtk_generic_tree_model_get_column_type(tree_model, column)); 286 353 354 287 355 py_value = PyObject_CallMethod(self, METHOD_PREFIX "get_value", 288 "(Oi)", (PyObject *)iter->user_data, column);356 "(Oi)", (PyObject *)iter->user_data, column); 289 357 290 358 if (py_value) { 291 359 pyg_value_from_pyobject(value, py_value); … … 315 383 if (py_ret) { 316 384 if (py_ret != Py_None) { 317 385 /* XXXX handle reference counting here */ 386 if (iter->user_data 387 && ((PyGtkGenericTreeModel*) tree_model)->leak_references) { 388 Py_DECREF ((PyObject*) iter->user_data); 389 } 318 390 iter->user_data = py_ret; 391 if (!((PyGtkGenericTreeModel*) tree_model)->leak_references) { 392 Py_DECREF(py_ret); 393 } 319 394 return TRUE; 320 395 } else { 321 396 iter->user_data = NULL; … … 345 420 #ifdef DEBUG_TREE_MODEL 346 421 g_message("iter_children(%p, %p)", iter, parent); 347 422 #endif 348 if (parent) py_parent = (PyObject *)parent->user_data; 423 if (parent && parent->user_data) 424 py_parent = (PyObject *)parent->user_data; 349 425 py_ret = PyObject_CallMethod(self, METHOD_PREFIX "iter_children", 350 426 "(O)", py_parent); 351 427 if (py_ret) { 352 428 if (py_ret != Py_None) { 353 429 /* XXXX handle reference counting here */ 354 430 iter->user_data = py_ret; 431 if (!((PyGtkGenericTreeModel*) tree_model)->leak_references) { 432 Py_DECREF(py_ret); 433 } 355 434 return TRUE; 356 435 } else { 357 436 iter->user_data = NULL; … … 435 514 self = pygobject_new((GObject *)tree_model); 436 515 437 516 #ifdef DEBUG_TREE_MODEL 438 g_message("iter_nth_child(%p, %p , %d)", iter, parent, n);517 g_message("iter_nth_child(%p, %p (%p), %d)", iter, parent, parent ? parent->user_data : NULL, n); 439 518 #endif 440 if (parent) py_parent = (PyObject *)parent->user_data; 519 if (parent && parent->user_data) 520 py_parent = (PyObject *)parent->user_data; 441 521 py_ret = PyObject_CallMethod(self, METHOD_PREFIX "iter_nth_child", 442 522 "(Oi)", py_parent, n); 443 523 if (py_ret) { 444 524 if (py_ret != Py_None) { 445 525 /* XXXX handle reference counting here */ 446 526 iter->user_data = py_ret; 527 if (!((PyGtkGenericTreeModel*) tree_model)->leak_references) { 528 Py_DECREF(py_ret); 529 } 447 530 return TRUE; 448 531 } else { 449 532 iter->user_data = NULL; … … 473 556 #ifdef DEBUG_TREE_MODEL 474 557 g_message("iter_parent(%p, %p)", iter, child); 475 558 #endif 476 if (child) py_child = (PyObject *)child->user_data; 559 if (child && child->user_data) 560 py_child = (PyObject *)child->user_data; 477 561 py_ret = PyObject_CallMethod(self, METHOD_PREFIX "iter_parent", 478 562 "(O)", py_child); 479 563 if (py_ret) { 480 564 if (py_ret != Py_None) { 481 565 /* XXXX handle reference counting here */ 566 if (iter->user_data 567 && ((PyGtkGenericTreeModel*) tree_model)->leak_references) { 568 Py_DECREF ((PyObject*) iter->user_data); 569 } 482 570 iter->user_data = py_ret; 571 if (!((PyGtkGenericTreeModel*) tree_model)->leak_references) { 572 Py_DECREF(py_ret); 573 } 483 574 return TRUE; 484 575 } else { 485 576 iter->user_data = NULL; -
gtk/pygtktreemodel.h
old new 13 13 14 14 struct _PyGtkGenericTreeModel { 15 15 GObject parent_instance; 16 17 gboolean leak_references; 16 18 }; 17 19 18 20 struct _PyGtkGenericTreeModelClass {
Note: See TracBrowser for help on using the browser.
