Problem constructing GooCanvasModel* objects



Hey,

I played around with gdb to try and figure out these error messages:

(lt-moving_shapes:25873): glibmm-WARNING **: This object, of type
GooCanvasRectModel, already has a wrapper.
You should use wrap() instead of a constructor.

Setting a breakpoint at objectbase.cc:89
I managed to get this backtrace:

Breakpoint 2, Glib::ObjectBase::initialize (this=0x80c0668,
castitem=0x8087960) at objectbase.cc:89
89        _set_current_wrapper(castitem);
(gdb) bt
#0  Glib::ObjectBase::initialize (this=0x80c0668, castitem=0x8087960)
at objectbase.cc:89
#1  0xb7b555e6 in Object (this=0x8087960, __vtt_parm=0xb7f48368,
castitem=0x0) at object.cc:257
#2  0xb7f2fd08 in ItemModelSimple (this=0x80c0660,
__vtt_parm=0xb7f48364, castitem=0x0) at itemmodelsimple.cc:112
#3  0xb7f3645f in RectModel (this=0x80c0660, castitem=0x0) at rectmodel.cc:124
#4  0xb7f364e1 in Goocanvas::RectModel_Class::wrap_new (object=0x0) at
rectmodel.cc:105
#5  0xb7b5d915 in create_new_wrapper (object=0x8087960) at wrap.cc:71
#6  0xb7b5d9a8 in Glib::wrap_auto (object=0x8087960, take_copy=true)
at wrap.cc:138
#7  0xb7f2ec17 in Glib::wrap (object=0x0, take_copy=true) at itemmodel.cc:42
#8  0xb7f261b1 in Canvas_signal_item_created_callback (self=0x0,
p0=0x0, p1=0x0, data=0x80baef0) at canvas.cc:80
#9  0xb7b0830b in goo_canvas_marshal_VOID__OBJECT_OBJECT
(closure=0x80baf50, return_value=0x0, n_param_values=3,
param_values=0xbfb5d16c, invocation_hint=0xbfb5d05c,
   marshal_data=0xb7f26152) at goocanvasmarshal.c:125
#10 0xb73d2e3f in IA__g_closure_invoke (closure=0x80baf50,
return_value=0x0, n_param_values=0, param_values=0x0,
invocation_hint=0x0) at gclosure.c:490
#11 0xb73e354c in signal_emit_unlocked_R (node=0x80b47f8, detail=0,
instance=0x80b7018, emission_return=0x0,
instance_and_params=0xbfb5d16c) at gsignal.c:2510
#12 0xb73e4afa in IA__g_signal_emit_valist (instance=0x80b7018,
signal_id=87, detail=0, var_args=<value optimized out>) at
gsignal.c:2199
#13 0xb73e4e49 in IA__g_signal_emit (instance=0x0, signal_id=0,
detail=0) at gsignal.c:2243
#14 0xb7b16304 in goo_canvas_create_item (canvas=0x80b7018,
model=0x8087960) at goocanvas.c:1875
#15 0xb7afe72f in on_model_child_added (model=0x0, position=0,
group=0x8083e48) at goocanvasgroup.c:277
#16 0xb73e01b9 in IA__g_cclosure_marshal_VOID__INT (closure=0x80bf4e0,
return_value=0x0, n_param_values=2, param_values=0xbfb5d67c,
invocation_hint=0xbfb5d56c,
   marshal_data=0xb7afe6f7) at gmarshal.c:216
