Invalid cast from `GtkButton' to `GtkCombo'


Subject: Invalid cast from `GtkButton' to `GtkCombo'
From: Pavel Roskin (proski@gnu.org)
Date: Mon Jan 28 2002 - 08:33:28 CST


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



This archive was generated by hypermail 2b25 : Mon Jan 28 2002 - 08:33:34 CST