Re: Redundant code in gtk_propagate_event()
- From: "Padraig O'Briain" <Padraig Obriain Sun COM>
- To: otaylor redhat com
- Cc: gtk-devel-list gnome org
- Subject: Re: Redundant code in gtk_propagate_event()
- Date: Thu, 4 Oct 2001 14:32:37 +0100 (BST)
I had been assuming that if the event was not handled, i.e. gtk_widget_event()
returned false, then no change would have occurred.
Thanks for your patience.
Padraig
>
> "Padraig O'Briain" <Padraig Obriain Sun COM> writes:
>
> > The code is gtk_prtopagate_event() currently is as below. What I was
proposing
> > was to remove the second call to gtk_widget_get_toplevel().
>
> Oh, misread the patch. The second gtk_widget_get_toplevel()
> is not at all redundant. It's there because
>
> a) we don't keep a reference on the 'window' widget so
> it might have been destroyed out from under us
> in the call to gtk_widget_event()
>
> b) 'window' might no longer be the toplevel widget for the widget
> even if it still exists.
>
> Regards,
> Owen
>
> > ------------- Begin Included Message -------------
> >
> > GtkWidget *window;
> >
> > window = gtk_widget_get_toplevel (widget);
> > if (window && GTK_IS_WINDOW (window))
> > {
> > /* If there is a grab within the window, give the grab widget
> > * a first crack at the key event
> > */
> > if (widget != window && GTK_WIDGET_HAS_GRAB (widget))
> > handled_event = gtk_widget_event (widget, event);
> >
> > if (!handled_event)
> > {
> > window = gtk_widget_get_toplevel (widget);
> > if (window && GTK_IS_WINDOW (window))
> > {
> > if (GTK_WIDGET_IS_SENSITIVE (window))
> > gtk_widget_event (window, event);
> > }
> > }
> >
> > handled_event = TRUE; /* don't send to widget */
> > }
> >
> > ------------- End Included Message -------------
> >
> > >
> > > Since get_toplevel() never returns NULL for valid arguments;
> > > but the GTK_IS_WINDOW() check is needed; in various
> > > pathological cases you can have widgets that receive events
> > > where the toplevel widget is not GtkWindow. Those would
> > > mostly be:
> > >
> > > - Someone called gtk_propagate_event() directly.
> > > - A widget was force-realized via gtk_widget_realize()
> > > while anchored.
> > >
> > > Both of those are programmer errors .... but still, I think
> > > it's worth having this check to get a bit of extra safety.
> > >
> > > Regards,
> > > Owen
>
> _______________________________________________
> gtk-devel-list mailing list
> gtk-devel-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtk-devel-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]