Commit e7d4a7f9 authored by Alexander Larsson's avatar Alexander Larsson Committed by Alexander Larsson

Document expose event->region change and that gtk_widget_event doesn't

2001-03-09  Alexander Larsson  <alexl@redhat.com>

	* docs/Changes-2.0.txt:
	Document expose event->region change and that gtk_widget_event
	doesn't allow passing expose events.

	* gdk/gdkevents.h:
	Add region to expose event.

	* gdk/gdkevents.c:
	Handle event->region in gdk_event_copy() and gdk_event_free().

	* gdk/gdkwindow.c (gdk_window_process_updates_internal):
	Generate expose_event->region when creating expose events.

	* gdk/x11/gdkevents-x11.c:
	Generate expose events with regions when translating X events.

	* gtk/gtkcontainer.[ch]:
	Default expose handler that propagates expose events to NO_WINDOW
	children. New function gtk_container_propagate_expose()

	* gtk/gtkwidget.[ch]:
	Moved gtk_widget_event implementation to gtk_widget_event_internal.
	gtk_widget_event calls gtk_widget_event_internal but doesn't allow
	expose events. New function gtk_widget_send_expose() to send expose
	events. New function gtk_widget_region_intersect() to calculate
	window/region intersections.

	* gtk/gtkmain.c (gtk_main_do_event):
	Use gdk_window_begin_paint_region() instead of gdk_window_begin_paint_rect().
	Use gtk_widget_send_expose() to send expose events.

	* gtk/gtkbin.c:
	* gtk/gtkbox.c:
	* gtk/gtkfixed.c:
	* gtk/gtkimagemenuitem.c:
	* gtk/gtklist.c:
	* gtk/gtkpacker.c:
	* gtk/gtktable.c:
	* gtk/gtktree.c:
	Remove expose handler, using the default container implementation
	instead.

	* gtk/gtkbutton.c:
	* gtk/gtkcheckbutton.c:
	* gtk/gtkeventbox.c:
	* gtk/gtkfixed.c:
	* gtk/gtkhandlebox.c:
	* gtk/gtklayout.c:
	* gtk/gtklistitem.c:
	* gtk/gtkmenu.c:
	* gtk/gtkmenubar.c:
	* gtk/gtkmenuitem.c:
	* gtk/gtknotebook.c:
	* gtk/gtkoptionmenu.c:
	* gtk/gtkpaned.c:
	* gtk/gtkscrolledwindow.c:
	* gtk/gtktogglebutton.c:
	* gtk/gtktoolbar.c:
	* gtk/gtktreeitem.c:
	* gtk/gtkviewport.c:
	Chain expose handler to parent class handler. Use
	gtk_container_propagate_expose() to propagate exposes.

	* gtk/gtkclist.c (check_exposures):
	* gtk/gtktext.c (process_exposes):
	Use gtk_widget_send_expose instead of gtk_widget_event.
