Hello!

The CVS version of AbiWord reports a warning at runtime:

Gtk-WARNING **: invalid cast from `GtkButton' to `GtkCombo'

If I run the debugging version of AbiWord with --g-fatal-warnings, it 
shows where it happens:

#0  0x403838d1 in __kill () from /lib/libc.so.6
#1  0x4038364d in raise (sig=6) at ../sysdeps/posix/raise.c:27
#2  0x40384cb8 in abort () at ../sysdeps/generic/abort.c:88
#3  0x401cf6ce in g_logv (log_domain=0x401587c6 "Gtk", 
log_level=G_LOG_LEVEL_WARNING, 
    format=0x401744a0 "invalid cast from `%s' to `%s'", args1=0xbffff58c) 
at gmessages.c:391
#4  0x401cf76f in g_log (log_domain=0x401587c6 "Gtk", 
log_level=G_LOG_LEVEL_WARNING, 
    format=0x401744a0 "invalid cast from `%s' to `%s'") at gmessages.c:408
#5  0x40140d14 in gtk_type_check_object_cast (type_object=0x856da70, 
cast_type=45845)
    at gtktypeutils.c:642
#6  0x08125115 in EV_UnixToolbar::refreshToolbar (this=0x856de68, 
pView=0x85b2868, mask=65535)
    at ev_UnixToolbar.cpp:925
#7  0x08124be7 in EV_UnixToolbar::bindListenerToView (this=0x856de68, 
pView=0x85b2868)
    at ev_UnixToolbar.cpp:798
#8  0x080d7a2a in AP_UnixFrame::_showDocument (this=0x8512a18, iZoom=100) 
at ap_UnixFrame.cpp:179
#9  0x080d8ed1 in AP_UnixFrame::loadDocument (this=0x8512a18, 
szFilename=0x0, ieft=0, 
    createNew=false) at ap_UnixFrame.cpp:624
#10 0x080d8f5f in AP_UnixFrame::loadDocument (this=0x8512a18, 
szFilename=0x0, ieft=0)
    at ap_UnixFrame.cpp:629
#11 0x080d7126 in AP_UnixApp::parseCommandLine (this=0x849e288) at 
ap_UnixApp.cpp:1582
#12 0x080d6763 in AP_UnixApp::main (szAppName=0x834117b "AbiWord", argc=3, 
argv=0xbffff994)
    at ap_UnixApp.cpp:1337
#13 0x080d363e in main (argc=3, argv=0xbffff994) at UnixMain.cpp:32
#14 0x40371306 in __libc_start_main (main=0x80d35e0 <main>, argc=3, 
ubp_av=0xbffff994, 
    init=0x80d0fac <_init>, fini=0x8341130 <_fini>, rtld_fini=0x4000d2dc 
<_dl_fini>, 
    stack_end=0xbffff98c) at ../sysdeps/generic/libc-start.c:129

(gdb) up 6
#6  0x08125115 in EV_UnixToolbar::refreshToolbar (this=0x856de68, 
pView=0x85b2868, mask=65535)
    at ev_UnixToolbar.cpp:925
925                                             GtkCombo * item = 
GTK_COMBO(wd->m_widget);
(gdb) l
920                     {
921                                             bool bGrayed = 
EV_TIS_ShouldBeGray(tis);
922                                             
923                                             _wd * wd = (_wd *) 
m_vecToolbarWidgets.getNthItem(k);
924                                             UT_ASSERT(wd);
925                                             GtkCombo * item = 
GTK_COMBO(wd->m_widget);
926                                             UT_ASSERT(item);
927                                             
gtk_widget_set_sensitive(GTK_WIDGET(item), !bGrayed);   // Disable/enable 
toolbar item
928                     }
929                                     break;

The folowing patch fixes the warning.  It eliminates the intermediate step 
of converting the widget to GtkCombo.  Of course, if you want checks that 
only certaing widgets can happen at this point, then a case statement 
should be used, like the one above in the same function.

=========================================
--- src/af/ev/unix/ev_UnixToolbar.cpp
+++ src/af/ev/unix/ev_UnixToolbar.cpp
@@ -922,9 +922,8 @@
                                        
                                        _wd * wd = (_wd *) 
m_vecToolbarWidgets.getNthItem(k);
                                        UT_ASSERT(wd);
-                                       GtkCombo * item = GTK_COMBO(wd->m_widget);
-                                       UT_ASSERT(item);
-                                       gtk_widget_set_sensitive(GTK_WIDGET(item), 
!bGrayed);   // Disable/enable toolbar item
+                                       UT_ASSERT(wd->m_widget);
+                                       
+gtk_widget_set_sensitive(GTK_WIDGET(wd->m_widget), !bGrayed);   // Disable/enable 
+toolbar item
                 }
                                break;
 
=========================================

-- 
Regards,
Pavel Roskin


Reply via email to