Hello,
I have a class that isn't derived from any Gtk classes. It does,
however, have member functions that will pop up Gtk windows, and
member functions that will handle callbacks from those windows.
The problem is that the "SigC::slot(class, &member)" function seems
to require a class who's derived from Gtk. I can't get the class to
compile unless I force my class to be a subclass of a Gtk class.
My question is: How do I get this class to compile? Is subclassing
"Gtk::Base" the safe/smart/insane thing to do?
Below is a tiny, (non-functional), pedantic example.
Any insight would be appreciated.
This is attached to an existing project which uses Gtkmm 1.2.8. I can't
switch to Gtkmm 2.0.
Dale
dwiles buffalo veridian com
SHELL> g++ -DWORK -g -Wall `gtkmm-config --cflags` -c -o foo.o foo.cc
** All is well **
SHELL> g++ -g -Wall `gtkmm-config --cflags` -c -o foo.o foo.cc
/usr/include/sigc++-1.0/sigc++/object_slot.h: In function `static struct SigC::SlotData * SigC::ObjectSlot0_<void,doesnt>::create(doesnt *, void (doesnt::*)())':
/usr/include/sigc++-1.0/sigc++/object_slot.h:121: instantiated from `SigC::slot<void, doesnt, doesnt>(doesnt *const &, void (doesnt::*)())'
foo.cc:18: instantiated from here
/usr/include/sigc++-1.0/sigc++/object_slot.h:67: no matching function for call to `doesnt::register_data (SigC::ScopeNode *)'
---------------------------------foo.cc--------------------------------------
#include <gtk--/button.h>
#ifdef WORK
// Compiles
class compiles : public Gtk::Base {
public:
void butt() {
Gtk::Button *button_remove = manage(new Gtk::Button("Works"));
button_remove->clicked.connect(SigC::slot(this, &compiles::butt));
}
};
#else
// Doesn't compile
class doesnt {
public:
void butt() {
Gtk::Button *button_remove = manage(new Gtk::Button("Nope"));
button_remove->clicked.connect(SigC::slot(this, &doesnt::butt));
}
};
#endif
int
main(int argc, char *argv[])
{
return 0;
}
Attachment:
pgp0zxCpBUEfV.pgp
Description: PGP signature