[gtk+] Deal gracefully with unowned selections
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Deal gracefully with unowned selections
- Date: Tue, 1 Feb 2011 00:37:15 +0000 (UTC)
commit b52db73f59dc72dd81a01a323893a738303a775d
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Jan 31 19:35:51 2011 -0500
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
gdk/gdkevents.c | 7 +++++--
gdk/gdkevents.h | 14 +++++++-------
gdk/x11/gdkdisplay-x11.c | 7 +++++--
3 files changed, 17 insertions(+), 11 deletions(-)
---
diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c
index 66a14ec..cf60349 100644
--- a/gdk/gdkevents.c
+++ b/gdk/gdkevents.c
@@ -568,7 +568,9 @@ gdk_event_copy (const GdkEvent *event)
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;
default:
@@ -641,7 +643,8 @@ gdk_event_free (GdkEvent *event)
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;
default:
diff --git a/gdk/gdkevents.h b/gdk/gdkevents.h
index 4902601..91a5c8e 100644
--- a/gdk/gdkevents.h
+++ b/gdk/gdkevents.h
@@ -819,15 +819,15 @@ struct _GdkEventSelection
/**
* GdkEventOwnerChange:
* @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
- * <function>XSendEvent</function>).
- * @owner: the new owner of the selection.
- * @reason: the reason for the ownership change as a #GdkOwnerChange value.
- * @selection: the atom identifying the selection.
- * @time: the timestamp of the event.
+ * <function>XSendEvent</function>)
+ * @owner: the new owner of the selection, or %NULL if there is none
+ * @reason: the reason for the ownership change as a #GdkOwnerChange value
+ * @selection: the atom identifying the selection
+ * @time: the timestamp of the event
* @selection_time: the time at which the selection ownership was taken
- * over.
+ * over
*
* Generated when the owner of a selection changes. On X11, this
* information is only available if the X server supports the XFIXES
diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
index 20735cc..23dd567 100644
--- a/gdk/x11/gdkdisplay-x11.c
+++ b/gdk/x11/gdkdisplay-x11.c
@@ -919,8 +919,11 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
event->owner_change.type = GDK_OWNER_CHANGE;
event->owner_change.window = window;
- event->owner_change.owner = gdk_x11_window_foreign_new_for_display (display,
- selection_notify->owner);
+ if (selection_notify->owner != None)
+ event->owner_change.owner = gdk_x11_window_foreign_new_for_display (display,
+ selection_notify->owner);
+ else
+ event->owner_change.owner = NULL;
event->owner_change.reason = selection_notify->subtype;
event->owner_change.selection =
gdk_x11_xatom_to_atom_for_display (display,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]