I use a goocanvas and use signals for mouse events connected to some graphical 
items. If I use a dialog from a signal handler, all signals are broken after 
closing the dialog. Is this a bug of gtkmm/goocanvas or is this some kind of 
misuse in my program?

The wrong behavior is:

You can click somewhere in the canvas area, nothing is happen which is correct. 
If you click on the circle the signal handler starts the dialog which is also 
expected. After closing the dialog ( OK button ) you can click somewhere on the 
canvas and the signal handler is called which is wrong.

In my real program the signal handlers are sometimes never called and sometimes 
called on wrong areas and so on. A bit strange behavior. I hope someone can 
find the problem.

Thanks
 Klaus




#include <gtkmm.h>
#include <goocanvasmm.h>
#include <sigc++/sigc++.h>

bool ShowDialog( const Glib::RefPtr<Goocanvas::Item>& item, GdkEventButton* ev) 
{
    enum { OK };
    Gtk::Dialog dialog;
    dialog.add_button( Gtk::Stock::OK, OK);
    dialog.show_all_children();
    dialog.run();
    return false;
}

int main(int argc, char* argv[])
{
    Gtk::Main app(&argc, &argv);
    Goocanvas::init("example", "0.1", argc, argv);
    Gtk::Window win;

    Goocanvas::Canvas m_canvas;
    m_canvas.set_size_request(640, 480);
    m_canvas.set_bounds(0, 0, 800, 800);
    Glib::RefPtr<Goocanvas::Item> root = m_canvas.get_root_item();

    Glib::RefPtr<Goocanvas::Ellipse> outer = Goocanvas::Ellipse::create( 
100,100,20,20);
    outer->property_line_width() = 5;
    outer->property_stroke_color() = "red";
    outer->property_fill_color()="blue";
    root->add_child( outer );

    sigc::connection conn2= outer->signal_button_press_event().connect( 
sigc::ptr_fun(&ShowDialog));

    win.add(m_canvas);
    win.show_all_children();

    Gtk::Main::run(win);
    return 0;
}
_______________________________________________
gtkmm-list mailing list
gtkmm-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtkmm-list

Reply via email to