diff --git a/fluid/Fl_Menu_Type.cxx b/fluid/Fl_Menu_Type.cxx index d63e15962..2bca9c59f 100644 --- a/fluid/Fl_Menu_Type.cxx +++ b/fluid/Fl_Menu_Type.cxx @@ -211,10 +211,14 @@ void Fl_Menu_Item_Type::write_static() { write_c("\n}\n"); if (k) { write_c("void %s::%s(Fl_Menu_* o, %s v) {\n", k, cn, ut); - write_c(" ((%s*)(o->", k); + write_c(" ((%s*)(o", k); Fl_Type* t = parent; while (t->is_menu_item()) t = t->parent; - for (t = t->parent; t && t->is_widget() && !is_class(); t = t->parent) write_c("parent()->"); - write_c("user_data()))->%s_i(o,v);\n}\n", cn); + Fl_Type *q = 0; + for (t = t->parent; t && t->is_widget() && !is_class(); q = t, t = t->parent) + write_c("->parent()"); + if (!q || strcmp(q->type_name(), "widget_class")) + write_c("->user_data()"); + write_c("))->%s_i(o,v);\n}\n", cn); } } if (image) {