Hi Everyone, I'm trying to implement a custom widget. A particular "technique" (read: ugly trick) I use results in a segfault. If someone could run the test program and confirm the behaviour I'd be very grateful, let alone take a look a the sources and explain me what's going on... I suspect the culprit is gtk+ itself (2.10.14 here) and not the bingindgs, but well... What I'm trying to achieve is: - right click on a button, a popup menu shows. - choose "Modify" from the menu, the button changes itself in an Gtk2::Entry - The user modifies the text - if he presses Escape, changes are discarded - if he presses Enter, changes are confirmed. The widget becomes a button again, with a modified title. This is very similar to what we are used to do with graphical file managers, when we rename a file in a TreeView... Up till now everything works as I expect. Problems arise when I try to make the "changes confirmed" action happen when the user clicks "outside" the widget. The right way to do that, I guess, would be a pointer grab. But without going to that lenght, I planned to chain the Entry's "focus-out" event. What happens is: - Choose modify, type some text, click on anything that can actually grab the focus (i.e.: the quit button): OK - As above, but press ESC to leave the entry: segfault - As above, but click on another NameKey widget (it can't take the focus because I hijack left button clicks) : segfault Code stops at line 93 of NameKey.pm, right in the focus-out handler. Perhaps when the event gets delivered, I already removed the widget... The widget subclasses Gtk2::Bin, while I'd have preferred to derive from Gtk2::Container, and hide/show button/entry as needed (right now, instead i add/remove them on the fly). Thanks in advance for your time, ciao, -- Giuliano
Attachment:
NameKey_test.tar.gz
Description: Binary data