break;
case GDK_BUTTON_PRESS:
+ case GDK_2BUTTON_PRESS:
+ case GDK_3BUTTON_PRESS:
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->motion.device));
break;
+ case GDK_OWNER_CHANGE:
+ new_event->owner_change.owner = event->owner_change.owner;
+ if (new_event->owner_change.owner)
+ g_object_ref (new_event->owner_change.owner);
+ break;
+
+ case GDK_SELECTION_CLEAR:
+ case GDK_SELECTION_NOTIFY:
+ case GDK_SELECTION_REQUEST:
+ new_event->selection.requestor = event->selection.requestor;
+ if (new_event->selection.requestor)
+ g_object_unref (new_event->selection.requestor);
+ break;
+
default:
break;
}
void
gdk_event_free (GdkEvent *event)
{
+ GdkDisplay *display;
+
g_return_if_fail (event != NULL);
if (event->any.window)
break;
case GDK_BUTTON_PRESS:
+ case GDK_2BUTTON_PRESS:
+ case GDK_3BUTTON_PRESS:
case GDK_BUTTON_RELEASE:
g_free (event->button.axes);
break;
g_free (event->setting.name);
break;
+ case GDK_OWNER_CHANGE:
+ if (event->owner_change.owner)
+ g_object_unref (event->owner_change.owner);
+ break;
+
+ case GDK_SELECTION_CLEAR:
+ case GDK_SELECTION_NOTIFY:
+ case GDK_SELECTION_REQUEST:
+ if (event->selection.requestor)
+ g_object_unref (event->selection.requestor);
+ break;
+
default:
break;
}
- _gdk_display_event_data_free (gdk_display_get_default (), event);
+ display = gdk_display_get_default ();
+ if (display)
+ _gdk_display_event_data_free (display, event);
g_hash_table_remove (event_hash, event);
g_slice_free (GdkEventPrivate, (GdkEventPrivate*) event);