Commit b52db73f authored by Matthias Clasen's avatar Matthias Clasen
Browse files

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
parent fc43e42b
...@@ -568,7 +568,9 @@ gdk_event_copy (const GdkEvent *event) ...@@ -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) ...@@ -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 ...@@ -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, ...@@ -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,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment