tmp_list = display->queued_events;
while (tmp_list)
{
- GdkEventPrivate *event = tmp_list->data;
+ GdkEvent *event = tmp_list->data;
- if ((event->flags & GDK_EVENT_PENDING) == 0 &&
- (!paused || (event->flags & GDK_EVENT_FLUSHED) != 0))
+ if ((event->any.flags & GDK_EVENT_PENDING) == 0 &&
+ (!paused || (event->any.flags & GDK_EVENT_FLUSHED) != 0))
{
if (pending_motion)
return pending_motion;
- if (event->event.any.type == GDK_MOTION_NOTIFY && (event->flags & GDK_EVENT_FLUSHED) == 0)
+ if (event->any.type == GDK_MOTION_NOTIFY && (event->any.flags & GDK_EVENT_FLUSHED) == 0)
pending_motion = tmp_list;
else
return tmp_list;
while (tmp_list)
{
- GdkEventPrivate *event = tmp_list->data;
+ GdkEvent *event = tmp_list->data;
- if (event->flags & GDK_EVENT_PENDING)
+ if (event->any.flags & GDK_EVENT_PENDING)
break;
- if (event->event.any.type != GDK_MOTION_NOTIFY)
+ if (event->any.type != GDK_MOTION_NOTIFY)
break;
if (pending_motion_window != NULL &&
- pending_motion_window != event->event.any.window)
+ pending_motion_window != event->any.window)
break;
if (pending_motion_device != NULL &&
- pending_motion_device != event->event.motion.device)
+ pending_motion_device != event->any.device)
break;
- if (!event->event.any.window->event_compression)
+ if (!event->any.window->event_compression)
break;
- pending_motion_window = event->event.any.window;
- pending_motion_device = event->event.motion.device;
+ pending_motion_window = event->any.window;
+ pending_motion_device = event->any.device;
pending_motions = tmp_list;
tmp_list = tmp_list->prev;
for (tmp_list = display->queued_events; tmp_list; tmp_list = tmp_list->next)
{
- GdkEventPrivate *event = tmp_list->data;
- event->flags |= GDK_EVENT_FLUSHED;
+ GdkEvent *event = tmp_list->data;
+ event->any.flags |= GDK_EVENT_FLUSHED;
}
}
new_private = g_slice_new0 (GdkEventPrivate);
- new_private->flags = 0;
new_private->display = NULL;
g_hash_table_insert (event_hash, new_private, GUINT_TO_POINTER (1));
gdk_event_set_pointer_emulated (GdkEvent *event,
gboolean emulated)
{
- if (gdk_event_is_allocated (event))
- {
- GdkEventPrivate *private = (GdkEventPrivate *) event;
-
- if (emulated)
- private->flags |= GDK_EVENT_POINTER_EMULATED;
- else
- private->flags &= ~(GDK_EVENT_POINTER_EMULATED);
- }
+ if (emulated)
+ event->any.flags |= GDK_EVENT_POINTER_EMULATED;
+ else
+ event->any.flags &= ~(GDK_EVENT_POINTER_EMULATED);
}
/**
gboolean
gdk_event_get_pointer_emulated (GdkEvent *event)
{
- if (gdk_event_is_allocated (event))
- return (((GdkEventPrivate *) event)->flags & GDK_EVENT_POINTER_EMULATED) != 0;
-
- return FALSE;
+ return (event->any.flags & GDK_EVENT_POINTER_EMULATED) != 0;
}
/**
*new_event = *event;
if (new_event->any.window)
g_object_ref (new_event->any.window);
+ if (new_event->any.device)
+ g_object_ref (new_event->any.device);
+ if (new_event->any.source_device)
+ g_object_ref (new_event->any.source_device);
if (gdk_event_is_allocated (event))
{
GdkEventPrivate *private = (GdkEventPrivate *)event;
new_private->display = private->display;
- new_private->device = private->device ? g_object_ref (private->device) : NULL;
- new_private->source_device = private->source_device ? g_object_ref (private->source_device) : NULL;
new_private->seat = private->seat;
- new_private->tool = private->tool;
g_set_object (&new_private->user_data, private->user_data);
}
case GDK_BUTTON_RELEASE:
if (event->button.axes)
new_event->button.axes = g_memdup (event->button.axes,
- sizeof (gdouble) * gdk_device_get_n_axes (event->button.device));
+ sizeof (gdouble) * gdk_device_get_n_axes (event->any.device));
break;
case GDK_TOUCH_BEGIN:
case GDK_TOUCH_CANCEL:
if (event->touch.axes)
new_event->touch.axes = g_memdup (event->touch.axes,
- sizeof (gdouble) * gdk_device_get_n_axes (event->touch.device));
+ sizeof (gdouble) * gdk_device_get_n_axes (event->any.device));
break;
case GDK_MOTION_NOTIFY:
if (event->motion.axes)
new_event->motion.axes = g_memdup (event->motion.axes,
- sizeof (gdouble) * gdk_device_get_n_axes (event->motion.device));
+ sizeof (gdouble) * gdk_device_get_n_axes (event->any.device));
break;
default:
if (gdk_event_is_allocated (event))
{
private = (GdkEventPrivate *) event;
- g_clear_object (&private->device);
- g_clear_object (&private->source_device);
g_clear_object (&private->user_data);
}
case GDK_KEY_RELEASE:
g_free (event->key.string);
break;
-
+
case GDK_ENTER_NOTIFY:
case GDK_LEAVE_NOTIFY:
- if (event->crossing.subwindow != NULL)
- g_object_unref (event->crossing.subwindow);
+ g_clear_object (&event->crossing.subwindow);
break;
-
+
case GDK_DRAG_ENTER:
case GDK_DRAG_LEAVE:
case GDK_DRAG_MOTION:
case GDK_BUTTON_PRESS:
case GDK_BUTTON_RELEASE:
+ g_clear_object (&event->button.tool);
g_free (event->button.axes);
break;
break;
case GDK_MOTION_NOTIFY:
+ g_clear_object (&event->motion.tool);
g_free (event->motion.axes);
break;
if (event->any.window)
g_object_unref (event->any.window);
+ g_clear_object (&event->any.device);
+ g_clear_object (&event->any.source_device);
+
g_hash_table_remove (event_hash, event);
g_slice_free (GdkEventPrivate, (GdkEventPrivate*) event);
}
gdouble *value)
{
gdouble *axes;
- GdkDevice *device;
-
+
g_return_val_if_fail (event != NULL, FALSE);
if (axis_use == GDK_AXIS_X || axis_use == GDK_AXIS_Y)
x = event->crossing.x;
y = event->crossing.y;
break;
-
default:
return FALSE;
}
else if (event->any.type == GDK_BUTTON_PRESS ||
event->any.type == GDK_BUTTON_RELEASE)
{
- device = event->button.device;
axes = event->button.axes;
}
else if (event->any.type == GDK_TOUCH_BEGIN ||
event->any.type == GDK_TOUCH_END ||
event->any.type == GDK_TOUCH_CANCEL)
{
- device = event->touch.device;
axes = event->touch.axes;
}
else if (event->any.type == GDK_MOTION_NOTIFY)
{
- device = event->motion.device;
axes = event->motion.axes;
}
else
return FALSE;
- return gdk_device_get_axis (device, axes, axis_use, value);
+ return gdk_device_get_axis (event->any.device, axes, axis_use, value);
}
/**
gdk_event_set_device (GdkEvent *event,
GdkDevice *device)
{
- GdkEventPrivate *private;
-
- g_return_if_fail (gdk_event_is_allocated (event));
-
- private = (GdkEventPrivate *) event;
-
- g_set_object (&private->device, device);
-
- switch ((guint) event->any.type)
- {
- case GDK_MOTION_NOTIFY:
- event->motion.device = device;
- break;
- case GDK_BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
- event->button.device = device;
- break;
- case GDK_TOUCH_BEGIN:
- case GDK_TOUCH_UPDATE:
- case GDK_TOUCH_END:
- case GDK_TOUCH_CANCEL:
- event->touch.device = device;
- break;
- case GDK_SCROLL:
- event->scroll.device = device;
- break;
- case GDK_PROXIMITY_IN:
- case GDK_PROXIMITY_OUT:
- event->proximity.device = device;
- break;
- default:
- break;
- }
+ g_set_object (&event->any.device, device);
}
/**
{
g_return_val_if_fail (event != NULL, NULL);
- if (gdk_event_is_allocated (event))
- {
- GdkEventPrivate *private = (GdkEventPrivate *) event;
-
- if (private->device)
- return private->device;
- }
-
- switch ((guint) event->any.type)
- {
- case GDK_MOTION_NOTIFY:
- return event->motion.device;
- case GDK_BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
- return event->button.device;
- case GDK_TOUCH_BEGIN:
- case GDK_TOUCH_UPDATE:
- case GDK_TOUCH_END:
- case GDK_TOUCH_CANCEL:
- return event->touch.device;
- case GDK_SCROLL:
- return event->scroll.device;
- case GDK_PROXIMITY_IN:
- case GDK_PROXIMITY_OUT:
- return event->proximity.device;
- default:
- break;
- }
-
- /* Fallback if event has no device set */
- switch (event->any.type)
- {
- case GDK_MOTION_NOTIFY:
- case GDK_BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
- case GDK_TOUCH_BEGIN:
- case GDK_TOUCH_UPDATE:
- case GDK_TOUCH_END:
- case GDK_TOUCH_CANCEL:
- case GDK_ENTER_NOTIFY:
- case GDK_LEAVE_NOTIFY:
- case GDK_FOCUS_CHANGE:
- case GDK_DRAG_ENTER:
- case GDK_DRAG_LEAVE:
- case GDK_DRAG_MOTION:
- case GDK_DRAG_STATUS:
- case GDK_DROP_START:
- case GDK_DROP_FINISHED:
- case GDK_GRAB_BROKEN:
- case GDK_KEY_PRESS:
- case GDK_KEY_RELEASE:
- {
- GdkDisplay *display;
- GdkSeat *seat;
-
- g_warning ("Event with type %d not holding a GdkDevice. "
- "It is most likely synthesized outside Gdk/GTK+",
- event->any.type);
-
- display = gdk_window_get_display (event->any.window);
- seat = gdk_display_get_default_seat (display);
-
- if (event->any.type == GDK_KEY_PRESS ||
- event->any.type == GDK_KEY_RELEASE)
- return gdk_seat_get_keyboard (seat);
- else
- return gdk_seat_get_pointer (seat);
- }
- break;
- default:
- return NULL;
- }
+ return event->any.device;
}
/**
gdk_event_set_source_device (GdkEvent *event,
GdkDevice *device)
{
- GdkEventPrivate *private;
-
- g_return_if_fail (gdk_event_is_allocated (event));
- g_return_if_fail (GDK_IS_DEVICE (device));
-
- private = (GdkEventPrivate *) event;
-
- g_set_object (&private->source_device, device);
+ g_set_object (&event->any.source_device, device);
}
/**
GdkDevice *
gdk_event_get_source_device (const GdkEvent *event)
{
- GdkEventPrivate *private;
-
g_return_val_if_fail (event != NULL, NULL);
- if (!gdk_event_is_allocated (event))
- return NULL;
-
- private = (GdkEventPrivate *) event;
-
- if (private->source_device)
- return private->source_device;
+ if (event->any.source_device)
+ return event->any.source_device;
/* Fallback to event device */
return gdk_event_get_device (event);
for (tmp_list = display->queued_events; tmp_list; tmp_list = tmp_list->next)
{
- GdkEventPrivate *event = tmp_list->data;
+ GdkEvent *event = tmp_list->data;
- if (event->event.any.type == GDK_WINDOW_STATE &&
- event->event.any.window == window)
+ if (event->any.type == GDK_WINDOW_STATE &&
+ event->any.window == window)
return tmp_list;
}
GdkDeviceTool *
gdk_event_get_device_tool (const GdkEvent *event)
{
- GdkEventPrivate *private;
-
- if (!gdk_event_is_allocated (event))
- return NULL;
+ if (event->any.type == GDK_BUTTON_PRESS ||
+ event->any.type == GDK_BUTTON_RELEASE)
+ return event->button.tool;
+ else if (event->any.type == GDK_MOTION_NOTIFY)
+ return event->motion.tool;
- private = (GdkEventPrivate *) event;
- return private->tool;
+ return NULL;
}
/**
gdk_event_set_device_tool (GdkEvent *event,
GdkDeviceTool *tool)
{
- GdkEventPrivate *private;
-
- if (!gdk_event_is_allocated (event))
- return;
-
- private = (GdkEventPrivate *) event;
- private->tool = tool;
+ if (event->any.type == GDK_BUTTON_PRESS ||
+ event->any.type == GDK_BUTTON_RELEASE)
+ event->button.tool = tool;
+ else if (event->any.type == GDK_MOTION_NOTIFY)
+ event->motion.tool = tool;
}
void
gdk_event_set_scancode (GdkEvent *event,
guint16 scancode)
{
- GdkEventPrivate *private = (GdkEventPrivate *) event;
-
- private->key_scancode = scancode;
+ if (event->any.type == GDK_KEY_PRESS ||
+ event->any.type == GDK_KEY_RELEASE)
+ event->key.key_scancode = scancode;
}
/**
int
gdk_event_get_scancode (GdkEvent *event)
{
- GdkEventPrivate *private;
-
- if (!gdk_event_is_allocated (event))
- return 0;
+ if (event->any.type == GDK_KEY_PRESS ||
+ event->any.type == GDK_KEY_RELEASE)
+ return event->key.key_scancode;
- private = (GdkEventPrivate *) event;
- return private->key_scancode;
+ return 0;
}
void
gdk_event_set_seat (event, gdk_device_get_seat (device));
gdk_event_set_device_tool (event, source_device->last_tool);
- event->button.axes = translate_axes (event->button.device,
+ event->button.axes = translate_axes (device,
event->button.x,
event->button.y,
event->any.window,
&xev->valuators);
- if (gdk_device_get_mode (event->button.device) == GDK_MODE_WINDOW)
+ if (gdk_device_get_mode (device) == GDK_MODE_WINDOW)
{
- GdkDevice *device = event->button.device;
-
/* Update event coordinates from axes */
gdk_device_get_axis (device, event->button.axes, GDK_AXIS_X, &event->button.x);
gdk_device_get_axis (device, event->button.axes, GDK_AXIS_Y, &event->button.y);
event->scroll.delta_x = delta_x;
event->scroll.delta_y = delta_y;
- event->scroll.device = device;
+ gdk_event_set_device (event, device);
gdk_event_set_source_device (event, source_device);
gdk_event_set_seat (event, gdk_device_get_seat (device));
event->motion.x_root = (gdouble) xev->root_x / scale;
event->motion.y_root = (gdouble) xev->root_y / scale;
- event->motion.device = device;
+ gdk_event_set_device (event, device);
gdk_event_set_source_device (event, source_device);
gdk_event_set_seat (event, gdk_device_get_seat (device));
gdk_event_set_device_tool (event, source_device->last_tool);
/* There doesn't seem to be motion hints in XI */
event->motion.is_hint = FALSE;
- event->motion.axes = translate_axes (event->motion.device,
+ event->motion.axes = translate_axes (device,
event->motion.x,
event->motion.y,
event->any.window,
&xev->valuators);
- if (gdk_device_get_mode (event->motion.device) == GDK_MODE_WINDOW)
+ if (gdk_device_get_mode (device) == GDK_MODE_WINDOW)
{
/* Update event coordinates from axes */
- gdk_device_get_axis (event->motion.device, event->motion.axes, GDK_AXIS_X, &event->motion.x);
- gdk_device_get_axis (event->motion.device, event->motion.axes, GDK_AXIS_Y, &event->motion.y);
+ gdk_device_get_axis (device, event->motion.axes, GDK_AXIS_X, &event->motion.x);
+ gdk_device_get_axis (device, event->motion.axes, GDK_AXIS_Y, &event->motion.y);
}
}
break;
gdk_event_set_source_device (event, source_device);
gdk_event_set_seat (event, gdk_device_get_seat (device));
- event->touch.axes = translate_axes (event->touch.device,
+ event->touch.axes = translate_axes (device,
event->touch.x,
event->touch.y,
event->any.window,
&xev->valuators);
- if (gdk_device_get_mode (event->touch.device) == GDK_MODE_WINDOW)
+ if (gdk_device_get_mode (device) == GDK_MODE_WINDOW)
{
- GdkDevice *device = event->touch.device;
-
/* Update event coordinates from axes */
gdk_device_get_axis (device, event->touch.axes, GDK_AXIS_X, &event->touch.x);
gdk_device_get_axis (device, event->touch.axes, GDK_AXIS_Y, &event->touch.y);
gdk_event_set_pointer_emulated (event, TRUE);
}
- event->touch.axes = translate_axes (event->touch.device,
+ event->touch.axes = translate_axes (device,
event->touch.x,
event->touch.y,
event->any.window,
&xev->valuators);
- if (gdk_device_get_mode (event->touch.device) == GDK_MODE_WINDOW)
+ if (gdk_device_get_mode (device) == GDK_MODE_WINDOW)
{
- GdkDevice *device = event->touch.device;
-
/* Update event coordinates from axes */
gdk_device_get_axis (device, event->touch.axes, GDK_AXIS_X, &event->touch.x);
gdk_device_get_axis (device, event->touch.axes, GDK_AXIS_Y, &event->touch.y);