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,
break;
case GDK_OWNER_CHANGE:
- new_event->owner_change.owner = g_object_ref (event->owner_change.owner);
+ 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:
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;
break;
case GDK_OWNER_CHANGE:
- g_object_unref (event->owner_change.owner);
+ 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);