[gtk/readonly-events-1: 3/3] Some event struct packing improvements
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/readonly-events-1: 3/3] Some event struct packing improvements
- Date: Tue, 18 Feb 2020 04:22:43 +0000 (UTC)
commit d741b862acca587192e4e006dd0e2fcd85113f85
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Feb 17 23:08:44 2020 -0500
Some event struct packing improvements
Rearrange a few things, and move some booleans
into the Any struct, by using a bitfield there.
Some more cleanup could be done - the flags field
with its PENDING and FLUSHED members appears
entirely unused. Nobody is setting those flags.
gdk/gdkevents.c | 110 ++++++++++++++-----------------------------------
gdk/gdkeventsprivate.h | 40 +++++++-----------
gdk/gdkinternals.h | 6 ---
3 files changed, 46 insertions(+), 110 deletions(-)
---
diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c
index 83d29b76fc..b86d6451bf 100644
--- a/gdk/gdkevents.c
+++ b/gdk/gdkevents.c
@@ -392,7 +392,7 @@ gdk_event_unref (GdkEvent *event)
gboolean
gdk_event_get_pointer_emulated (GdkEvent *event)
{
- return (event->any.flags & GDK_EVENT_POINTER_EMULATED) != 0;
+ return event->any.pointer_emulated;
}
static void
@@ -818,11 +818,11 @@ gdk_event_button_new (GdkEventType type,
event = g_new0 (GdkEventButton, 1);
event->any.ref_count = 1;
event->any.type = type;
+ event->any.time = time;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
event->tool = tool ? g_object_ref (tool) : NULL;
- event->time = time;
event->axes = NULL;
event->state = state;
event->button = button;
@@ -848,11 +848,11 @@ gdk_event_motion_new (GdkSurface *surface,
event->any.ref_count = 1;
event->any.type = GDK_MOTION_NOTIFY;
+ event->any.time = time;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
event->tool = tool ? g_object_ref (tool) : NULL;
- event->time = time;
event->state = state;
event->x = x;
event->y = y;
@@ -883,10 +883,10 @@ gdk_event_crossing_new (GdkEventType type,
event->any.ref_count = 1;
event->any.type = type;
+ event->any.time = time;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
- event->time = time;
event->state = state;
event->x = x;
event->y = y;
@@ -913,11 +913,11 @@ gdk_event_proximity_new (GdkEventType type,
event->any.ref_count = 1;
event->any.type = type;
+ event->any.time = time;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
event->tool = tool ? g_object_ref (tool) : NULL;
- event->time = time;
return (GdkEvent *)event;
}
@@ -944,16 +944,16 @@ gdk_event_key_new (GdkEventType type,
event->any.ref_count = 1;
event->any.type = type;
+ event->any.time = time;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
- event->time = time;
event->state = state;
event->keyval = keyval;
event->hardware_keycode = keycode;
event->key_scancode = scancode;
event->group = group;
- event->is_modifier = is_modifier;
+ event->any.key_is_modifier = is_modifier;
return (GdkEvent *)event;
}
@@ -967,6 +967,7 @@ gdk_event_configure_new (GdkSurface *surface,
event->any.ref_count = 1;
event->any.type = GDK_CONFIGURE;
+ event->any.time = GDK_CURRENT_TIME;
event->any.surface = g_object_ref (surface);
event->width = width;
event->height = height;
@@ -981,6 +982,7 @@ gdk_event_delete_new (GdkSurface *surface)
event->ref_count = 1;
event->type = GDK_DELETE;
+ event->time = GDK_CURRENT_TIME;
event->surface = g_object_ref (surface);
return (GdkEvent *)event;
@@ -996,10 +998,11 @@ gdk_event_focus_new (GdkSurface *surface,
event->any.ref_count = 1;
event->any.type = GDK_FOCUS_CHANGE;
+ event->any.time = GDK_CURRENT_TIME;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
- event->in = focus_in;
+ event->any.focus_in = focus_in;
return (GdkEvent *)event;
}
@@ -1019,18 +1022,18 @@ gdk_event_scroll_new (GdkSurface *surface,
event->any.ref_count = 1;
event->any.type = GDK_SCROLL;
+ event->any.time = time;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
event->tool = tool ? g_object_ref (tool) : NULL;
- event->time = time;
event->state = state;
event->x = NAN;
event->y = NAN;
event->direction = GDK_SCROLL_SMOOTH;
event->delta_x = delta_x;
event->delta_y = delta_y;
- event->is_stop = is_stop;
+ event->any.scroll_is_stop = is_stop;
return (GdkEvent *)event;
}
@@ -1049,17 +1052,16 @@ gdk_event_discrete_scroll_new (GdkSurface *surface,
event->any.ref_count = 1;
event->any.type = GDK_SCROLL;
+ event->any.time = time;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
event->tool = tool ? g_object_ref (tool) : NULL;
- event->time = time;
event->state = state;
event->x = NAN;
event->y = NAN;
event->direction = direction;
- if (emulated)
- event->any.flags = GDK_EVENT_POINTER_EMULATED;
+ event->any.pointer_emulated = emulated;
return (GdkEvent *)event;
}
@@ -1088,18 +1090,17 @@ gdk_event_touch_new (GdkEventType type,
event->any.ref_count = 1;
event->any.type = type;
+ event->any.time = time;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
event->sequence = sequence;
- event->time = time;
event->state = state;
event->x = x;
event->y = y;
event->axes = axes;
- event->emulating_pointer = emulating;
- if (emulating)
- event->any.flags = GDK_EVENT_POINTER_EMULATED;
+ event->any.touch_emulating = emulating;
+ event->any.pointer_emulated = emulating;
return (GdkEvent *)event;
}
@@ -1121,10 +1122,10 @@ gdk_event_touchpad_swipe_new (GdkSurface *surface,
event->any.ref_count = 1;
event->any.type = GDK_TOUCHPAD_SWIPE;
+ event->any.time = time;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
- event->time = time;
event->state = state;
event->phase = phase;
event->x = x;
@@ -1155,10 +1156,10 @@ gdk_event_touchpad_pinch_new (GdkSurface *surface,
event->any.ref_count = 1;
event->any.type = GDK_TOUCHPAD_PINCH;
+ event->any.time = time;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
- event->time = time;
event->state = state;
event->phase = phase;
event->x = x;
@@ -1186,10 +1187,10 @@ gdk_event_pad_ring_new (GdkSurface *surface,
event->any.ref_count = 1;
event->any.type = GDK_PAD_RING;
+ event->any.time = time;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
- event->time = time;
event->group = group;
event->index = index;
event->mode = mode;
@@ -1212,10 +1213,10 @@ gdk_event_pad_strip_new (GdkSurface *surface,
event->any.ref_count = 1;
event->any.type = GDK_PAD_STRIP;
+ event->any.time = time;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
- event->time = time;
event->group = group;
event->index = index;
event->mode = mode;
@@ -1243,10 +1244,10 @@ gdk_event_pad_button_new (GdkEventType type,
event->any.ref_count = 1;
event->any.type = type;
+ event->any.time = time;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
- event->time = time;
event->group = group;
event->button = button;
event->mode = mode;
@@ -1266,10 +1267,10 @@ gdk_event_pad_group_mode_new (GdkSurface *surface,
event->any.ref_count = 1;
event->any.type = GDK_PAD_GROUP_MODE;
+ event->any.time = time;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
- event->time = time;
event->group = group;
event->mode = mode;
@@ -1296,10 +1297,10 @@ gdk_event_drag_new (GdkEventType type,
event->any.ref_count = 1;
event->any.type = type;
+ event->any.time = time;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->drop = g_object_ref (drop);
- event->time = time;
event->x = x;
event->y = y;
@@ -1317,6 +1318,7 @@ gdk_event_grab_broken_new (GdkSurface *surface,
event->any.ref_count = 1;
event->any.type = GDK_GRAB_BROKEN;
+ event->any.time = GDK_CURRENT_TIME;
event->any.surface = g_object_ref (surface);
event->any.device = g_object_ref (device);
event->any.source_device = g_object_ref (source_device);
@@ -1438,57 +1440,7 @@ gdk_event_get_device_tool (GdkEvent *event)
guint32
gdk_event_get_time (GdkEvent *event)
{
- switch (event->any.type)
- {
- case GDK_MOTION_NOTIFY:
- return event->motion.time;
- case GDK_BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
- return event->button.time;
- case GDK_TOUCH_BEGIN:
- case GDK_TOUCH_UPDATE:
- case GDK_TOUCH_END:
- case GDK_TOUCH_CANCEL:
- return event->touch.time;
- case GDK_TOUCHPAD_SWIPE:
- return event->touchpad_swipe.time;
- case GDK_TOUCHPAD_PINCH:
- return event->touchpad_pinch.time;
- case GDK_SCROLL:
- return event->scroll.time;
- case GDK_KEY_PRESS:
- case GDK_KEY_RELEASE:
- return event->key.time;
- case GDK_ENTER_NOTIFY:
- case GDK_LEAVE_NOTIFY:
- return event->crossing.time;
- case GDK_PROXIMITY_IN:
- case GDK_PROXIMITY_OUT:
- return event->proximity.time;
- case GDK_DRAG_ENTER:
- case GDK_DRAG_LEAVE:
- case GDK_DRAG_MOTION:
- case GDK_DROP_START:
- return event->dnd.time;
- case GDK_PAD_BUTTON_PRESS:
- case GDK_PAD_BUTTON_RELEASE:
- return event->pad_button.time;
- case GDK_PAD_RING:
- case GDK_PAD_STRIP:
- return event->pad_axis.time;
- case GDK_PAD_GROUP_MODE:
- return event->pad_group_mode.time;
- case GDK_CONFIGURE:
- case GDK_FOCUS_CHANGE:
- case GDK_DELETE:
- case GDK_GRAB_BROKEN:
- case GDK_EVENT_LAST:
- default:
- /* return current time */
- break;
- }
-
- return GDK_CURRENT_TIME;
+ return event->any.time;
}
/**
@@ -1767,7 +1719,7 @@ gdk_key_event_is_modifier (GdkEvent *event)
g_return_val_if_fail (event->any.type == GDK_KEY_PRESS ||
event->any.type == GDK_KEY_RELEASE, FALSE);
- return event->key.is_modifier;
+ return event->any.key_is_modifier;
}
void
@@ -1797,7 +1749,7 @@ gdk_touch_event_get_emulating_pointer (GdkEvent *event)
event->any.type == GDK_TOUCH_END ||
event->any.type == GDK_TOUCH_CANCEL, FALSE);
- return event->touch.emulating_pointer;
+ return event->any.touch_emulating;
}
/**
@@ -1839,7 +1791,7 @@ gdk_focus_event_get_in (GdkEvent *event)
{
g_return_val_if_fail (event->any.type == GDK_FOCUS_CHANGE, FALSE);
- return event->focus_change.in;
+ return event->any.focus_in;
}
GdkScrollDirection
@@ -1880,7 +1832,7 @@ gdk_scroll_event_is_stop (GdkEvent *event)
{
g_return_val_if_fail (event->any.type == GDK_SCROLL, FALSE);
- return event->scroll.is_stop;
+ return event->any.scroll_is_stop;
}
/**
diff --git a/gdk/gdkeventsprivate.h b/gdk/gdkeventsprivate.h
index b3b389319f..7f7d7ffe73 100644
--- a/gdk/gdkeventsprivate.h
+++ b/gdk/gdkeventsprivate.h
@@ -45,7 +45,13 @@ struct _GdkEventAny
int ref_count;
GdkEventType type;
GdkSurface *surface;
+ guint32 time;
guint16 flags;
+ guint pointer_emulated : 1;
+ guint touch_emulating : 1;
+ guint scroll_is_stop : 1;
+ guint key_is_modifier : 1;
+ guint focus_in : 1;
GdkDevice *device;
GdkDevice *source_device;
};
@@ -72,11 +78,10 @@ struct _GdkEventAny
struct _GdkEventMotion
{
GdkEventAny any;
- guint32 time;
+ GdkModifierType state;
double x;
double y;
double *axes;
- GdkModifierType state;
GdkDeviceTool *tool;
GList *history;
};
@@ -108,12 +113,11 @@ struct _GdkEventMotion
struct _GdkEventButton
{
GdkEventAny any;
- guint32 time;
+ GdkModifierType state;
+ guint button;
double x;
double y;
double *axes;
- GdkModifierType state;
- guint button;
GdkDeviceTool *tool;
};
@@ -152,13 +156,11 @@ struct _GdkEventButton
struct _GdkEventTouch
{
GdkEventAny any;
- guint32 time;
+ GdkModifierType state;
double x;
double y;
double *axes;
- GdkModifierType state;
GdkEventSequence *sequence;
- gboolean emulating_pointer;
};
/*
@@ -192,14 +194,12 @@ struct _GdkEventTouch
struct _GdkEventScroll
{
GdkEventAny any;
- guint32 time;
double x;
double y;
GdkModifierType state;
GdkScrollDirection direction;
double delta_x;
double delta_y;
- guint is_stop : 1;
GdkDeviceTool *tool;
};
@@ -225,13 +225,11 @@ struct _GdkEventScroll
struct _GdkEventKey
{
GdkEventAny any;
- guint32 time;
GdkModifierType state;
guint keyval;
guint16 hardware_keycode;
guint16 key_scancode;
guint8 group;
- guint is_modifier : 1;
};
/*
@@ -261,14 +259,13 @@ struct _GdkEventKey
struct _GdkEventCrossing
{
GdkEventAny any;
- GdkSurface *child_surface;
- guint32 time;
+ GdkModifierType state;
+ GdkCrossingMode mode;
double x;
double y;
- GdkCrossingMode mode;
GdkNotifyType detail;
gboolean focus;
- GdkModifierType state;
+ GdkSurface *child_surface;
};
/*
@@ -334,7 +331,6 @@ struct _GdkEventConfigure
struct _GdkEventProximity
{
GdkEventAny any;
- guint32 time;
GdkDeviceTool *tool;
};
@@ -378,7 +374,6 @@ struct _GdkEventGrabBroken {
struct _GdkEventDND {
GdkEventAny any;
GdkDrop *drop;
- guint32 time;
double x;
double y;
};
@@ -403,14 +398,13 @@ struct _GdkEventDND {
*/
struct _GdkEventTouchpadSwipe {
GdkEventAny any;
+ GdkModifierType state;
gint8 phase;
gint8 n_fingers;
- guint32 time;
double x;
double y;
double dx;
double dy;
- GdkModifierType state;
};
/*
@@ -437,16 +431,15 @@ struct _GdkEventTouchpadSwipe {
*/
struct _GdkEventTouchpadPinch {
GdkEventAny any;
+ GdkModifierType state;
gint8 phase;
gint8 n_fingers;
- guint32 time;
double x;
double y;
double dx;
double dy;
double angle_delta;
double scale;
- GdkModifierType state;
};
/*
@@ -465,7 +458,6 @@ struct _GdkEventTouchpadPinch {
*/
struct _GdkEventPadButton {
GdkEventAny any;
- guint32 time;
guint group;
guint button;
guint mode;
@@ -489,7 +481,6 @@ struct _GdkEventPadButton {
*/
struct _GdkEventPadAxis {
GdkEventAny any;
- guint32 time;
guint group;
guint index;
guint mode;
@@ -512,7 +503,6 @@ struct _GdkEventPadAxis {
*/
struct _GdkEventPadGroupMode {
GdkEventAny any;
- guint32 time;
guint group;
guint mode;
};
diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h
index ebe529c654..f1e06a9b09 100644
--- a/gdk/gdkinternals.h
+++ b/gdk/gdkinternals.h
@@ -102,12 +102,6 @@ typedef enum
*/
GDK_EVENT_PENDING = 1 << 0,
- /* The following flag is set for:
- * 1) touch events emulating pointer events
- * 2) pointer events being emulated by a touch sequence.
- */
- GDK_EVENT_POINTER_EMULATED = 1 << 1,
-
/* When we are ready to draw a frame, we pause event delivery,
* mark all events in the queue with this flag, and deliver
* only those events until we finish the frame.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]