Re: Problems with expose_event->region patch
- From: Owen Taylor <otaylor redhat com>
- To: gtk-devel-list gnome org
- Subject: Re: Problems with expose_event->region patch
- Date: 08 Mar 2001 16:19:36 -0500
Tim Janik <timj gtk org> writes:
> On 8 Mar 2001, Owen Taylor wrote:
>
> > > + **/
> > > +void
> > > +gtk_container_propagate_expose (GtkContainer *container,
> > > + GtkWidget *child,
> > > + GdkEventExpose *event)
> > > +{
> > > + GdkEventExpose child_event;
> > > +
> > > + g_return_if_fail (GTK_IS_CONTAINER (container));
> > > + g_return_if_fail (GTK_IS_WIDGET (child));
> > > + g_return_if_fail (event != NULL);
> > > +
> > > + g_assert (child->parent == GTK_WIDGET (container));
> > >
> > > + if (GTK_WIDGET_DRAWABLE (child) &&
> > > + GTK_WIDGET_NO_WINDOW (child))
> >
> > To handle containers with multiple windows, you should check to
> > see if event->window == widget->window.
>
> eh? i think he should rather check for the window that is set
> as parent_window for children of the container instead of
> widget->window (assuming this is the portion where he propagates
> to NO_WINDOW children).
For NO_WINDOW widgets, gtk_widget_get_parent_window (widget) === widget->window.
No?
> > > +/**
> > > + * gtk_widget_send_expose:
> > > + * @widget: a #GtkWidget
> > > + * @event: a expose #GdkEvent
> > > + *
> > > + * Very rarely-used function. This function is used to emit
> > > + * an expose event signals on a widget. This function is not
> > > + * normally used directly. The only time it is used is when
> > > + * propagating an expose event to a child NO_WINDOW widget, and
> > > + * that is normally done using gtk_container_propagate_expose.
> > > + *
> > > + * If you just want to synthesize an expose event, use
> > > + * gdk_window_invalidate_rect() to invalidate a region of the
> > > + * window.
> >
> > If you want to force an area of a window to be redrawn,
> > use gdk_window_invalidate_rect() or gdk_window_invalidate_region().
> > To cause the redraw to be done immediately, follow that call
> > with a call to gdk_window_procss_updates().
>
> urm, just looked at that function to see what it does, i'd actually
> have it expected to queue an expose event, but instead you
> also dispatch that right away through gdk_event_func (gtk_main_do_event).
> since the caller might be anywhere in a deep callstack i'm not so sure
> this is a good idea...
> why couldn't that simply be:
> gdk_window_queue_updates();
> while (g_main_pending ())
> g_main_iteration (FALSE);
The idea is that you want to update a window _without_ running
the main loop.
Did you also worry about the caller being in a deep call stack
when they called gtk_widget_draw(widget)?
Owen
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]