BUG: gtksheet row/column title expose events
"Scott Dattalo" <[email protected]> Thu, 9 Jun 2005 10:45:40 -0700 (PDT)
| Newsgroups | gmane.comp.scigraphica.gtkextra |
|---|---|
| Message-ID | <[email protected]> |
$ pkg-config --modversion gtk+-2.0
2.6.7
$ pkg-config --modversion gtkextra-2.0
2.0.0
gpsim (http://www.dattalo.com/gnupic/gpsim.html) uses gtkextra and in
particular the gtk_sheet widget. I've identified a bug with expose events
being propagated to the row and column titles of the gtk_sheet. The bug
manifests itself by not handling the expose event and consequently
preventing other widgets from getting updated. I haven't identified the
exact cause, but I did verify that if gtk_sheet_hide_row_titles() and
gtk_sheet_hide_column_titles() are called that the bug is not manifested.
In addition, I've tracked the flow of code starting at gtk_sheet_expose ()
and noticed that even though there is an attempt to propagate the expose
event to the row and column title children (when they're not hidden of
course), all that happens is that the children are repainted. It's as
though if gtk-2.6.7 now expects some attribute in the children to change
states or something. Anyway, I'm no expert with the lower levels of gtk,
but here are a few gdb bt's of the state of the system:
Here's where the row titles are invalidated and repainted (for some
arbitrary path I decided to capture)
#0 show_window_internal (window=0x81020e0, raise=1) at gdkwindow-x11.c:1457
#1 0x4068132f in gdk_window_show (window=0x81020e0) at gdkwindow-x11.c:1504
#2 0x40379a10 in gtk_sheet_expose (widget=0x80ec6c8, event=0xbfffdd20)
at gtksheet.c:4717
#3 0x404a5e91 in _gtk_marshal_BOOLEAN__BOXED (closure=0x808e4a8,
return_value=0xbfffd9d0, n_param_values=2, param_values=0xbfffdb00,
invocation_hint=0xbfffd9f8, marshal_data=0x40379434) at
gtkmarshalers.c:83
#4 0x40726a3a in g_type_class_meta_marshal (closure=0x808e4a8,
return_value=0xbfffd9d0, n_param_values=2, param_values=0xbfffdb00,
invocation_hint=0xbfffd9f8, marshal_data=0x1) at gclosure.c:514
#5 0x407267fe in g_closure_invoke (closure=0x808e4a8,
return_value=0xbfffd9d0,
n_param_values=2, param_values=0xbfffdb00, invocation_hint=0xbfffd9f8)
at gclosure.c:437
#6 0x40735c3d in signal_emit_unlocked_R (node=0x808e4f8, detail=0,
instance=0x80ec6c8,
emission_return=0xbfffda90, instance_and_params=0xbfffdb00) at
gsignal.c:2526
Here's where the signal propogates down to expose the row buttons:
#0 gtk_container_propagate_expose (container=0x80ec6c8, child=0x80ed4a0,
event=0xbfffdd20) at gtkcontainer.c:2449
#1 0x40431013 in gtk_container_expose_child (child=0x80ed4a0,
client_data=0xbfffdd20)
at gtkcontainer.c:2349
#2 0x403855fe in gtk_sheet_forall (container=0x0, include_internals=1,
callback=0x40430ff0 <gtk_container_expose_child>,
callback_data=0xbfffd820)
at gtksheet.c:8567
#3 0x4042f77d in gtk_container_forall (container=0x80ec6c8,
callback=0x40430ff0 <gtk_container_expose_child>,
callback_data=0xbfffd820)
at gtkcontainer.c:1265
#4 0x4043108c in gtk_container_expose (widget=0x80ec6c8, event=0xbfffdd20)
at gtkcontainer.c:2372
#5 0x40379511 in gtk_sheet_expose (widget=0x80ec6c8, event=0xbfffdd20)
at gtksheet.c:4756
#6 0x404a5e91 in _gtk_marshal_BOOLEAN__BOXED (closure=0x808e4a8,
return_value=0xbfffd9d0, n_param_values=2, param_values=0xbfffdb00,
invocation_hint=0xbfffd9f8, marshal_data=0x40379434) at
gtkmarshalers.c:83
Now what's interesting is that: gtk_container_propagate_expose ()
checks to see if the event window and child window are same. It appears
that a) this check is always failing (when the row or column titles are
not hidden and that b) it appears that the event->window points to a
completly different window that's not associated with the gtk_sheet widget
or any of its children!
(gdb) p *(event->window)
$14 = {parent_instance = {g_type_instance = {g_class = 0x807f118},
ref_count = 4,
qdata = 0x8101100}}
Anyway, I hope this is enough to go on.
Scott
-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games. How far can you shotput
a projector? How fast can you ride your desk chair down the office luge track?
If you want to score the big prize, get to know the little guy.
Play to win an NEC 61" plasma display: http://www.necitguy.com/?r=20