On Fri, Sep 30, 2005 at 11:04:54 -0400, muppet wrote:
Stephan Brunner said:I am not able to enter any 'u' into the Entry.The reason this should work is, that the active widget gets the input. If the widget does not handle it, it passes it on to it's parent. And so on up to the window, which handles the accels.Not quite; key events are delivered first to the toplevel window (an X quirk), and propagated from there to child widgets. gtk_window_key_press_event() looks like this:
Hm. I thought that it was saner than this. But yes, actually the toplevel window is above it's children, not below in X.
static gint gtk_window_key_press_event (GtkWidget *widget, GdkEventKey *event) { GtkWindow *window = GTK_WINDOW (widget); gboolean handled = FALSE; /* handle mnemonics and accelerators */ if (!handled) handled = gtk_window_activate_key (window, event); /* handle focus widget key events */ if (!handled) handled = gtk_window_propagate_key_event (window, event); /* Chain up, invokes binding set */ if (!handled) handled = GTK_WIDGET_CLASS (parent_class)->key_press_event (widget, event); return handled; } Which means that window-wide mnemonics and accelerators take precedence over per-widget keystrokes. And, if you think about it, it *has* to work that way, or something like a TextView would eat all of the keys that are supposed to be menu accelerators.
No, it does not. I would even call it a bug. The event signal returns a boolean, whether it handled the keypress or not. The logic should be reversed. It should first propagate the event to the children and only handle it if they did not handle it already. It would require each widget to truthfuly return whether it handled the keypress, but it would behave saner. By the way, how does it handle the tab switching? If you have an entry in the tab order, you can tab into it, but you can't tab out, as the tab gets inserted. That means that the container handles the tab only if it's child did not. Or does the child handle it? That would sound mad. -- Jan 'Bulb' Hudec <bulb ucw cz>
Attachment:
signature.asc
Description: Digital signature