#17 0xb73d2e3f in IA__g_closure_invoke (closure=0x80bf4e0,
return_value=0x0, n_param_values=0, param_values=0x0,
invocation_hint=0x0) at gclosure.c:490
#18 0xb73e2fd5 in signal_emit_unlocked_R (node=0x80bb0e0, detail=0,
instance=0x80ba4e0, emission_return=0x0,
instance_and_params=0xbfb5d67c) at gsignal.c:2440
#19 0xb73e4afa in IA__g_signal_emit_valist (instance=0x80ba4e0,
signal_id=101, detail=0, var_args=<value optimized out>) at
gsignal.c:2199
#20 0xb73e7fe0 in IA__g_signal_emit_by_name (instance=0x80ba4e0,
detailed_signal=0xb7b19b2e "child-added") at gsignal.c:2267
#21 0xb7aff142 in goo_canvas_group_model_add_child (model=0x80ba4e0,
child=0x8087960, position=0) at goocanvasgroup.c:690
#22 0xb7b0392c in goo_canvas_item_model_add_child (model=0x80ba4e0,
child=0x0, position=0) at goocanvasitemmodel.c:278
#23 0xb7b0b587 in goo_canvas_rect_model_new (parent=0x80ba4e0, x=200,
y=200, width=100, height=100) at goocanvasrect.c:543
#24 0xb7f362dc in RectModel (this=0x80bec10, parent= 0x0, x=200,
y=200, width=100, height=100) at rectmodel.cc:33
#25 0xb7f3688a in Goocanvas::RectModel::create (parent= 0x0, x=200,
y=200, width=100, height=100) at rectmodel.cc:146
#26 0x0804dc8d in Window (this=0xbfb5db68) at window.cc:15
#27 0x0804cd4d in main (argc=1, argv=0xbfb5dc44) at main.cc:10
(gdb) continue
Continuing.

Breakpoint 2, Glib::ObjectBase::initialize (this=0x80c0688,
castitem=0x80bfe70) at objectbase.cc:89
89        _set_current_wrapper(castitem);
(gdb) bt
#0  Glib::ObjectBase::initialize (this=0x80c0688, castitem=0x80bfe70)
at objectbase.cc:89
#1  0xb7b555e6 in Object (this=0x80bfe70, __vtt_parm=0xb7f480a8,
castitem=0x0) at object.cc:257
#2  0xb7f30d8e in ItemSimple (this=0x80c0680, __vtt_parm=0xb7f480a4,
castitem=0x0) at itemsimple.cc:113
#3  0xb7f35961 in Rect (this=0x80c0680, castitem=0x0) at rect.cc:124
#4  0xb7f359e3 in Goocanvas::Rect_Class::wrap_new (object=0x0) at rect.cc:105
#5  0xb7b5d915 in create_new_wrapper (object=0x80bfe70) at wrap.cc:71
#6  0xb7b5d9a8 in Glib::wrap_auto (object=0x80bfe70, take_copy=true)
at wrap.cc:138
#7  0xb7f2b1a5 in Glib::wrap (object=0x0, take_copy=true) at item.cc:725
#8  0xb7f261d4 in Canvas_signal_item_created_callback (self=0x0,
p0=0x0, p1=0x0, data=0x80baef0) at canvas.cc:80
#9  0xb7b0830b in goo_canvas_marshal_VOID__OBJECT_OBJECT
(closure=0x80baf50, return_value=0x0, n_param_values=3,
param_values=0xbfb5d16c, invocation_hint=0xbfb5d05c,
   marshal_data=0xb7f26152) at goocanvasmarshal.c:125
#10 0xb73d2e3f in IA__g_closure_invoke (closure=0x80baf50,
return_value=0x0, n_param_values=0, param_values=0x0,
invocation_hint=0x0) at gclosure.c:490
#11 0xb73e354c in signal_emit_unlocked_R (node=0x80b47f8, detail=0,
instance=0x80b7018, emission_return=0x0,
instance_and_params=0xbfb5d16c) at gsignal.c:2510
#12 0xb73e4afa in IA__g_signal_emit_valist (instance=0x80b7018,
signal_id=87, detail=0, var_args=<value optimized out>) at
gsignal.c:2199
#13 0xb73e4e49 in IA__g_signal_emit (instance=0x0, signal_id=0,
detail=0) at gsignal.c:2243
#14 0xb7b16304 in goo_canvas_create_item (canvas=0x80b7018,
model=0x8087960) at goocanvas.c:1875
#15 0xb7afe72f in on_model_child_added (model=0x0, position=0,
group=0x8083e48) at goocanvasgroup.c:277
#16 0xb73e01b9 in IA__g_cclosure_marshal_VOID__INT (closure=0x80bf4e0,
return_value=0x0, n_param_values=2, param_values=0xbfb5d67c,
invocation_hint=0xbfb5d56c,
   marshal_data=0xb7afe6f7) at gmarshal.c:216
