mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-26 13:41:07 +00:00
gdk: Drop expose events
Replace expose events with a GdkSurface::expose signal. This is part of the move to use events only for input.
This commit is contained in:
parent
a8926c9d87
commit
da3aaf39b9
@ -646,11 +646,6 @@ gdk_event_copy (const GdkEvent *event)
|
|||||||
g_object_ref (event->dnd.drop);
|
g_object_ref (event->dnd.drop);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDK_EXPOSE:
|
|
||||||
if (event->expose.region)
|
|
||||||
new_event->expose.region = cairo_region_copy (event->expose.region);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_BUTTON_PRESS:
|
case GDK_BUTTON_PRESS:
|
||||||
case GDK_BUTTON_RELEASE:
|
case GDK_BUTTON_RELEASE:
|
||||||
if (event->button.axes)
|
if (event->button.axes)
|
||||||
@ -730,11 +725,6 @@ gdk_event_finalize (GObject *object)
|
|||||||
g_free (event->touch.axes);
|
g_free (event->touch.axes);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDK_EXPOSE:
|
|
||||||
if (event->expose.region)
|
|
||||||
cairo_region_destroy (event->expose.region);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_MOTION_NOTIFY:
|
case GDK_MOTION_NOTIFY:
|
||||||
g_clear_object (&event->motion.tool);
|
g_clear_object (&event->motion.tool);
|
||||||
g_free (event->motion.axes);
|
g_free (event->motion.axes);
|
||||||
@ -831,7 +821,6 @@ gdk_event_get_time (const GdkEvent *event)
|
|||||||
case GDK_NOTHING:
|
case GDK_NOTHING:
|
||||||
case GDK_DELETE:
|
case GDK_DELETE:
|
||||||
case GDK_DESTROY:
|
case GDK_DESTROY:
|
||||||
case GDK_EXPOSE:
|
|
||||||
case GDK_MAP:
|
case GDK_MAP:
|
||||||
case GDK_UNMAP:
|
case GDK_UNMAP:
|
||||||
case GDK_GRAB_BROKEN:
|
case GDK_GRAB_BROKEN:
|
||||||
@ -906,7 +895,6 @@ gdk_event_get_state (const GdkEvent *event,
|
|||||||
case GDK_NOTHING:
|
case GDK_NOTHING:
|
||||||
case GDK_DELETE:
|
case GDK_DELETE:
|
||||||
case GDK_DESTROY:
|
case GDK_DESTROY:
|
||||||
case GDK_EXPOSE:
|
|
||||||
case GDK_MAP:
|
case GDK_MAP:
|
||||||
case GDK_UNMAP:
|
case GDK_UNMAP:
|
||||||
case GDK_GRAB_BROKEN:
|
case GDK_GRAB_BROKEN:
|
||||||
|
@ -104,7 +104,6 @@ G_BEGIN_DECLS
|
|||||||
|
|
||||||
|
|
||||||
typedef struct _GdkEventAny GdkEventAny;
|
typedef struct _GdkEventAny GdkEventAny;
|
||||||
typedef struct _GdkEventExpose GdkEventExpose;
|
|
||||||
typedef struct _GdkEventMotion GdkEventMotion;
|
typedef struct _GdkEventMotion GdkEventMotion;
|
||||||
typedef struct _GdkEventButton GdkEventButton;
|
typedef struct _GdkEventButton GdkEventButton;
|
||||||
typedef struct _GdkEventTouch GdkEventTouch;
|
typedef struct _GdkEventTouch GdkEventTouch;
|
||||||
@ -144,8 +143,6 @@ typedef void (*GdkEventFunc) (GdkEvent *event,
|
|||||||
* hidden or destroyed, usually when the user clicks on a special icon in the
|
* hidden or destroyed, usually when the user clicks on a special icon in the
|
||||||
* title bar.
|
* title bar.
|
||||||
* @GDK_DESTROY: the surface has been destroyed.
|
* @GDK_DESTROY: the surface has been destroyed.
|
||||||
* @GDK_EXPOSE: all or part of the surface has become visible and needs to be
|
|
||||||
* redrawn.
|
|
||||||
* @GDK_MOTION_NOTIFY: the pointer (usually a mouse) has moved.
|
* @GDK_MOTION_NOTIFY: the pointer (usually a mouse) has moved.
|
||||||
* @GDK_BUTTON_PRESS: a mouse button has been pressed.
|
* @GDK_BUTTON_PRESS: a mouse button has been pressed.
|
||||||
* @GDK_BUTTON_RELEASE: a mouse button has been released.
|
* @GDK_BUTTON_RELEASE: a mouse button has been released.
|
||||||
@ -203,7 +200,6 @@ typedef enum
|
|||||||
GDK_NOTHING,
|
GDK_NOTHING,
|
||||||
GDK_DELETE,
|
GDK_DELETE,
|
||||||
GDK_DESTROY,
|
GDK_DESTROY,
|
||||||
GDK_EXPOSE,
|
|
||||||
GDK_MOTION_NOTIFY,
|
GDK_MOTION_NOTIFY,
|
||||||
GDK_BUTTON_PRESS,
|
GDK_BUTTON_PRESS,
|
||||||
GDK_BUTTON_RELEASE,
|
GDK_BUTTON_RELEASE,
|
||||||
|
@ -63,23 +63,6 @@ struct _GdkEventAny
|
|||||||
GdkDisplay *display;
|
GdkDisplay *display;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
* GdkEventExpose:
|
|
||||||
* @type: the type of the event (%GDK_EXPOSE)
|
|
||||||
* @surface: the surface which received the event.
|
|
||||||
* @send_event: %TRUE if the event was sent explicitly.
|
|
||||||
* @area: bounding box of @region.
|
|
||||||
* @region: the region that needs to be redrawn.
|
|
||||||
*
|
|
||||||
* Generated when all or part of a surface becomes visible and needs to be
|
|
||||||
* redrawn.
|
|
||||||
*/
|
|
||||||
struct _GdkEventExpose
|
|
||||||
{
|
|
||||||
GdkEventAny any;
|
|
||||||
cairo_region_t *region;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GdkEventMotion:
|
* GdkEventMotion:
|
||||||
* @type: the type of the event.
|
* @type: the type of the event.
|
||||||
@ -573,7 +556,6 @@ struct _GdkEventPadGroupMode {
|
|||||||
* GdkEvent:
|
* GdkEvent:
|
||||||
* @type: the #GdkEventType
|
* @type: the #GdkEventType
|
||||||
* @any: a #GdkEventAny
|
* @any: a #GdkEventAny
|
||||||
* @expose: a #GdkEventExpose
|
|
||||||
* @motion: a #GdkEventMotion
|
* @motion: a #GdkEventMotion
|
||||||
* @button: a #GdkEventButton
|
* @button: a #GdkEventButton
|
||||||
* @touch: a #GdkEventTouch
|
* @touch: a #GdkEventTouch
|
||||||
@ -624,7 +606,6 @@ struct _GdkEventPadGroupMode {
|
|||||||
union _GdkEvent
|
union _GdkEvent
|
||||||
{
|
{
|
||||||
GdkEventAny any;
|
GdkEventAny any;
|
||||||
GdkEventExpose expose;
|
|
||||||
GdkEventMotion motion;
|
GdkEventMotion motion;
|
||||||
GdkEventButton button;
|
GdkEventButton button;
|
||||||
GdkEventTouch touch;
|
GdkEventTouch touch;
|
||||||
|
@ -98,6 +98,7 @@
|
|||||||
enum {
|
enum {
|
||||||
MOVED_TO_RECT,
|
MOVED_TO_RECT,
|
||||||
SIZE_CHANGED,
|
SIZE_CHANGED,
|
||||||
|
RENDER,
|
||||||
LAST_SIGNAL
|
LAST_SIGNAL
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -324,6 +325,18 @@ gdk_surface_class_init (GdkSurfaceClass *klass)
|
|||||||
2,
|
2,
|
||||||
G_TYPE_INT,
|
G_TYPE_INT,
|
||||||
G_TYPE_INT);
|
G_TYPE_INT);
|
||||||
|
|
||||||
|
signals[RENDER] =
|
||||||
|
g_signal_new (g_intern_static_string ("render"),
|
||||||
|
G_OBJECT_CLASS_TYPE (object_class),
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
0,
|
||||||
|
g_signal_accumulator_true_handled,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
G_TYPE_BOOLEAN,
|
||||||
|
1,
|
||||||
|
CAIRO_GOBJECT_TYPE_REGION);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1631,20 +1644,13 @@ static void
|
|||||||
gdk_surface_process_updates_recurse (GdkSurface *surface,
|
gdk_surface_process_updates_recurse (GdkSurface *surface,
|
||||||
cairo_region_t *expose_region)
|
cairo_region_t *expose_region)
|
||||||
{
|
{
|
||||||
GdkEvent *event;
|
gboolean handled;
|
||||||
|
|
||||||
if (surface->destroyed)
|
if (surface->destroyed)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Paint the surface before the children, clipped to the surface region */
|
/* Paint the surface before the children, clipped to the surface region */
|
||||||
|
g_signal_emit (surface, signals[RENDER], 0, expose_region, &handled);
|
||||||
event = gdk_event_new (GDK_EXPOSE);
|
|
||||||
event->any.surface = g_object_ref (surface);
|
|
||||||
event->any.send_event = FALSE;
|
|
||||||
event->expose.region = cairo_region_reference (expose_region);
|
|
||||||
|
|
||||||
_gdk_event_emit (event);
|
|
||||||
g_object_unref (event);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Process and remove any invalid area on the native surface by creating
|
/* Process and remove any invalid area on the native surface by creating
|
||||||
@ -3937,7 +3943,6 @@ _gdk_make_event (GdkSurface *surface,
|
|||||||
case GDK_UNMAP:
|
case GDK_UNMAP:
|
||||||
case GDK_DELETE:
|
case GDK_DELETE:
|
||||||
case GDK_DESTROY:
|
case GDK_DESTROY:
|
||||||
case GDK_EXPOSE:
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1827,11 +1827,6 @@ gtk_main_do_event (GdkEvent *event)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDK_EXPOSE:
|
|
||||||
if (event->any.surface)
|
|
||||||
gtk_widget_render (event_widget, event->any.surface, event->expose.region);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_MAP:
|
case GDK_MAP:
|
||||||
if (GTK_IS_WINDOW (event_widget) && !_gtk_widget_get_mapped (event_widget))
|
if (GTK_IS_WINDOW (event_widget) && !_gtk_widget_get_mapped (event_widget))
|
||||||
{
|
{
|
||||||
|
@ -5091,14 +5091,6 @@ gtk_widget_event (GtkWidget *widget,
|
|||||||
g_return_val_if_fail (GTK_IS_WIDGET (widget), TRUE);
|
g_return_val_if_fail (GTK_IS_WIDGET (widget), TRUE);
|
||||||
g_return_val_if_fail (WIDGET_REALIZED_FOR_EVENT (widget, event), TRUE);
|
g_return_val_if_fail (WIDGET_REALIZED_FOR_EVENT (widget, event), TRUE);
|
||||||
|
|
||||||
if (event->any.type == GDK_EXPOSE)
|
|
||||||
{
|
|
||||||
g_warning ("Events of type GDK_EXPOSE cannot be synthesized. To get "
|
|
||||||
"the same effect, call gdk_surface_invalidate_rect/region(), "
|
|
||||||
"followed by gdk_surface_process_updates().");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return gtk_widget_event_internal (widget, event);
|
return gtk_widget_event_internal (widget, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5174,14 +5166,6 @@ _gtk_widget_captured_event (GtkWidget *widget,
|
|||||||
g_return_val_if_fail (GTK_IS_WIDGET (widget), TRUE);
|
g_return_val_if_fail (GTK_IS_WIDGET (widget), TRUE);
|
||||||
g_return_val_if_fail (WIDGET_REALIZED_FOR_EVENT (widget, event), TRUE);
|
g_return_val_if_fail (WIDGET_REALIZED_FOR_EVENT (widget, event), TRUE);
|
||||||
|
|
||||||
if (event->any.type == GDK_EXPOSE)
|
|
||||||
{
|
|
||||||
g_warning ("Events of type GDK_EXPOSE cannot be synthesized. To get "
|
|
||||||
"the same effect, call gdk_surface_invalidate_rect/region(), "
|
|
||||||
"followed by gdk_surface_process_updates().");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!event_surface_is_still_viewable (event))
|
if (!event_surface_is_still_viewable (event))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
@ -5217,7 +5201,6 @@ event_surface_is_still_viewable (const GdkEvent *event)
|
|||||||
*/
|
*/
|
||||||
switch ((guint) event->any.type)
|
switch ((guint) event->any.type)
|
||||||
{
|
{
|
||||||
case GDK_EXPOSE:
|
|
||||||
case GDK_MOTION_NOTIFY:
|
case GDK_MOTION_NOTIFY:
|
||||||
case GDK_BUTTON_PRESS:
|
case GDK_BUTTON_PRESS:
|
||||||
case GDK_KEY_PRESS:
|
case GDK_KEY_PRESS:
|
||||||
@ -5284,7 +5267,6 @@ gtk_widget_event_internal (GtkWidget *widget,
|
|||||||
/* Non input events get handled right away */
|
/* Non input events get handled right away */
|
||||||
switch ((guint) event->any.type)
|
switch ((guint) event->any.type)
|
||||||
{
|
{
|
||||||
case GDK_EXPOSE:
|
|
||||||
case GDK_NOTHING:
|
case GDK_NOTHING:
|
||||||
case GDK_DELETE:
|
case GDK_DELETE:
|
||||||
case GDK_DESTROY:
|
case GDK_DESTROY:
|
||||||
@ -11512,6 +11494,16 @@ gtk_widget_set_surface (GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
surface_expose (GdkSurface *surface,
|
||||||
|
cairo_region_t *region,
|
||||||
|
GtkWidget *widget)
|
||||||
|
{
|
||||||
|
gtk_widget_render (widget, surface, region);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gtk_widget_register_surface:
|
* gtk_widget_register_surface:
|
||||||
* @widget: a #GtkWidget
|
* @widget: a #GtkWidget
|
||||||
@ -11539,6 +11531,8 @@ gtk_widget_register_surface (GtkWidget *widget,
|
|||||||
g_assert (user_data == NULL);
|
g_assert (user_data == NULL);
|
||||||
|
|
||||||
gdk_surface_set_user_data (surface, widget);
|
gdk_surface_set_user_data (surface, widget);
|
||||||
|
|
||||||
|
g_signal_connect (surface, "render", G_CALLBACK (surface_expose), widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -11562,6 +11556,8 @@ gtk_widget_unregister_surface (GtkWidget *widget,
|
|||||||
gdk_surface_get_user_data (surface, &user_data);
|
gdk_surface_get_user_data (surface, &user_data);
|
||||||
g_assert (user_data == widget);
|
g_assert (user_data == widget);
|
||||||
gdk_surface_set_user_data (surface, NULL);
|
gdk_surface_set_user_data (surface, NULL);
|
||||||
|
|
||||||
|
g_signal_handlers_disconnect_by_func (surface, surface_expose, widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user