Re: where is error?
- From: Paul Davis <pjdavis engineering uiowa edu>
- To: Paul Pogonyshev <pogonyshev gmx net>
- Cc: Murray Cumming <murrayc murrayc com>, gtkmm-list gnome org
- Subject: Re: where is error?
- Date: Wed, 09 Aug 2006 19:44:06 -0500
I've been following this thread a bit and I did some checking. I may be
way off base here but after doing some checking I think that RadioGroup
wasn't meant to be overridden.
RadioAction::RadioAction(Group& group, const Glib::ustring& name, const
Gtk::StockID& stock_id, const Glib::ustring& label, const Glib::ustring&
tooltip)
:
Glib::ObjectBase(0), //Mark this class as gtkmmproc-generated, rather
than a custom class, to allow vfunc optimisations.
I found this bit in the constructor in radioaction.cc line 35 of version
2.6.something
I have very little experience with the gtk/gnome underpinnings but this
was a red flag so I thought I'd mention it.
It is quite weird.
...
A thought occurred to me. I dunno why or how but this works:
The important part seems to be theL
Glib::ObjectBase(0)
Perhaps Murray can indulge us all. It seems like one of those C++
gotchyas from where I'm sitting. Granted thats post-alcohol, but still...
#include <gtkmm.h>
class Radio_action : public Gtk::RadioAction
{
public:
Radio_action (Gtk::RadioButtonGroup& group)
:
Glib::ObjectBase(0),
Gtk::RadioAction ()
{
set_group( group ) ;
}
static
Glib::RefPtr<Gtk::RadioAction> Radio_action::create(
Gtk::RadioButtonGroup& group)
{
return Glib::RefPtr<Radio_action>( new Radio_action(group) );
}
};
int
main (int argc, char** argv)
{
Gtk::Main main (argc, argv);
Gtk::RadioButtonGroup test_group;
#if 1
// This segfaults.
Radio_action::create (test_group);
#else
Gtk::RadioAction::create (test_group, "test");
#endif
return 0;
}
I sure could go into whether this is a library or a user thing. But I
have got to say, reading the source sure helps quite a bit.
Paul Pogonyshev wrote:
Murray Cumming wrote:
It should of course be
Glib::RefPtr<Radio_action> Radio_action::create(RadioActionGroup& group)
{
return Glib::RefPtr<Radio_action>( new Radio_action(group) );
}
Again, I have no idea whether this will stop your segfault.
It will not, since it uses the same constructor, only with RefPtr wrapped
over the constructed object. I actually _checked_ this and experienced
the same crash, as expected.
Can anyone check if this happens with recent Gtkmm too? Can anyone
understand (and fix) the reason of the crash?
(I might have not been nice, but it's not like I asked the list when I
first saw the crash. I encountered it in a real program, pondered for a
while and created small test below. I'm pretty sure it's a problem/bug of
Gtkmm, but cannot check with recent versions.)
Paul
#include <glibmm/refptr.h>
#include <gtkmm/main.h>
#include <gtkmm/radioaction.h>
#include <gtkmm/stock.h>
namespace
{
class Radio_action : public Gtk::RadioAction
{
public:
Radio_action (Group& group)
: Gtk::RadioAction (group, "test", Gtk::StockID (), "", "")
{ }
static Glib::RefPtr <Radio_action>
create (Group& group)
{
return Glib::RefPtr <Radio_action> (new Radio_action (group));
}
};
}
int
main (int argc, char** argv)
{
Gtk::Main main (argc, argv);
Radio_action::Group test_group;
#if 1
// This segfaults.
Radio_action::create (test_group);
#else
Gtk::RadioAction::create (test_group, "test");
#endif
return 0;
}
_______________________________________________
gtkmm-list mailing list
gtkmm-list gnome org
http://mail.gnome.org/mailman/listinfo/gtkmm-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]