Deal gracefully with unowned selections
If a selection looses its owner without a replacement, owner is None, which we did not handle very well. https://bugzilla.gnome.org/show_bug.cgi?id=641042
This commit is contained in:
@ -568,7 +568,9 @@ gdk_event_copy (const GdkEvent *event)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case GDK_OWNER_CHANGE:
|
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;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -641,6 +643,7 @@ gdk_event_free (GdkEvent *event)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case GDK_OWNER_CHANGE:
|
case GDK_OWNER_CHANGE:
|
||||||
|
if (event->owner_change.owner)
|
||||||
g_object_unref (event->owner_change.owner);
|
g_object_unref (event->owner_change.owner);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@ -819,15 +819,15 @@ struct _GdkEventSelection
|
|||||||
/**
|
/**
|
||||||
* GdkEventOwnerChange:
|
* GdkEventOwnerChange:
|
||||||
* @type: the type of the event (%GDK_OWNER_CHANGE).
|
* @type: the type of the event (%GDK_OWNER_CHANGE).
|
||||||
* @window: the window which received the event.
|
* @window: the window which received the event
|
||||||
* @send_event: %TRUE if the event was sent explicitly (e.g. using
|
* @send_event: %TRUE if the event was sent explicitly (e.g. using
|
||||||
* <function>XSendEvent</function>).
|
* <function>XSendEvent</function>)
|
||||||
* @owner: the new owner of the selection.
|
* @owner: the new owner of the selection, or %NULL if there is none
|
||||||
* @reason: the reason for the ownership change as a #GdkOwnerChange value.
|
* @reason: the reason for the ownership change as a #GdkOwnerChange value
|
||||||
* @selection: the atom identifying the selection.
|
* @selection: the atom identifying the selection
|
||||||
* @time: the timestamp of the event.
|
* @time: the timestamp of the event
|
||||||
* @selection_time: the time at which the selection ownership was taken
|
* @selection_time: the time at which the selection ownership was taken
|
||||||
* over.
|
* over
|
||||||
*
|
*
|
||||||
* Generated when the owner of a selection changes. On X11, this
|
* Generated when the owner of a selection changes. On X11, this
|
||||||
* information is only available if the X server supports the XFIXES
|
* information is only available if the X server supports the XFIXES
|
||||||
|
|||||||
@ -919,8 +919,11 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
|
|||||||
|
|
||||||
event->owner_change.type = GDK_OWNER_CHANGE;
|
event->owner_change.type = GDK_OWNER_CHANGE;
|
||||||
event->owner_change.window = window;
|
event->owner_change.window = window;
|
||||||
|
if (selection_notify->owner != None)
|
||||||
event->owner_change.owner = gdk_x11_window_foreign_new_for_display (display,
|
event->owner_change.owner = gdk_x11_window_foreign_new_for_display (display,
|
||||||
selection_notify->owner);
|
selection_notify->owner);
|
||||||
|
else
|
||||||
|
event->owner_change.owner = NULL;
|
||||||
event->owner_change.reason = selection_notify->subtype;
|
event->owner_change.reason = selection_notify->subtype;
|
||||||
event->owner_change.selection =
|
event->owner_change.selection =
|
||||||
gdk_x11_xatom_to_atom_for_display (display,
|
gdk_x11_xatom_to_atom_for_display (display,
|
||||||
|
|||||||
Reference in New Issue
Block a user