#17 0xb73d2e3f in IA__g_closure_invoke (closure=0x80bf4e0,
return_value=0x0, n_param_values=0, param_values=0x0,
invocation_hint=0x0) at gclosure.c:490
#18 0xb73e2fd5 in signal_emit_unlocked_R (node=0x80bb0e0, detail=0,
instance=0x80ba4e0, emission_return=0x0,
instance_and_params=0xbfb5d67c) at gsignal.c:2440
#19 0xb73e4afa in IA__g_signal_emit_valist (instance=0x80ba4e0,
signal_id=101, detail=0, var_args=<value optimized out>) at
gsignal.c:2199
#20 0xb73e7fe0 in IA__g_signal_emit_by_name (instance=0x80ba4e0,
detailed_signal=0xb7b19b2e "child-added") at gsignal.c:2267
#21 0xb7aff142 in goo_canvas_group_model_add_child (model=0x80ba4e0,
child=0x8087960, position=0) at goocanvasgroup.c:690
#22 0xb7b0392c in goo_canvas_item_model_add_child (model=0x80ba4e0,
child=0x0, position=0) at goocanvasitemmodel.c:278
#23 0xb7b0b587 in goo_canvas_rect_model_new (parent=0x80ba4e0, x=200,
y=200, width=100, height=100) at goocanvasrect.c:543
#24 0xb7f362dc in RectModel (this=0x80bec10, parent= 0x0, x=200,
y=200, width=100, height=100) at rectmodel.cc:33
#25 0xb7f3688a in Goocanvas::RectModel::create (parent= 0x0, x=200,
y=200, width=100, height=100) at rectmodel.cc:146
#26 0x0804dc8d in Window (this=0xbfb5db68) at window.cc:15
#27 0x0804cd4d in main (argc=1, argv=0xbfb5dc44) at main.cc:10
(gdb) continue
Continuing.

Breakpoint 2, Glib::ObjectBase::initialize (this=0x80bec18,
castitem=0x8087960) at objectbase.cc:89
89        _set_current_wrapper(castitem);
(gdb) bt
#0  Glib::ObjectBase::initialize (this=0x80bec18, castitem=0x8087960)
at objectbase.cc:89
#1  0xb7b555e6 in Object (this=0x8087960, __vtt_parm=0xb7f48368,
castitem=0x0) at object.cc:257
#2  0xb7f2fd08 in ItemModelSimple (this=0x80bec10,
__vtt_parm=0xb7f48364, castitem=0x0) at itemmodelsimple.cc:112
#3  0xb7f362fe in RectModel (this=0x80bec10, parent= 0x0, x=200,
y=200, width=100, height=100) at rectmodel.cc:33
#4  0xb7f3688a in Goocanvas::RectModel::create (parent= 0x0, x=200,
y=200, width=100, height=100) at rectmodel.cc:146
#5  0x0804dc8d in Window (this=0xbfb5db68) at window.cc:15
#6  0x0804cd4d in main (argc=1, argv=0xbfb5dc44) at main.cc:10
(gdb) continue
Continuing.

(moving_shapes:26016): glibmm-WARNING **: This object, of type
GooCanvasRectModel, already has a wrapper.
You should use wrap() instead of a constructor.

So, this is my theory about whats going on:

1. Call to C++ RectModel constructor
2. Inner workings of GooCanvas emits the item_created signal
(for reference: void signal_item_create( const
Glib::RefPtr<Goocanvas::Item>& item, const
Glib::RefPtr<Goocanvas::Model>& model ) is the signature of that
callback.)
3. When the signal is emitted, a temporary Goocanvas::Model object is created
4. signal returns, control returns back to the orignal C++ constructor
5. This causes the 'second instantiation' problem that Glib reports.

Soooo, anyone have any ideas?

Thanks,
Paul Davis



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]