[gtkmm] Segfault with gtkmm/libglademm



Hi!

I have a quite simple program trying to create a dialog with help of
gtkmm and libglademm. In the response handler I want to delete the
'Dlg' object, since it is no longer needed.

I have reported this also in bugzilla (bug#87912), but it seems
bugzilla doesn't like me and doesn't accept my attachments, so i'm
posting here.

I have attached the program, the used glade file and a gdb backtrace.

/* Compile with: 
 * g++ -g -o test test.cc `pkg-config --cflags --libs libglademm-2.0 gtkmm-2.0`
 */
#include <iostream>

#include <libglademm.h>

#include <gtkmm/main.h>
#include <gtkmm/dialog.h>
#include <gtkmm/button.h>

using namespace SigC;
using namespace std;

class Dlg : public Object
{
  public:
    Dlg() {
      Glib::RefPtr<Gnome::Glade::Xml> glade_xml = 
        Gnome::Glade::Xml::create("test.glade", "test_dialog");
  
      glade_xml->get_widget("test_dialog", dlg_);
      dlg_->signal_response().connect(slot(*this, &Dlg::response));
      
      Gtk::Button *btn;
      glade_xml->get_widget("button", btn);
      btn->signal_clicked().connect(slot(*this, &Dlg::button_clicked));
    }
    void show() {
      dlg_->show_all();
    }
    void response(int id) {
      delete this;
    }
    void button_clicked() {
      cout << "button_clicked" << endl;
    }
  private:
    Gtk::Dialog *dlg_;
};

int main(int argc, char *argv[])
{
  Gtk::Main gtk_main(argc, argv);
  
  Dlg *dlg = new Dlg;
  dlg->show();
  
  gtk_main.run();
}
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd";>

<glade-interface>

<widget class="GtkDialog" id="test_dialog">
  <property name="visible">True</property>
  <property name="title" translatable="yes">Test</property>
  <property name="type">GTK_WINDOW_TOPLEVEL</property>
  <property name="window_position">GTK_WIN_POS_NONE</property>
  <property name="modal">False</property>
  <property name="resizable">True</property>
  <property name="destroy_with_parent">False</property>
  <property name="has_separator">True</property>

  <child internal-child="vbox">
    <widget class="GtkVBox" id="dialog-vbox1">
      <property name="border_width">2</property>
      <property name="visible">True</property>
      <property name="homogeneous">False</property>
      <property name="spacing">0</property>

      <child internal-child="action_area">
	<widget class="GtkHButtonBox" id="dialog-action_area1">
	  <property name="border_width">5</property>
	  <property name="visible">True</property>
	  <property name="layout_style">GTK_BUTTONBOX_END</property>
	  <property name="spacing">10</property>

	  <child>
	    <widget class="GtkButton" id="okbutton1">
	      <property name="visible">True</property>
	      <property name="can_default">True</property>
	      <property name="can_focus">True</property>
	      <property name="label">gtk-ok</property>
	      <property name="use_stock">True</property>
	      <property name="relief">GTK_RELIEF_NORMAL</property>
	      <property name="response_id">-5</property>
	    </widget>
	  </child>
	</widget>
	<packing>
	  <property name="padding">0</property>
	  <property name="expand">False</property>
	  <property name="fill">True</property>
	  <property name="pack_type">GTK_PACK_END</property>
	</packing>
      </child>

      <child>
	<widget class="GtkVBox" id="vbox1">
	  <property name="visible">True</property>
	  <property name="homogeneous">False</property>
	  <property name="spacing">0</property>

	  <child>
	    <widget class="GtkLabel" id="label1">
	      <property name="visible">True</property>
	      <property name="label" translatable="yes">Some text</property>
	      <property name="use_underline">False</property>
	      <property name="use_markup">False</property>
	      <property name="justify">GTK_JUSTIFY_LEFT</property>
	      <property name="wrap">False</property>
	      <property name="selectable">False</property>
	      <property name="xalign">0.5</property>
	      <property name="yalign">0.5</property>
	      <property name="xpad">0</property>
	      <property name="ypad">0</property>
	    </widget>
	    <packing>
	      <property name="padding">0</property>
	      <property name="expand">False</property>
	      <property name="fill">False</property>
	    </packing>
	  </child>

	  <child>
	    <widget class="GtkButton" id="button">
	      <property name="visible">True</property>
	      <property name="can_focus">True</property>
	      <property name="label" translatable="yes">ClickMe!</property>
	      <property name="use_underline">True</property>
	      <property name="relief">GTK_RELIEF_NORMAL</property>
	    </widget>
	    <packing>
	      <property name="padding">0</property>
	      <property name="expand">False</property>
	      <property name="fill">False</property>
	    </packing>
	  </child>
	</widget>
	<packing>
	  <property name="padding">0</property>
	  <property name="expand">False</property>
	  <property name="fill">False</property>
	</packing>
      </child>
    </widget>
  </child>
</widget>

</glade-interface>
Core was generated by `./test'.
Program terminated with signal 11, Segmentation fault.
#0  0x4079a878 in malloc () from /lib/libc.so.6
#0  0x4079a878 in malloc () from /lib/libc.so.6
#1  0x40799f54 in malloc () from /lib/libc.so.6
#2  0x40682a77 in g_malloc () from /usr/lib/libglib-2.0.so.0
#3  0x40564b4a in gdk_region_rectangle () from /usr/lib/libgdk-x11-2.0.so.0
#4  0x405805bf in _gdk_window_impl_get_type ()
   from /usr/lib/libgdk-x11-2.0.so.0
#5  0x405572ae in gdk_drawable_get_visible_region ()
   from /usr/lib/libgdk-x11-2.0.so.0
#6  0x4056814d in gdk_window_get_internal_paint_info ()
   from /usr/lib/libgdk-x11-2.0.so.0
#7  0x405572ae in gdk_drawable_get_visible_region ()
   from /usr/lib/libgdk-x11-2.0.so.0
#8  0x4056979d in gdk_window_invalidate_maybe_recurse ()
   from /usr/lib/libgdk-x11-2.0.so.0
#9  0x4043a685 in gtk_widget_get_child_requisition ()
   from /usr/lib/libgtk-x11-2.0.so.0
#10 0x4043a456 in gtk_widget_queue_resize () from /usr/lib/libgtk-x11-2.0.so.0
#11 0x4031a054 in _gtk_button_set_depressed ()
   from /usr/lib/libgtk-x11-2.0.so.0
#12 0x4031a0bf in _gtk_button_set_depressed ()
   from /usr/lib/libgtk-x11-2.0.so.0
#13 0x40319aea in _gtk_button_paint () from /usr/lib/libgtk-x11-2.0.so.0
#14 0x401a893d in Gtk::Button::on_released () from /usr/lib/libgtkmm-1.3.so.11
#15 0x401a7a58 in Gtk::Button_Class::released_callback ()
   from /usr/lib/libgtkmm-1.3.so.11
#16 0x4063cfd6 in g_cclosure_marshal_VOID__VOID ()
   from /usr/lib/libgobject-2.0.so.0
#17 0x40628385 in g_cclosure_new_swap () from /usr/lib/libgobject-2.0.so.0
#18 0x40627fab in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#19 0x4063bc8f in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0
#20 0x4063a9ea in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#21 0x403bbbdf in gtk_signal_emit () from /usr/lib/libgtk-x11-2.0.so.0
#22 0x40318dc6 in gtk_button_released () from /usr/lib/libgtk-x11-2.0.so.0
#23 0x4031997f in _gtk_button_paint () from /usr/lib/libgtk-x11-2.0.so.0
#24 0x40214560 in Gtk::Widget::on_button_release_event ()
   from /usr/lib/libgtkmm-1.3.so.11
#25 0x4020dd09 in Gtk::Widget_Class::button_release_event_callback ()
   from /usr/lib/libgtkmm-1.3.so.11
#26 0x403869e2 in _gtk_marshal_BOOLEAN__BOXED ()
   from /usr/lib/libgtk-x11-2.0.so.0
#27 0x40628385 in g_cclosure_new_swap () from /usr/lib/libgobject-2.0.so.0
#28 0x40627fab in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#29 0x4063c5ca in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0
#30 0x4063aa57 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#31 0x403bbbdf in gtk_signal_emit () from /usr/lib/libgtk-x11-2.0.so.0
#32 0x4043bafd in gtk_widget_send_expose () from /usr/lib/libgtk-x11-2.0.so.0
#33 0x4043b760 in gtk_widget_event () from /usr/lib/libgtk-x11-2.0.so.0
#34 0x40386893 in gtk_propagate_event () from /usr/lib/libgtk-x11-2.0.so.0
#35 0x4038589e in gtk_main_do_event () from /usr/lib/libgtk-x11-2.0.so.0
#36 0x4057500c in _gdk_events_queue () from /usr/lib/libgdk-x11-2.0.so.0
#37 0x4067da09 in g_get_current_time () from /usr/lib/libglib-2.0.so.0
#38 0x4067e827 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#39 0x4067ec03 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#40 0x4067f2df in g_main_loop_run () from /usr/lib/libglib-2.0.so.0
#41 0x40384faf in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#42 0x401ca734 in Gtk::Main::run_impl () from /usr/lib/libgtkmm-1.3.so.11
#43 0x401ca493 in Gtk::Main::run () from /usr/lib/libgtkmm-1.3.so.11
#44 0x0804a5b8 in main (argc=1, argv=0xbffff814) at test.cc:49
Regards, Andy
-- 
Andreas Rottmann         | Rotty IRC | 118634484 ICQ      | a rottmann gmx at
http://www.8ung.at/rotty | GnuPG Key: http://www.8ung.at/rotty/gpg.asc
Fingerprint              | DFB4 4EB4 78A4 5EEE 6219  F228 F92F CFC5 01FD 5B62


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]