parent 8f35f030
2001-03-09 Alexander Larsson <alexl@redhat.com>
* docs/Changes-2.0.txt:
Document expose event->region change and that gtk_widget_event
doesn't allow passing expose events.
* gdk/gdkevents.h:
Add region to expose event.
* gdk/gdkevents.c:
Handle event->region in gdk_event_copy() and gdk_event_free().
* gdk/gdkwindow.c (gdk_window_process_updates_internal):
Generate expose_event->region when creating expose events.
* gdk/x11/gdkevents-x11.c:
Generate expose events with regions when translating X events.
* gtk/gtkcontainer.[ch]:
Default expose handler that propagates expose events to NO_WINDOW
children. New function gtk_container_propagate_expose()
* gtk/gtkmain.c (gtk_main_do_event):
Use gdk_window_begin_paint_region() instead of gdk_window_begin_paint_rect().
Use gtk_widget_send_expose() to send expose events.
* gtk/gtkbin.c:
* gtk/gtkbox.c:
* gtk/gtkfixed.c:
* gtk/gtkimagemenuitem.c:
* gtk/gtklist.c:
* gtk/gtkpacker.c:
* gtk/gtktable.c:
* gtk/gtktree.c:
Remove expose handler, using the default container implementation
instead.
* gtk/gtkbutton.c:
* gtk/gtkcheckbutton.c:
* gtk/gtkeventbox.c:
* gtk/gtkfixed.c:
* gtk/gtkhandlebox.c:
* gtk/gtklayout.c:
* gtk/gtklistitem.c:
* gtk/gtkmenu.c:
* gtk/gtkmenubar.c:
* gtk/gtkmenuitem.c:
* gtk/gtknotebook.c:
* gtk/gtkoptionmenu.c:
* gtk/gtkpaned.c:
* gtk/gtkscrolledwindow.c:
* gtk/gtktogglebutton.c:
* gtk/gtktoolbar.c:
* gtk/gtktreeitem.c:
Chain expose handler to parent class handler. Use
gtk_container_propagate_expose() to propagate exposes.
* gtk/gtkclist.c (check_exposures):
* gtk/gtktext.c (process_exposes):
Use gtk_widget_send_expose instead of gtk_widget_event.
Thu Mar 8 19:40:28 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_destroy): Add destroy function.
......
2001-03-09 Alexander Larsson <alexl@redhat.com>
* docs/Changes-2.0.txt:
Document expose event->region change and that gtk_widget_event
doesn't allow passing expose events.
* gdk/gdkevents.h:
Add region to expose event.
* gdk/gdkevents.c:
Handle event->region in gdk_event_copy() and gdk_event_free().
* gdk/gdkwindow.c (gdk_window_process_updates_internal):
Generate expose_event->region when creating expose events.
* gdk/x11/gdkevents-x11.c:
Generate expose events with regions when translating X events.
* gtk/gtkcontainer.[ch]:
Default expose handler that propagates expose events to NO_WINDOW
children. New function gtk_container_propagate_expose()
* gtk/gtkmain.c (gtk_main_do_event):
Use gdk_window_begin_paint_region() instead of gdk_window_begin_paint_rect().
Use gtk_widget_send_expose() to send expose events.
* gtk/gtkbin.c:
* gtk/gtkbox.c:
* gtk/gtkfixed.c:
* gtk/gtkimagemenuitem.c:
* gtk/gtklist.c:
* gtk/gtkpacker.c:
* gtk/gtktable.c:
* gtk/gtktree.c:
Remove expose handler, using the default container implementation
instead.
* gtk/gtkbutton.c:
* gtk/gtkcheckbutton.c:
* gtk/gtkeventbox.c:
* gtk/gtkfixed.c:
* gtk/gtkhandlebox.c:
* gtk/gtklayout.c:
* gtk/gtklistitem.c:
* gtk/gtkmenu.c:
* gtk/gtkmenubar.c:
* gtk/gtkmenuitem.c:
* gtk/gtknotebook.c:
* gtk/gtkoptionmenu.c:
* gtk/gtkpaned.c:
* gtk/gtkscrolledwindow.c:
* gtk/gtktogglebutton.c:
* gtk/gtktoolbar.c:
* gtk/gtktreeitem.c:
Chain expose handler to parent class handler. Use
gtk_container_propagate_expose() to propagate exposes.
* gtk/gtkclist.c (check_exposures):
* gtk/gtktext.c (process_exposes):
Use gtk_widget_send_expose instead of gtk_widget_event.
Thu Mar 8 19:40:28 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_destroy): Add destroy function.
......
2001-03-09 Alexander Larsson <alexl@redhat.com>
* docs/Changes-2.0.txt:
Document expose event->region change and that gtk_widget_event
doesn't allow passing expose events.
* gdk/gdkevents.h:
Add region to expose event.
* gdk/gdkevents.c:
Handle event->region in gdk_event_copy() and gdk_event_free().
* gdk/gdkwindow.c (gdk_window_process_updates_internal):
Generate expose_event->region when creating expose events.
* gdk/x11/gdkevents-x11.c:
Generate expose events with regions when translating X events.
* gtk/gtkcontainer.[ch]:
Default expose handler that propagates expose events to NO_WINDOW
children. New function gtk_container_propagate_expose()
* gtk/gtkmain.c (gtk_main_do_event):
Use gdk_window_begin_paint_region() instead of gdk_window_begin_paint_rect().
Use gtk_widget_send_expose() to send expose events.
* gtk/gtkbin.c:
* gtk/gtkbox.c:
* gtk/gtkfixed.c:
* gtk/gtkimagemenuitem.c:
* gtk/gtklist.c:
* gtk/gtkpacker.c:
* gtk/gtktable.c:
* gtk/gtktree.c:
Remove expose handler, using the default container implementation
instead.
* gtk/gtkbutton.c:
* gtk/gtkcheckbutton.c:
* gtk/gtkeventbox.c:
* gtk/gtkfixed.c:
* gtk/gtkhandlebox.c:
* gtk/gtklayout.c:
* gtk/gtklistitem.c:
* gtk/gtkmenu.c:
* gtk/gtkmenubar.c:
* gtk/gtkmenuitem.c:
* gtk/gtknotebook.c:
* gtk/gtkoptionmenu.c:
* gtk/gtkpaned.c:
* gtk/gtkscrolledwindow.c:
* gtk/gtktogglebutton.c:
* gtk/gtktoolbar.c:
* gtk/gtktreeitem.c:
Chain expose handler to parent class handler. Use
gtk_container_propagate_expose() to propagate exposes.
* gtk/gtkclist.c (check_exposures):
* gtk/gtktext.c (process_exposes):
Use gtk_widget_send_expose instead of gtk_widget_event.
Thu Mar 8 19:40:28 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_destroy): Add destroy function.
......
2001-03-09 Alexander Larsson <alexl@redhat.com>
* docs/Changes-2.0.txt:
Document expose event->region change and that gtk_widget_event
doesn't allow passing expose events.
* gdk/gdkevents.h:
Add region to expose event.
* gdk/gdkevents.c:
Handle event->region in gdk_event_copy() and gdk_event_free().
* gdk/gdkwindow.c (gdk_window_process_updates_internal):
Generate expose_event->region when creating expose events.
* gdk/x11/gdkevents-x11.c:
Generate expose events with regions when translating X events.
* gtk/gtkcontainer.[ch]:
Default expose handler that propagates expose events to NO_WINDOW
children. New function gtk_container_propagate_expose()
* gtk/gtkmain.c (gtk_main_do_event):
Use gdk_window_begin_paint_region() instead of gdk_window_begin_paint_rect().
Use gtk_widget_send_expose() to send expose events.
* gtk/gtkbin.c:
* gtk/gtkbox.c:
* gtk/gtkfixed.c:
* gtk/gtkimagemenuitem.c:
* gtk/gtklist.c:
* gtk/gtkpacker.c:
* gtk/gtktable.c:
* gtk/gtktree.c:
Remove expose handler, using the default container implementation
instead.
* gtk/gtkbutton.c:
* gtk/gtkcheckbutton.c:
* gtk/gtkeventbox.c:
* gtk/gtkfixed.c:
* gtk/gtkhandlebox.c:
* gtk/gtklayout.c:
* gtk/gtklistitem.c:
* gtk/gtkmenu.c:
* gtk/gtkmenubar.c:
* gtk/gtkmenuitem.c:
* gtk/gtknotebook.c:
* gtk/gtkoptionmenu.c:
* gtk/gtkpaned.c:
* gtk/gtkscrolledwindow.c:
* gtk/gtktogglebutton.c:
* gtk/gtktoolbar.c:
* gtk/gtktreeitem.c:
Chain expose handler to parent class handler. Use
gtk_container_propagate_expose() to propagate exposes.
* gtk/gtkclist.c (check_exposures):
* gtk/gtktext.c (process_exposes):
Use gtk_widget_send_expose instead of gtk_widget_event.
Thu Mar 8 19:40:28 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_destroy): Add destroy function.
......
2001-03-09 Alexander Larsson <alexl@redhat.com>
* docs/Changes-2.0.txt:
Document expose event->region change and that gtk_widget_event
doesn't allow passing expose events.
* gdk/gdkevents.h:
Add region to expose event.
* gdk/gdkevents.c:
Handle event->region in gdk_event_copy() and gdk_event_free().
* gdk/gdkwindow.c (gdk_window_process_updates_internal):
Generate expose_event->region when creating expose events.
* gdk/x11/gdkevents-x11.c:
Generate expose events with regions when translating X events.
* gtk/gtkcontainer.[ch]:
Default expose handler that propagates expose events to NO_WINDOW
children. New function gtk_container_propagate_expose()
* gtk/gtkmain.c (gtk_main_do_event):
Use gdk_window_begin_paint_region() instead of gdk_window_begin_paint_rect().
Use gtk_widget_send_expose() to send expose events.
* gtk/gtkbin.c:
* gtk/gtkbox.c:
* gtk/gtkfixed.c:
* gtk/gtkimagemenuitem.c:
* gtk/gtklist.c:
* gtk/gtkpacker.c:
* gtk/gtktable.c:
* gtk/gtktree.c:
Remove expose handler, using the default container implementation
instead.
* gtk/gtkbutton.c:
* gtk/gtkcheckbutton.c:
* gtk/gtkeventbox.c:
* gtk/gtkfixed.c:
* gtk/gtkhandlebox.c:
* gtk/gtklayout.c:
* gtk/gtklistitem.c:
* gtk/gtkmenu.c:
* gtk/gtkmenubar.c:
* gtk/gtkmenuitem.c:
* gtk/gtknotebook.c:
* gtk/gtkoptionmenu.c:
* gtk/gtkpaned.c:
* gtk/gtkscrolledwindow.c:
* gtk/gtktogglebutton.c:
* gtk/gtktoolbar.c:
* gtk/gtktreeitem.c:
Chain expose handler to parent class handler. Use
gtk_container_propagate_expose() to propagate exposes.
* gtk/gtkclist.c (check_exposures):
* gtk/gtktext.c (process_exposes):
Use gtk_widget_send_expose instead of gtk_widget_event.
Thu Mar 8 19:40:28 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_destroy): Add destroy function.
......
2001-03-09 Alexander Larsson <alexl@redhat.com>
* docs/Changes-2.0.txt:
Document expose event->region change and that gtk_widget_event
doesn't allow passing expose events.
* gdk/gdkevents.h:
Add region to expose event.
* gdk/gdkevents.c:
Handle event->region in gdk_event_copy() and gdk_event_free().
* gdk/gdkwindow.c (gdk_window_process_updates_internal):
Generate expose_event->region when creating expose events.
* gdk/x11/gdkevents-x11.c:
Generate expose events with regions when translating X events.
* gtk/gtkcontainer.[ch]:
Default expose handler that propagates expose events to NO_WINDOW
children. New function gtk_container_propagate_expose()
* gtk/gtkmain.c (gtk_main_do_event):
Use gdk_window_begin_paint_region() instead of gdk_window_begin_paint_rect().
Use gtk_widget_send_expose() to send expose events.
* gtk/gtkbin.c:
* gtk/gtkbox.c:
* gtk/gtkfixed.c:
* gtk/gtkimagemenuitem.c:
* gtk/gtklist.c:
* gtk/gtkpacker.c:
* gtk/gtktable.c:
* gtk/gtktree.c:
Remove expose handler, using the default container implementation
instead.
* gtk/gtkbutton.c:
* gtk/gtkcheckbutton.c:
* gtk/gtkeventbox.c:
* gtk/gtkfixed.c:
* gtk/gtkhandlebox.c:
* gtk/gtklayout.c:
* gtk/gtklistitem.c:
* gtk/gtkmenu.c:
* gtk/gtkmenubar.c:
* gtk/gtkmenuitem.c:
* gtk/gtknotebook.c:
* gtk/gtkoptionmenu.c:
* gtk/gtkpaned.c:
* gtk/gtkscrolledwindow.c:
* gtk/gtktogglebutton.c:
* gtk/gtktoolbar.c:
* gtk/gtktreeitem.c:
Chain expose handler to parent class handler. Use
gtk_container_propagate_expose() to propagate exposes.
* gtk/gtkclist.c (check_exposures):
* gtk/gtktext.c (process_exposes):
Use gtk_widget_send_expose instead of gtk_widget_event.
Thu Mar 8 19:40:28 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_destroy): Add destroy function.
......
2001-03-09 Alexander Larsson <alexl@redhat.com>
* docs/Changes-2.0.txt:
Document expose event->region change and that gtk_widget_event
doesn't allow passing expose events.
* gdk/gdkevents.h:
Add region to expose event.
* gdk/gdkevents.c:
Handle event->region in gdk_event_copy() and gdk_event_free().
* gdk/gdkwindow.c (gdk_window_process_updates_internal):
Generate expose_event->region when creating expose events.
* gdk/x11/gdkevents-x11.c:
Generate expose events with regions when translating X events.
* gtk/gtkcontainer.[ch]:
Default expose handler that propagates expose events to NO_WINDOW
children. New function gtk_container_propagate_expose()
* gtk/gtkmain.c (gtk_main_do_event):
Use gdk_window_begin_paint_region() instead of gdk_window_begin_paint_rect().
Use gtk_widget_send_expose() to send expose events.
* gtk/gtkbin.c:
* gtk/gtkbox.c:
* gtk/gtkfixed.c:
* gtk/gtkimagemenuitem.c:
* gtk/gtklist.c:
* gtk/gtkpacker.c:
* gtk/gtktable.c:
* gtk/gtktree.c:
Remove expose handler, using the default container implementation
instead.
* gtk/gtkbutton.c:
* gtk/gtkcheckbutton.c:
* gtk/gtkeventbox.c:
* gtk/gtkfixed.c:
* gtk/gtkhandlebox.c:
* gtk/gtklayout.c:
* gtk/gtklistitem.c:
* gtk/gtkmenu.c:
* gtk/gtkmenubar.c:
* gtk/gtkmenuitem.c:
* gtk/gtknotebook.c:
* gtk/gtkoptionmenu.c:
* gtk/gtkpaned.c:
* gtk/gtkscrolledwindow.c:
* gtk/gtktogglebutton.c:
* gtk/gtktoolbar.c:
* gtk/gtktreeitem.c:
Chain expose handler to parent class handler. Use
gtk_container_propagate_expose() to propagate exposes.
* gtk/gtkclist.c (check_exposures):
* gtk/gtktext.c (process_exposes):
Use gtk_widget_send_expose instead of gtk_widget_event.
Thu Mar 8 19:40:28 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_destroy): Add destroy function.
......
......@@ -279,6 +279,17 @@ Incompatible Changes from GTK+-1.2 to GTK+-2.0:
implementation, since they will already have working expose_event
implementations. The draw method was rarely called in practice
anyway.
* The GdkExposeEvent has a new region field. This can be used instead
of the area field if you want a more exact representation of the
area to update.
* Sending synthetic exposes using gtk_widget_event is no longer allowed.
If you just need an expose call you should use gdk_window_invalidate_rect()
or gdk_window_invalidate_region() instead. For the case of container
widgets that need to propagate expose events to NO_WINDOW children
you can either use gtk_container_propagate_expose(), or chain to the
default container expose handler.
* The draw_default and draw_focus methods/signals on GtkWidget are
gone; simply draw things in your expose handler.
......
......@@ -322,7 +322,11 @@ gdk_event_copy (GdkEvent *event)
gdk_drag_context_ref (event->dnd.context);
break;
default:
case GDK_EXPOSE:
if (event->expose.region)
new_event->expose.region = gdk_region_copy (event->expose.region);
break;
default:
break;
}
......@@ -384,7 +388,12 @@ gdk_event_free (GdkEvent *event)
if (event->button.axes)
g_free (event->button.axes);
break;
case GDK_EXPOSE:
if (event->expose.region)
gdk_region_destroy (event->expose.region);
break;
case GDK_MOTION_NOTIFY:
if (event->motion.axes)
g_free (event->motion.axes);
......
......@@ -215,6 +215,7 @@ struct _GdkEventExpose
GdkWindow *window;
gint8 send_event;
GdkRectangle area;
GdkRegion *region;
gint count; /* If non-zero, how many more events follow. */
};
......
......@@ -1748,6 +1748,8 @@ gdk_window_process_updates_internal (GdkWindow *window)
{
GdkEvent event;
GdkRectangle window_rect;
GdkRegion *expose_region;
GdkRegion *window_region;
gint width, height;
if (debug_updates)
......@@ -1769,16 +1771,28 @@ gdk_window_process_updates_internal (GdkWindow *window)
event.expose.type = GDK_EXPOSE;
event.expose.window = gdk_window_ref (window);
event.expose.count = 0;
gdk_region_get_clipbox (update_area, &event.expose.area);
if (gdk_rectangle_intersect (&event.expose.area, &window_rect, &event.expose.area))
if (save_region)
expose_region = gdk_region_copy (update_area);
else
expose_region = update_area;
window_region = gdk_region_rectangle (&window_rect);
gdk_region_intersect (expose_region,
window_region);
gdk_region_destroy (window_region);
event.expose.region = expose_region;
gdk_region_get_clipbox (expose_region, &event.expose.area);
if (!gdk_region_empty (expose_region))
{
(*gdk_event_func) (&event, gdk_event_data);
}
if (expose_region != update_area)
gdk_region_destroy (expose_region);
gdk_window_unref (window);
}
if (!save_region)
gdk_region_destroy (update_area);
}
......
......@@ -973,6 +973,7 @@ gdk_event_translate (GdkEvent *event,
{
event->expose.type = GDK_EXPOSE;
event->expose.area = expose_rect;
event->expose.region = gdk_region_rectangle (&expose_rect);
event->expose.window = window;
event->expose.count = xevent->xexpose.count;
......@@ -1007,6 +1008,7 @@ gdk_event_translate (GdkEvent *event,
{
event->expose.type = GDK_EXPOSE;
event->expose.area = expose_rect;
event->expose.region = gdk_region_rectangle (&expose_rect);
event->expose.window = window;
event->expose.count = xevent->xgraphicsexpose.count;
......
......@@ -31,8 +31,6 @@ static void gtk_bin_class_init (GtkBinClass *klass);
static void gtk_bin_init (GtkBin *bin);
static void gtk_bin_map (GtkWidget *widget);
static void gtk_bin_unmap (GtkWidget *widget);
static gint gtk_bin_expose (GtkWidget *widget,
GdkEventExpose *event);
static void gtk_bin_add (GtkContainer *container,
GtkWidget *widget);
static void gtk_bin_remove (GtkContainer *container,
......@@ -87,7 +85,6 @@ gtk_bin_class_init (GtkBinClass *class)
widget_class->map = gtk_bin_map;
widget_class->unmap = gtk_bin_unmap;
widget_class->expose_event = gtk_bin_expose;
container_class->add = gtk_bin_add;
container_class->remove = gtk_bin_remove;
......@@ -151,32 +148,6 @@ gtk_bin_unmap (GtkWidget *widget)
gtk_widget_unmap (bin->child);
}
static gint
gtk_bin_expose (GtkWidget *widget,
GdkEventExpose *event)
{
GtkBin *bin;
GdkEventExpose child_event;
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (GTK_IS_BIN (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
if (GTK_WIDGET_DRAWABLE (widget))
{
bin = GTK_BIN (widget);
child_event = *event;
if (bin->child && GTK_WIDGET_DRAWABLE (bin->child) &&
GTK_WIDGET_NO_WINDOW (bin->child) &&
gtk_widget_intersect (bin->child, &event->area, &child_event.area))
gtk_widget_event (bin->child, (GdkEvent*) &child_event);
}
return FALSE;
}
static void
gtk_bin_add (GtkContainer *container,
GtkWidget *child)
......
......@@ -51,8 +51,6 @@ static void gtk_box_set_arg (GtkObject *object,
guint arg_id);
static void gtk_box_map (GtkWidget *widget);
static void gtk_box_unmap (GtkWidget *widget);
static gint gtk_box_expose (GtkWidget *widget,
GdkEventExpose *event);
static void gtk_box_add (GtkContainer *container,
GtkWidget *widget);
static void gtk_box_remove (GtkContainer *container,
......@@ -126,7 +124,6 @@ gtk_box_class_init (GtkBoxClass *class)
widget_class->map = gtk_box_map;
widget_class->unmap = gtk_box_unmap;
widget_class->expose_event = gtk_box_expose;
container_class->add = gtk_box_add;
container_class->remove = gtk_box_remove;
......@@ -645,41 +642,6 @@ gtk_box_unmap (GtkWidget *widget)
}
}
static gint
gtk_box_expose (GtkWidget *widget,
GdkEventExpose *event)
{
GtkBox *box;
GtkBoxChild *child;
GdkEventExpose child_event;
GList *children;
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (GTK_IS_BOX (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
if (GTK_WIDGET_DRAWABLE (widget))
{
box = GTK_BOX (widget);
child_event = *event;
children = box->children;
while (children)
{
child = children->data;
children = children->next;
if (GTK_WIDGET_DRAWABLE (child->widget) &&
GTK_WIDGET_NO_WINDOW (child->widget) &&
gtk_widget_intersect (child->widget, &event->area, &child_event.area))
gtk_widget_event (child->widget, (GdkEvent*) &child_event);
}
}
return FALSE;
}
static void
gtk_box_add (GtkContainer *container,
GtkWidget *widget)
......
......@@ -142,9 +142,8 @@ gtk_button_class_init (GtkButtonClass *klass)
object_class = (GtkObjectClass*) klass;
widget_class = (GtkWidgetClass*) klass;
container_class = (GtkContainerClass*) klass;
parent_class = gtk_type_class (GTK_TYPE_BIN);
parent_class = g_type_class_peek_parent (klass);
object_class->set_arg = gtk_button_set_arg;
object_class->get_arg = gtk_button_get_arg;
......@@ -715,7 +714,6 @@ gtk_button_expose (GtkWidget *widget,
GdkEventExpose *event)
{
GtkBin *bin;
GdkEventExpose child_event;
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (GTK_IS_BUTTON (widget), FALSE);
......@@ -726,13 +724,10 @@ gtk_button_expose (GtkWidget *widget,
bin = GTK_BIN (widget);
gtk_button_paint (widget, &event->area);
child_event = *event;
if (bin->child && GTK_WIDGET_NO_WINDOW (bin->child) &&
gtk_widget_intersect (bin->child, &event->area, &child_event.area))
gtk_widget_event (bin->child, (GdkEvent*) &child_event);
(* GTK_WIDGET_CLASS (parent_class)->expose_event) (widget, event);
}
return FALSE;
}
......
......@@ -243,7 +243,6 @@ gtk_check_button_expose (GtkWidget *widget,
GtkCheckButton *check_button;
GtkToggleButton *toggle_button;
GtkBin *bin;
GdkEventExpose child_event;
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (GTK_IS_CHECK_BUTTON (widget), FALSE);
......@@ -259,16 +258,13 @@ gtk_check_button_expose (GtkWidget *widget,
{
gtk_check_button_paint (widget, &event->area);
child_event = *event;
if (bin->child && GTK_WIDGET_NO_WINDOW (bin->child) &&
gtk_widget_intersect (bin->child, &event->area, &child_event.area))
gtk_widget_event (bin->child, (GdkEvent*) &child_event);
}
else
{
if (GTK_WIDGET_CLASS (parent_class)->expose_event)
(* GTK_WIDGET_CLASS (parent_class)->expose_event) (widget, event);
if (bin->child)
gtk_container_propagate_expose (GTK_CONTAINER (widget),
bin->child,
event);
}
else if (GTK_WIDGET_CLASS (parent_class)->expose_event)
(* GTK_WIDGET_CLASS (parent_class)->expose_event) (widget, event);
}
return FALSE;
......
......@@ -6350,7 +6350,7 @@ check_exposures (GtkCList *clist)
* again */
while ((event = gdk_event_get_graphics_expose (clist->clist_window)) != NULL)
{
gtk_widget_event (GTK_WIDGET (clist), event);
gtk_widget_send_expose (GTK_WIDGET (clist), event);
if (event->expose.count == 0)
{
gdk_event_free (event);
......
......@@ -96,6 +96,8 @@ static void gtk_container_children_callback (GtkWidget *widget,
gpointer client_data);
static void gtk_container_show_all (GtkWidget *widget);
static void gtk_container_hide_all (GtkWidget