[gtk+] gdk: Remove gdk_selection_convert()



commit 54f9aef0d43299c9a5c02b45641a80f3657e9981
Author: Benjamin Otte <otte redhat com>
Date:   Thu Dec 14 00:43:19 2017 +0100

    gdk: Remove gdk_selection_convert()
    
    It's not used anymore.

 docs/reference/gdk/gdk4-sections.txt |    5 -
 docs/reference/gtk/gtk4-sections.txt |    3 -
 gdk/broadway/gdkdisplay-broadway.c   |    3 -
 gdk/broadway/gdkprivate-broadway.h   |   16 -
 gdk/broadway/gdkselection-broadway.c |   43 ---
 gdk/gdkdisplayprivate.h              |   17 -
 gdk/gdkdnd.c                         |   14 -
 gdk/gdkevents.c                      |   80 ----
 gdk/gdkevents.h                      |   18 -
 gdk/gdkeventsprivate.h               |   28 --
 gdk/gdkselection.c                   |  104 ------
 gdk/gdkselection.h                   |   40 --
 gdk/gdkwindow.c                      |    4 -
 gdk/mir/gdkmirdisplay.c              |  324 -----------------
 gdk/quartz/gdkdisplay-quartz.c       |    2 -
 gdk/quartz/gdkdisplay-quartz.h       |   11 -
 gdk/quartz/gdkselection-quartz.c     |   21 --
 gdk/wayland/gdkdisplay-wayland.c     |    3 -
 gdk/wayland/gdkselection-wayland.c   |  373 -------------------
 gdk/x11/gdkdisplay-x11.c             |   20 -
 gdk/x11/gdkprivate-x11.h             |   17 -
 gdk/x11/gdkselection-x11.c           |  154 --------
 gtk/gtkdnd.c                         |    1 -
 gtk/gtkmain.c                        |   15 +-
 gtk/gtkselection.c                   |  660 ----------------------------------
 gtk/gtkselection.h                   |    8 -
 gtk/gtkselectionprivate.h            |    7 -
 gtk/gtkwidget.c                      |   29 +--
 gtk/gtkwidget.h                      |    6 -
 tests/testgtk.c                      |   93 -----
 30 files changed, 2 insertions(+), 2117 deletions(-)
---
diff --git a/docs/reference/gdk/gdk4-sections.txt b/docs/reference/gdk/gdk4-sections.txt
index f4a40d8..7036a07 100644
--- a/docs/reference/gdk/gdk4-sections.txt
+++ b/docs/reference/gdk/gdk4-sections.txt
@@ -425,10 +425,6 @@ GDK_SELECTION_TYPE_INTEGER
 GDK_SELECTION_TYPE_PIXMAP
 GDK_SELECTION_TYPE_WINDOW
 GDK_SELECTION_TYPE_STRING
-gdk_selection_convert
-gdk_selection_property_get
-gdk_selection_send_notify
-gdk_selection_send_notify_for_display
 </SECTION>
 
 <SECTION>
@@ -763,7 +759,6 @@ GdkEventCrossing
 GdkEventFocus
 GdkEventConfigure
 GdkEventProperty
-GdkEventSelection
 GdkEventDND
 GdkEventProximity
 GdkEventWindowState
diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt
index de57bc1..81bcf7a 100644
--- a/docs/reference/gtk/gtk4-sections.txt
+++ b/docs/reference/gtk/gtk4-sections.txt
@@ -5185,7 +5185,6 @@ gtk_css_section_get_type
 <FILE>gtkselection</FILE>
 <TITLE>Selections</TITLE>
 GtkSelectionData
-gtk_selection_convert
 gtk_selection_data_set
 gtk_selection_data_set_text
 gtk_selection_data_get_text
@@ -5212,12 +5211,10 @@ gtk_selection_data_get_target
 gtk_targets_include_image
 gtk_targets_include_text
 gtk_targets_include_uri
-gtk_selection_remove_all
 gtk_selection_data_copy
 gtk_selection_data_free
 <SUBSECTION Standard>
 GTK_TYPE_SELECTION_DATA
-GTK_TYPE_TARGET_LIST
 <SUBSECTION Private>
 gtk_selection_data_get_type
 </SECTION>
diff --git a/gdk/broadway/gdkdisplay-broadway.c b/gdk/broadway/gdkdisplay-broadway.c
index f3335be..43330d6 100644
--- a/gdk/broadway/gdkdisplay-broadway.c
+++ b/gdk/broadway/gdkdisplay-broadway.c
@@ -573,9 +573,6 @@ gdk_broadway_display_class_init (GdkBroadwayDisplayClass * class)
   display_class->notify_startup_complete = gdk_broadway_display_notify_startup_complete;
   display_class->create_window_impl = _gdk_broadway_display_create_window_impl;
   display_class->get_keymap = _gdk_broadway_display_get_keymap;
-  display_class->send_selection_notify = _gdk_broadway_display_send_selection_notify;
-  display_class->get_selection_property = _gdk_broadway_display_get_selection_property;
-  display_class->convert_selection = _gdk_broadway_display_convert_selection;
   display_class->text_property_to_utf8_list = _gdk_broadway_display_text_property_to_utf8_list;
   display_class->utf8_to_string_target = _gdk_broadway_display_utf8_to_string_target;
 
diff --git a/gdk/broadway/gdkprivate-broadway.h b/gdk/broadway/gdkprivate-broadway.h
index 5639ad0..3cdc55e 100644
--- a/gdk/broadway/gdkprivate-broadway.h
+++ b/gdk/broadway/gdkprivate-broadway.h
@@ -123,22 +123,6 @@ void       _gdk_broadway_display_create_window_impl     (GdkDisplay    *display,
                                                         GdkWindow     *real_parent,
                                                         GdkEventMask   event_mask,
                                                         GdkWindowAttr *attributes);
-gint _gdk_broadway_display_get_selection_property (GdkDisplay *display,
-                                                  GdkWindow  *requestor,
-                                                  guchar    **data,
-                                                  GdkAtom    *ret_type,
-                                                  gint       *ret_format);
-void _gdk_broadway_display_send_selection_notify (GdkDisplay       *display,
-                                                 GdkWindow       *requestor,
-                                                 GdkAtom          selection,
-                                                 GdkAtom          target,
-                                                 GdkAtom          property, 
-                                                 guint32          time);
-void _gdk_broadway_display_convert_selection (GdkDisplay *display,
-                                             GdkWindow *requestor,
-                                             GdkAtom    selection,
-                                             GdkAtom    target,
-                                             guint32    time);
 gint _gdk_broadway_display_text_property_to_utf8_list (GdkDisplay    *display,
                                                       GdkAtom        encoding,
                                                       gint           format,
diff --git a/gdk/broadway/gdkselection-broadway.c b/gdk/broadway/gdkselection-broadway.c
index 843c8a8..9c5a4ab 100644
--- a/gdk/broadway/gdkselection-broadway.c
+++ b/gdk/broadway/gdkselection-broadway.c
@@ -33,49 +33,6 @@
 #include <string.h>
 
 
-void
-_gdk_broadway_display_convert_selection (GdkDisplay *display,
-                                        GdkWindow *requestor,
-                                        GdkAtom    selection,
-                                        GdkAtom    target,
-                                        guint32    time)
-{
-  g_warning ("convert_selection not implemented");
-}
-
-gint
-_gdk_broadway_display_get_selection_property (GdkDisplay *display,
-                                             GdkWindow  *requestor,
-                                             guchar    **data,
-                                             GdkAtom    *ret_type,
-                                             gint       *ret_format)
-{
-  if (ret_type)
-    *ret_type = NULL;
-  if (ret_format)
-    *ret_format = 0;
-  if (data)
-    *data = NULL;
-
-  g_warning ("get_selection_property not implemented");
-
-  return 0;
-}
-
-void
-_gdk_broadway_display_send_selection_notify (GdkDisplay      *display,
-                                            GdkWindow       *requestor,
-                                            GdkAtom          selection,
-                                            GdkAtom          target,
-                                            GdkAtom          property, 
-                                            guint32          time)
-{
-  g_return_if_fail (GDK_IS_DISPLAY (display));
-
-  g_warning ("send_selection_notify not implemented");
-}
-
-
 static gint
 make_list (const gchar  *text,
            gint          length,
diff --git a/gdk/gdkdisplayprivate.h b/gdk/gdkdisplayprivate.h
index 3dd13a8..df181e0 100644
--- a/gdk/gdkdisplayprivate.h
+++ b/gdk/gdkdisplayprivate.h
@@ -167,23 +167,6 @@ struct _GdkDisplayClass
 
   GdkKeymap *                (*get_keymap)         (GdkDisplay    *display);
 
-  void                       (*send_selection_notify) (GdkDisplay *dispay,
-                                                       GdkWindow        *requestor,
-                                                       GdkAtom          selection,
-                                                       GdkAtom          target,
-                                                       GdkAtom          property,
-                                                       guint32          time);
-  gint                       (*get_selection_property) (GdkDisplay  *display,
-                                                        GdkWindow   *requestor,
-                                                        guchar     **data,
-                                                        GdkAtom     *type,
-                                                        gint        *format);
-  void                       (*convert_selection)      (GdkDisplay  *display,
-                                                        GdkWindow   *requestor,
-                                                        GdkAtom      selection,
-                                                        GdkAtom      target,
-                                                        guint32      time);
-
   gint                   (*text_property_to_utf8_list) (GdkDisplay     *display,
                                                         GdkAtom         encoding,
                                                         gint            format,
diff --git a/gdk/gdkdnd.c b/gdk/gdkdnd.c
index 2344b7e..2b5d40c 100644
--- a/gdk/gdkdnd.c
+++ b/gdk/gdkdnd.c
@@ -1032,7 +1032,6 @@ gboolean
 gdk_drag_context_handle_dest_event (GdkEvent *event)
 {
   GdkDragContext *context = NULL;
-  GList *l;
 
   switch ((guint) event->type)
     {
@@ -1040,19 +1039,6 @@ gdk_drag_context_handle_dest_event (GdkEvent *event)
     case GDK_DROP_START:
       context = event->dnd.context;
       break;
-    case GDK_SELECTION_NOTIFY:
-      for (l = contexts; l; l = l->next)
-        {
-          GdkDragContext *c = l->data;
-
-          if (!c->is_source &&
-              event->selection.selection == gdk_drag_get_selection (c))
-            {
-              context = c;
-              break;
-            }
-        }
-      break;
     default:
       return FALSE;
     }
diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c
index 624c1d2..6afaf6c 100644
--- a/gdk/gdkevents.c
+++ b/gdk/gdkevents.c
@@ -587,12 +587,6 @@ gdk_event_copy (const GdkEvent *event)
                                            sizeof (gdouble) * gdk_device_get_n_axes (event->motion.device));
       break;
 
-    case GDK_SELECTION_NOTIFY:
-      new_event->selection.requestor = event->selection.requestor;
-      if (new_event->selection.requestor)
-        g_object_ref (new_event->selection.requestor);
-      break;
-
     default:
       break;
     }
@@ -673,11 +667,6 @@ gdk_event_free (GdkEvent *event)
       g_free (event->motion.axes);
       break;
 
-    case GDK_SELECTION_NOTIFY:
-      if (event->selection.requestor)
-        g_object_unref (event->selection.requestor);
-      break;
-
     default:
       break;
     }
@@ -750,8 +739,6 @@ gdk_event_get_time (const GdkEvent *event)
        return event->crossing.time;
       case GDK_PROPERTY_NOTIFY:
        return event->property.time;
-      case GDK_SELECTION_NOTIFY:
-       return event->selection.time;
       case GDK_PROXIMITY_IN:
       case GDK_PROXIMITY_OUT:
        return event->proximity.time;
@@ -846,7 +833,6 @@ gdk_event_get_state (const GdkEvent        *event,
       case GDK_CLIENT_EVENT:
       case GDK_CONFIGURE:
       case GDK_FOCUS_CHANGE:
-      case GDK_SELECTION_NOTIFY:
       case GDK_PROXIMITY_IN:
       case GDK_PROXIMITY_OUT:
       case GDK_DAMAGE:
@@ -2699,72 +2685,6 @@ gdk_event_get_property (const GdkEvent   *event,
 }
 
 /**
- * gdk_event_get_selection:
- * @event: a #GdkEvent
- * @selection: (out):
- * 
- * Returns: %TRUE on success, otherwise %FALSE
- **/
-gboolean
-gdk_event_get_selection (const GdkEvent   *event,
-                         GdkAtom          *selection)
-{
-  if (!event)
-    return FALSE;
-
-  if (event->type == GDK_SELECTION_NOTIFY)
-    {
-      *selection = event->selection.selection;
-      return TRUE;
-    }
-
-  return FALSE;
-}
-
-/**
- * gdk_event_get_selection_property:
- * @event: a #GdkEvent
- * @property: (out) (optional):
- * @target: (out) (optional):
- * @requestor: (out) (optional) (transfer none):
- * 
- * Returns: %TRUE on success, otherwise %FALSE
- **/
-gboolean
-gdk_event_get_selection_property (const GdkEvent  *event,
-                                  GdkAtom         *property,
-                                  GdkAtom         *target,
-                                  GdkWindow      **requestor)
-{
-  if (!event)
-    return FALSE;
-
-  if (event->type == GDK_SELECTION_NOTIFY)
-    {
-      if (property)
-        *property = event->selection.property;
-      if (target)
-        *target = event->selection.target;
-      if (requestor)
-        *requestor = event->selection.requestor;
-      return TRUE;
-    }
-
-  return FALSE;
-}
-
-void
-gdk_event_set_selection (GdkEvent  *event,
-                         GdkWindow *window,
-                         GdkAtom    selection,
-                         guint32    time)
-{
-  event->selection.window = g_object_ref (window);
-  event->selection.selection = selection;
-  event->selection.time = time;
-}
-
-/**
  * gdk_event_get_axes:
  * @event: a #GdkEvent
  * @axes: (transfer none) (out) (array length=n_axes): the array of values for all axes
diff --git a/gdk/gdkevents.h b/gdk/gdkevents.h
index f2893cc..88e1980 100644
--- a/gdk/gdkevents.h
+++ b/gdk/gdkevents.h
@@ -132,7 +132,6 @@ typedef struct _GdkEventFocus           GdkEventFocus;
 typedef struct _GdkEventCrossing    GdkEventCrossing;
 typedef struct _GdkEventConfigure   GdkEventConfigure;
 typedef struct _GdkEventProperty    GdkEventProperty;
-typedef struct _GdkEventSelection   GdkEventSelection;
 typedef struct _GdkEventOwnerChange GdkEventOwnerChange;
 typedef struct _GdkEventProximity   GdkEventProximity;
 typedef struct _GdkEventDND         GdkEventDND;
@@ -233,9 +232,6 @@ typedef GdkFilterReturn (*GdkFilterFunc) (GdkXEvent *xevent,
  * @GDK_MAP: the window has been mapped.
  * @GDK_UNMAP: the window has been unmapped.
  * @GDK_PROPERTY_NOTIFY: a property on the window has been changed or deleted.
- * @GDK_SELECTION_CLEAR: the application has lost ownership of a selection.
- * @GDK_SELECTION_REQUEST: another application has requested a selection.
- * @GDK_SELECTION_NOTIFY: a selection has been received.
  * @GDK_PROXIMITY_IN: an input device has moved into contact with a sensing
  *   surface (e.g. a touchscreen or graphics tablet).
  * @GDK_PROXIMITY_OUT: an input device has moved out of contact with a sensing
@@ -304,7 +300,6 @@ typedef enum
   GDK_MAP              = 14,
   GDK_UNMAP            = 15,
   GDK_PROPERTY_NOTIFY  = 16,
-  GDK_SELECTION_NOTIFY = 19,
   GDK_PROXIMITY_IN     = 20,
   GDK_PROXIMITY_OUT    = 21,
   GDK_DRAG_ENTER        = 22,
@@ -715,19 +710,6 @@ gboolean       gdk_event_get_property (const GdkEvent   *event,
                                        GdkAtom          *property,
                                        GdkPropertyState *state);
 GDK_AVAILABLE_IN_3_92
-gboolean       gdk_event_get_selection (const GdkEvent   *event,
-                                        GdkAtom          *selection);
-GDK_AVAILABLE_IN_3_92
-gboolean       gdk_event_get_selection_property (const GdkEvent  *event,
-                                                 GdkAtom         *property,
-                                                 GdkAtom         *target,
-                                                 GdkWindow      **requestor);
-GDK_AVAILABLE_IN_3_92
-void           gdk_event_set_selection (GdkEvent  *event,
-                                        GdkWindow *window,
-                                        GdkAtom    selection,
-                                        guint32    time);
-GDK_AVAILABLE_IN_3_92
 gboolean       gdk_event_get_axes      (GdkEvent  *event,
                                         gdouble  **axes,
                                         guint     *n_axes);
diff --git a/gdk/gdkeventsprivate.h b/gdk/gdkeventsprivate.h
index bf57607..6681fe3 100644
--- a/gdk/gdkeventsprivate.h
+++ b/gdk/gdkeventsprivate.h
@@ -405,32 +405,6 @@ struct _GdkEventProperty
 };
 
 /**
- * GdkEventSelection:
- * @type: the type of the event (%GDK_SELECTION_NOTIFY).
- * @window: the window which received the event.
- * @send_event: %TRUE if the event was sent explicitly.
- * @selection: the selection.
- * @target: the target to which the selection should be converted.
- * @property: the property in which to place the result of the conversion.
- * @time: the time of the event in milliseconds.
- * @requestor: the window on which to place @property or %NULL if none.
- *
- * Generated when a selection is requested or ownership of a selection
- * is taken over by another client application.
- */
-struct _GdkEventSelection
-{
-  GdkEventType type;
-  GdkWindow *window;
-  gint8 send_event;
-  GdkAtom selection;
-  GdkAtom target;
-  GdkAtom property;
-  guint32 time;
-  GdkWindow *requestor;
-};
-
-/**
  * GdkEventProximity:
  * @type: the type of the event (%GDK_PROXIMITY_IN or %GDK_PROXIMITY_OUT).
  * @window: the window which received the event.
@@ -708,7 +682,6 @@ struct _GdkEventPadGroupMode {
  * @focus_change: a #GdkEventFocus
  * @configure: a #GdkEventConfigure
  * @property: a #GdkEventProperty
- * @selection: a #GdkEventSelection
  * @proximity: a #GdkEventProximity
  * @dnd: a #GdkEventDND
  * @window_state: a #GdkEventWindowState
@@ -764,7 +737,6 @@ union _GdkEvent
   GdkEventFocus                    focus_change;
   GdkEventConfigure        configure;
   GdkEventProperty         property;
-  GdkEventSelection        selection;
   GdkEventProximity        proximity;
   GdkEventDND               dnd;
   GdkEventWindowState       window_state;
diff --git a/gdk/gdkselection.c b/gdk/gdkselection.c
index 76c5f19..09e4950 100644
--- a/gdk/gdkselection.c
+++ b/gdk/gdkselection.c
@@ -61,110 +61,6 @@
  */
 
 /**
- * gdk_selection_send_notify:
- * @requestor: window to which to deliver response.
- * @selection: selection that was requested.
- * @target: target that was selected.
- * @property: property in which the selection owner stored the
- *   data, or %NULL to indicate that the request
- *   was rejected.
- * @time_: timestamp.
- *
- * Sends a response to SelectionRequest event.
- */
-void
-gdk_selection_send_notify (GdkWindow      *requestor,
-                          GdkAtom         selection,
-                          GdkAtom         target,
-                          GdkAtom         property,
-                          guint32         time)
-{
-  gdk_selection_send_notify_for_display (gdk_window_get_display (requestor),
-                                        requestor, selection, 
-                                        target, property, time);
-}
-
-/**
- * gdk_selection_send_notify_for_display:
- * @display: the #GdkDisplay where @requestor is realized
- * @requestor: window to which to deliver response
- * @selection: selection that was requested
- * @target: target that was selected
- * @property: property in which the selection owner stored the data,
- *            or %NULL to indicate that the request was rejected
- * @time_: timestamp
- *
- * Send a response to SelectionRequest event.
- *
- * Since: 2.2
- */
-void
-gdk_selection_send_notify_for_display (GdkDisplay       *display,
-                                       GdkWindow        *requestor,
-                                       GdkAtom          selection,
-                                       GdkAtom          target,
-                                       GdkAtom          property,
-                                       guint32          time_)
-{
-  g_return_if_fail (GDK_IS_DISPLAY (display));
-
-  GDK_DISPLAY_GET_CLASS (display)
-    ->send_selection_notify (display, requestor, selection,target, property, time_);
-}
-
-/**
- * gdk_selection_property_get: (skip)
- * @requestor: the window on which the data is stored
- * @data: location to store a pointer to the retrieved data.
-       If the retrieval failed, %NULL we be stored here, otherwise, it
-       will be non-%NULL and the returned data should be freed with g_free()
-       when you are finished using it. The length of the
-       allocated memory is one more than the length
-       of the returned data, and the final byte will always
-       be zero, to ensure nul-termination of strings
- * @prop_type: location to store the type of the property
- * @prop_format: location to store the format of the property
- *
- * Retrieves selection data that was stored by the selection
- * data in response to a call to gdk_selection_convert(). This function
- * will not be used by applications, who should use the #GtkClipboard
- * API instead.
- *
- * Returns: the length of the retrieved data.
- */
-gint
-gdk_selection_property_get (GdkWindow  *requestor,
-                            guchar    **data,
-                            GdkAtom    *ret_type,
-                            gint       *ret_format)
-{
-  GdkDisplay *display;
-
-  g_return_val_if_fail (GDK_IS_WINDOW (requestor), 0);
-
-  display = gdk_window_get_display (requestor);
-
-  return GDK_DISPLAY_GET_CLASS (display)
-           ->get_selection_property (display, requestor, data, ret_type, ret_format);
-}
-
-void
-gdk_selection_convert (GdkWindow *requestor,
-                       GdkAtom    selection,
-                       GdkAtom    target,
-                       guint32    time)
-{
-  GdkDisplay *display;
-
-  g_return_if_fail (selection != NULL);
-
-  display = gdk_window_get_display (requestor);
-
-  GDK_DISPLAY_GET_CLASS (display)
-    ->convert_selection (display, requestor, selection, target, time);
-}
-
-/**
  * gdk_text_property_to_utf8_list_for_display:
  * @display:  a #GdkDisplay
  * @encoding: an atom representing the encoding of the text
diff --git a/gdk/gdkselection.h b/gdk/gdkselection.h
index 7d6e7d9..5728f92 100644
--- a/gdk/gdkselection.h
+++ b/gdk/gdkselection.h
@@ -152,46 +152,6 @@ G_BEGIN_DECLS
 /* Selections
  */
 
-/**
- * gdk_selection_convert:
- * @requestor: a #GdkWindow.
- * @selection: an atom identifying the selection to get the
- *   contents of.
- * @target: the form in which to retrieve the selection.
- * @time_: the timestamp to use when retrieving the
- *   selection. The selection owner may refuse the
- *   request if it did not own the selection at
- *   the time indicated by the timestamp.
- *
- * Retrieves the contents of a selection in a given
- * form.
- */
-GDK_AVAILABLE_IN_ALL
-void      gdk_selection_convert   (GdkWindow    *requestor,
-                                   GdkAtom       selection,
-                                   GdkAtom       target,
-                                   guint32       time_);
-GDK_AVAILABLE_IN_ALL
-gint       gdk_selection_property_get (GdkWindow  *requestor,
-                                      guchar    **data,
-                                      GdkAtom    *prop_type,
-                                      gint       *prop_format);
-
-GDK_AVAILABLE_IN_ALL
-void      gdk_selection_send_notify (GdkWindow      *requestor,
-                                     GdkAtom         selection,
-                                     GdkAtom         target,
-                                     GdkAtom         property,
-                                     guint32         time_);
-
-GDK_AVAILABLE_IN_ALL
-void       gdk_selection_send_notify_for_display (GdkDisplay      *display,
-                                                 GdkWindow       *requestor,
-                                                 GdkAtom          selection,
-                                                 GdkAtom          target,
-                                                 GdkAtom          property,
-                                                 guint32          time_);
-
 G_END_DECLS
 
 #endif /* __GDK_SELECTION_H__ */
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 89202ad..8acc87d 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -5468,10 +5468,6 @@ _gdk_make_event (GdkWindow    *window,
       event->property.state = the_state;
       break;
 
-    case GDK_SELECTION_NOTIFY:
-      event->selection.time = the_time;
-      break;
-
     case GDK_PROXIMITY_IN:
     case GDK_PROXIMITY_OUT:
       event->proximity.time = the_time;
diff --git a/gdk/mir/gdkmirdisplay.c b/gdk/mir/gdkmirdisplay.c
index f98b1e0..09b71bc 100644
--- a/gdk/mir/gdkmirdisplay.c
+++ b/gdk/mir/gdkmirdisplay.c
@@ -496,327 +496,6 @@ gdk_mir_display_pop_error_trap (GdkDisplay *display,
   return 0;
 }
 
-static void
-gdk_mir_display_send_selection_notify (GdkDisplay *display,
-                                       GdkWindow  *requestor,
-                                       GdkAtom     selection,
-                                       GdkAtom     target,
-                                       GdkAtom     property,
-                                       guint32     time)
-{
-}
-
-static gint
-gdk_mir_display_get_selection_property (GdkDisplay  *display,
-                                        GdkWindow   *requestor,
-                                        guchar     **data,
-                                        GdkAtom     *ret_type,
-                                        gint        *ret_format)
-{
-  gint length;
-
-  gdk_property_get (requestor,
-                    gdk_atom_intern_static_string ("GDK_SELECTION"),
-                    NULL,
-                    0,
-                    G_MAXULONG,
-                    FALSE,
-                    ret_type,
-                    ret_format,
-                    &length,
-                    data);
-
-  return length;
-}
-
-static gint
-get_format_score (const gchar *format,
-                  GdkAtom      target,
-                  GdkAtom     *out_type,
-                  gint        *out_size)
-{
-  const gchar *target_string;
-  GdkAtom dummy_type;
-  gint dummy_size;
-
-  target_string = _gdk_atom_name_const (target);
-
-  if (!out_type)
-    out_type = &dummy_type;
-
-  if (!out_size)
-    out_size = &dummy_size;
-
-  if (!g_ascii_strcasecmp (format, target_string))
-    {
-      *out_type = GDK_SELECTION_TYPE_STRING;
-      *out_size = sizeof (guchar);
-
-      return G_MAXINT;
-    }
-
-  if (target == gdk_atom_intern_static_string ("UTF8_STRING"))
-    return get_format_score (format, gdk_atom_intern_static_string ("text/plain;charset=utf-8"), out_type, 
out_size);
-
-  /* TODO: use best media type for COMPOUND_TEXT target */
-  if (target == gdk_atom_intern_static_string ("COMPOUND_TEXT"))
-    return get_format_score (format, gdk_atom_intern_static_string ("text/plain;charset=utf-8"), out_type, 
out_size);
-
-  if (target == GDK_TARGET_STRING)
-    return get_format_score (format, gdk_atom_intern_static_string ("text/plain;charset=iso-8859-1"), 
out_type, out_size);
-
-  if (target == gdk_atom_intern_static_string ("GTK_TEXT_BUFFER_CONTENTS"))
-    return get_format_score (format, gdk_atom_intern_static_string ("text/plain;charset=utf-8"), out_type, 
out_size);
-
-  if (g_content_type_is_a (format, target_string))
-    {
-      *out_type = GDK_SELECTION_TYPE_STRING;
-      *out_size = sizeof (guchar);
-
-      return 2;
-    }
-
-  if (g_content_type_is_a (target_string, format))
-    {
-      *out_type = GDK_SELECTION_TYPE_STRING;
-      *out_size = sizeof (guchar);
-
-      return 1;
-    }
-
-  return 0;
-}
-
-static gint
-get_best_format_index (const gchar * const *formats,
-                       guint                n_formats,
-                       GdkAtom              target,
-                       GdkAtom             *out_type,
-                       gint                *out_size)
-{
-  gint best_i = -1;
-  gint best_score = 0;
-  GdkAtom best_type;
-  gint best_size;
-  gint score;
-  GdkAtom type;
-  gint size;
-  gint i;
-
-  if (!out_type)
-    out_type = &best_type;
-
-  if (!out_size)
-    out_size = &best_size;
-
-  *out_type = NULL;
-  *out_size = 0;
-
-  for (i = 0; i < n_formats; i++)
-    {
-      score = get_format_score (formats[i], target, &type, &size);
-
-      if (score > best_score)
-        {
-          best_i = i;
-          best_score = score;
-          *out_type = type;
-          *out_size = size;
-        }
-    }
-
-  return best_i;
-}
-
-static void
-gdk_mir_display_real_convert_selection (GdkDisplay *display,
-                                        GdkWindow  *requestor,
-                                        GdkAtom     selection,
-                                        GdkAtom     target,
-                                        guint32     time)
-{
-  GdkMirDisplay *mir_display = GDK_MIR_DISPLAY (display);
-  const gchar *paste_data;
-  gsize paste_size;
-  const gint *paste_header;
-  GPtrArray *paste_formats;
-  GArray *paste_targets;
-  GdkAtom paste_target;
-  GdkEvent *event;
-  gint best_i;
-  GdkAtom best_type;
-  gint best_size;
-  gint i;
-
-  g_return_if_fail (mir_display->paste_data);
-
-  paste_data = g_variant_get_fixed_array (mir_display->paste_data, &paste_size, sizeof (guchar));
-  paste_header = (const gint *) paste_data;
-
-  if (paste_data)
-    {
-      paste_formats = g_ptr_array_new_full (paste_header[0], g_free);
-
-      for (i = 0; i < paste_header[0]; i++)
-        g_ptr_array_add (paste_formats, g_strndup (paste_data + paste_header[1 + 4 * i], paste_header[2 + 4 
* i]));
-    }
-  else
-    paste_formats = g_ptr_array_new_with_free_func (g_free);
-
-  if (target == gdk_atom_intern_static_string ("TARGETS"))
-    {
-      paste_targets = g_array_sized_new (TRUE, FALSE, sizeof (GdkAtom), paste_formats->len);
-
-      for (i = 0; i < paste_formats->len; i++)
-        {
-          paste_target = gdk_atom_intern (g_ptr_array_index (paste_formats, i), FALSE);
-          g_array_append_val (paste_targets, paste_target);
-        }
-
-      gdk_property_change (requestor,
-                           gdk_atom_intern_static_string ("GDK_SELECTION"),
-                           GDK_SELECTION_TYPE_ATOM,
-                           8 * sizeof (GdkAtom),
-                           GDK_PROP_MODE_REPLACE,
-                           (const guchar *) paste_targets->data,
-                           paste_targets->len);
-
-      g_array_unref (paste_targets);
-
-      event = gdk_event_new (GDK_SELECTION_NOTIFY);
-      event->selection.window = g_object_ref (requestor);
-      event->selection.send_event = FALSE;
-      event->selection.selection = selection;
-      event->selection.target = target;
-      event->selection.property = gdk_atom_intern_static_string ("GDK_SELECTION");
-      event->selection.time = time;
-      event->selection.requestor = g_object_ref (requestor);
-
-      gdk_event_put (event);
-      gdk_event_free (event);
-    }
-  else
-    {
-      best_i = get_best_format_index ((const gchar * const *) paste_formats->pdata,
-                                      paste_formats->len,
-                                      target,
-                                      &best_type,
-                                      &best_size);
-
-      if (best_i >= 0)
-        {
-          gdk_property_change (requestor,
-                               gdk_atom_intern_static_string ("GDK_SELECTION"),
-                               best_type,
-                               8 * best_size,
-                               GDK_PROP_MODE_REPLACE,
-                               (const guchar *) paste_data + paste_header[3 + 4 * best_i],
-                               paste_header[4 + 4 * best_i] / best_size);
-
-          event = gdk_event_new (GDK_SELECTION_NOTIFY);
-          event->selection.window = g_object_ref (requestor);
-          event->selection.send_event = FALSE;
-          event->selection.selection = selection;
-          event->selection.target = target;
-          event->selection.property = gdk_atom_intern_static_string ("GDK_SELECTION");
-          event->selection.time = time;
-          event->selection.requestor = g_object_ref (requestor);
-
-          gdk_event_put (event);
-          gdk_event_free (event);
-        }
-    }
-
-  g_ptr_array_unref (paste_formats);
-}
-
-typedef struct
-{
-  GdkDisplay *display;
-  GdkWindow  *requestor;
-  GdkAtom     selection;
-  GdkAtom     target;
-  guint32     time;
-} ConvertInfo;
-
-static void
-paste_data_ready_cb (GObject      *source_object,
-                     GAsyncResult *res,
-                     gpointer      user_data)
-{
-  ContentHubService *content_service = CONTENT_HUB_SERVICE (source_object);
-  ConvertInfo *info = user_data;
-  GdkMirDisplay *mir_display = GDK_MIR_DISPLAY (info->display);
-  gboolean result;
-
-  g_clear_pointer (&mir_display->paste_data, g_variant_unref);
-
-  result = content_hub_service_call_get_latest_paste_data_finish (content_service,
-                                                                  &mir_display->paste_data,
-                                                                  res,
-                                                                  NULL);
-
-  if (result)
-    gdk_mir_display_real_convert_selection (info->display,
-                                            info->requestor,
-                                            info->selection,
-                                            info->target,
-                                            info->time);
-
-  g_object_unref (info->requestor);
-  g_object_unref (info->display);
-  g_free (info);
-}
-
-static void
-gdk_mir_display_convert_selection (GdkDisplay *display,
-                                   GdkWindow  *requestor,
-                                   GdkAtom     selection,
-                                   GdkAtom     target,
-                                   guint32     time)
-{
-  GdkMirDisplay *mir_display = GDK_MIR_DISPLAY (display);
-  MirWindow *mir_window;
-  MirWindowId *mir_window_id;
-  ConvertInfo *info;
-
-  if (selection != GDK_SELECTION_CLIPBOARD)
-    return;
-  else if (mir_display->paste_data)
-    gdk_mir_display_real_convert_selection (display, requestor, selection, target, time);
-  else if (mir_display->focused_window)
-    {
-      mir_window = _gdk_mir_window_get_mir_window (mir_display->focused_window);
-
-      if (!mir_window)
-        return;
-
-      mir_window_id = mir_window_request_window_id_sync (mir_window);
-
-      if (!mir_window_id)
-        return;
-
-      if (mir_window_id_is_valid (mir_window_id))
-        {
-          info = g_new (ConvertInfo, 1);
-          info->display = g_object_ref (display);
-          info->requestor = g_object_ref (requestor);
-          info->selection = selection;
-          info->target = target;
-          info->time = time;
-
-          content_hub_service_call_get_latest_paste_data (
-            mir_display->content_service,
-            mir_window_id_as_string (mir_window_id),
-            NULL,
-            paste_data_ready_cb,
-            info);
-        }
-
-      mir_window_id_release (mir_window_id);
-    }
-}
-
 static gint
 gdk_mir_display_text_property_to_utf8_list (GdkDisplay    *display,
                                             GdkAtom        encoding,
@@ -1176,9 +855,6 @@ gdk_mir_display_class_init (GdkMirDisplayClass *klass)
   display_class->get_keymap = gdk_mir_display_get_keymap;
   display_class->push_error_trap = gdk_mir_display_push_error_trap;
   display_class->pop_error_trap = gdk_mir_display_pop_error_trap;
-  display_class->send_selection_notify = gdk_mir_display_send_selection_notify;
-  display_class->get_selection_property = gdk_mir_display_get_selection_property;
-  display_class->convert_selection = gdk_mir_display_convert_selection;
   display_class->text_property_to_utf8_list = gdk_mir_display_text_property_to_utf8_list;
   display_class->utf8_to_string_target = gdk_mir_display_utf8_to_string_target;
   display_class->make_gl_context_current = gdk_mir_display_make_gl_context_current;
diff --git a/gdk/quartz/gdkdisplay-quartz.c b/gdk/quartz/gdkdisplay-quartz.c
index f2342ae..8c3ddda 100644
--- a/gdk/quartz/gdkdisplay-quartz.c
+++ b/gdk/quartz/gdkdisplay-quartz.c
@@ -276,8 +276,6 @@ gdk_quartz_display_class_init (GdkQuartzDisplayClass *class)
   display_class->event_data_free = _gdk_quartz_display_event_data_free;
   display_class->create_window_impl = _gdk_quartz_display_create_window_impl;
   display_class->get_keymap = _gdk_quartz_display_get_keymap;
-  display_class->get_selection_property = _gdk_quartz_display_get_selection_property;
-  display_class->convert_selection = _gdk_quartz_display_convert_selection;
   display_class->text_property_to_utf8_list = _gdk_quartz_display_text_property_to_utf8_list;
   display_class->utf8_to_string_target = _gdk_quartz_display_utf8_to_string_target;
   display_class->get_n_monitors = gdk_quartz_display_get_n_monitors;
diff --git a/gdk/quartz/gdkdisplay-quartz.h b/gdk/quartz/gdkdisplay-quartz.h
index 77a222a..6f2ed37 100644
--- a/gdk/quartz/gdkdisplay-quartz.h
+++ b/gdk/quartz/gdkdisplay-quartz.h
@@ -71,17 +71,6 @@ void       _gdk_quartz_display_create_window_impl (GdkDisplay    *display,
 /* Display methods - keymap */
 GdkKeymap * _gdk_quartz_display_get_keymap (GdkDisplay *display);
 
-/* Display methods - selection */
-gint        _gdk_quartz_display_get_selection_property (GdkDisplay     *display,
-                                                        GdkWindow      *requestor,
-                                                        guchar        **data,
-                                                        GdkAtom        *ret_type,
-                                                        gint           *ret_format);
-void        _gdk_quartz_display_convert_selection      (GdkDisplay     *display,
-                                                        GdkWindow      *requestor,
-                                                        GdkAtom         selection,
-                                                        GdkAtom         target,
-                                                        guint32         time);
 gint        _gdk_quartz_display_text_property_to_utf8_list (GdkDisplay     *display,
                                                             GdkAtom         encoding,
                                                             gint            format,
diff --git a/gdk/quartz/gdkselection-quartz.c b/gdk/quartz/gdkselection-quartz.c
index 16f3569..5cc5f68 100644
--- a/gdk/quartz/gdkselection-quartz.c
+++ b/gdk/quartz/gdkselection-quartz.c
@@ -24,27 +24,6 @@
 #include "gdkproperty.h"
 #include "gdkquartz.h"
 
-void
-_gdk_quartz_display_convert_selection (GdkDisplay *display,
-                                       GdkWindow  *requestor,
-                                       GdkAtom     selection,
-                                       GdkAtom     target,
-                                       guint32     time)
-{
-  /* FIXME: Implement */
-}
-
-gint
-_gdk_quartz_display_get_selection_property (GdkDisplay *display,
-                                            GdkWindow  *requestor,
-                                            guchar    **data,
-                                            GdkAtom    *ret_type,
-                                            gint       *ret_format)
-{
-  /* FIXME: Implement */
-  return 0;
-}
-
 gchar *
 _gdk_quartz_display_utf8_to_string_target (GdkDisplay  *display,
                                            const gchar *str)
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c
index d276cf1..ab6a913 100644
--- a/gdk/wayland/gdkdisplay-wayland.c
+++ b/gdk/wayland/gdkdisplay-wayland.c
@@ -1019,9 +1019,6 @@ gdk_wayland_display_class_init (GdkWaylandDisplayClass *class)
   display_class->notify_startup_complete = gdk_wayland_display_notify_startup_complete;
   display_class->create_window_impl = _gdk_wayland_display_create_window_impl;
   display_class->get_keymap = _gdk_wayland_display_get_keymap;
-  display_class->send_selection_notify = _gdk_wayland_display_send_selection_notify;
-  display_class->get_selection_property = _gdk_wayland_display_get_selection_property;
-  display_class->convert_selection = _gdk_wayland_display_convert_selection;
   display_class->text_property_to_utf8_list = _gdk_wayland_display_text_property_to_utf8_list;
   display_class->utf8_to_string_target = _gdk_wayland_display_utf8_to_string_target;
 
diff --git a/gdk/wayland/gdkselection-wayland.c b/gdk/wayland/gdkselection-wayland.c
index 7d1b30a..233eebb 100644
--- a/gdk/wayland/gdkselection-wayland.c
+++ b/gdk/wayland/gdkselection-wayland.c
@@ -78,7 +78,6 @@ struct _AsyncWriteData
 struct _SelectionData
 {
   DataOfferData *offer;
-  GHashTable *buffers; /* Hashtable of target_atom->SelectionBuffer */
 };
 
 enum {
@@ -100,184 +99,14 @@ struct _GdkWaylandSelection
   struct wl_data_source *dnd_source; /* Owned by the GdkDragContext */
 };
 
-static void selection_buffer_read (SelectionBuffer *buffer);
 static void async_write_data_write (AsyncWriteData *write_data);
 
-static void
-_gdk_display_put_event (GdkDisplay *display,
-                        GdkEvent   *event)
-{
-  gdk_event_set_display (event, display);
-  gdk_display_put_event (display, event);
-}
-
-static void
-selection_buffer_notify (SelectionBuffer *buffer)
-{
-  GdkEvent *event;
-  GList *l;
-
-  for (l = buffer->requestors; l; l = l->next)
-    {
-      event = gdk_event_new (GDK_SELECTION_NOTIFY);
-      event->selection.window = g_object_ref (l->data);
-      event->selection.send_event = FALSE;
-      event->selection.selection = buffer->selection;
-      event->selection.target = buffer->target;
-      event->selection.property = gdk_atom_intern_static_string ("GDK_SELECTION");
-      event->selection.time = GDK_CURRENT_TIME;
-      event->selection.requestor = g_object_ref (l->data);
-
-      _gdk_display_put_event (gdk_window_get_display (l->data), event);
-      gdk_event_free (event);
-    }
-}
-
-static SelectionBuffer *
-selection_buffer_new (GInputStream *stream,
-                      GdkAtom       selection,
-                      GdkAtom       target)
-{
-  SelectionBuffer *buffer;
-
-  buffer = g_new0 (SelectionBuffer, 1);
-  buffer->stream = (stream) ? g_object_ref (stream) : NULL;
-  buffer->cancellable = g_cancellable_new ();
-  buffer->data = g_byte_array_new ();
-  buffer->selection = selection;
-  buffer->target = target;
-  buffer->ref_count = 1;
-
-  if (stream)
-    selection_buffer_read (buffer);
-
-  return buffer;
-}
-
-static SelectionBuffer *
-selection_buffer_ref (SelectionBuffer *buffer)
-{
-  buffer->ref_count++;
-  return buffer;
-}
-
-static void
-selection_buffer_unref (SelectionBuffer *buffer_data)
-{
-  buffer_data->ref_count--;
-
-  if (buffer_data->ref_count != 0)
-    return;
-
-  if (buffer_data->cancellable)
-    g_object_unref (buffer_data->cancellable);
-
-  if (buffer_data->stream)
-    g_object_unref (buffer_data->stream);
-
-  if (buffer_data->data)
-    g_byte_array_unref (buffer_data->data);
-
-  g_free (buffer_data);
-}
-
-static void
-selection_buffer_append_data (SelectionBuffer *buffer,
-                              gconstpointer    data,
-                              gsize            len)
-{
-  g_byte_array_append (buffer->data, data, len);
-}
-
-static void
-selection_buffer_cancel_and_unref (SelectionBuffer *buffer_data)
-{
-  if (buffer_data->cancellable)
-    g_cancellable_cancel (buffer_data->cancellable);
-
-  selection_buffer_unref (buffer_data);
-}
-
-static void
-selection_buffer_add_requestor (SelectionBuffer *buffer,
-                                GdkWindow       *requestor)
-{
-  if (!g_list_find (buffer->requestors, requestor))
-    buffer->requestors = g_list_prepend (buffer->requestors,
-                                         g_object_ref (requestor));
-}
-
-static gboolean
-selection_buffer_remove_requestor (SelectionBuffer *buffer,
-                                   GdkWindow       *requestor)
-{
-  GList *link = g_list_find (buffer->requestors, requestor);
-
-  if (!link)
-    return FALSE;
-
-  g_object_unref (link->data);
-  buffer->requestors = g_list_delete_link (buffer->requestors, link);
-  return TRUE;
-}
-
 static inline glong
 get_buffer_size (void)
 {
   return sysconf (_SC_PAGESIZE);
 }
 
-static void
-selection_buffer_read_cb (GObject      *object,
-                          GAsyncResult *result,
-                          gpointer      user_data)
-{
-  SelectionBuffer *buffer = user_data;
-  gboolean finished = TRUE;
-  GError *error = NULL;
-  GBytes *bytes;
-
-  bytes = g_input_stream_read_bytes_finish (buffer->stream, result, &error);
-
-  if (bytes)
-    {
-      finished = g_bytes_get_size (bytes) < get_buffer_size ();
-      selection_buffer_append_data (buffer,
-                                    g_bytes_get_data (bytes, NULL),
-                                    g_bytes_get_size (bytes));
-      g_bytes_unref (bytes);
-    }
-
-  if (!finished)
-    selection_buffer_read (buffer);
-  else
-    {
-      if (error)
-        {
-          g_warning (G_STRLOC ": error reading selection buffer: %s", error->message);
-          g_error_free (error);
-        }
-      else
-        selection_buffer_notify (buffer);
-
-      g_input_stream_close (buffer->stream, NULL, NULL);
-      g_clear_object (&buffer->stream);
-      g_clear_object (&buffer->cancellable);
-    }
-
-  selection_buffer_unref (buffer);
-}
-
-static void
-selection_buffer_read (SelectionBuffer *buffer)
-{
-  selection_buffer_ref (buffer);
-  g_input_stream_read_bytes_async (buffer->stream, get_buffer_size(),
-                                   G_PRIORITY_DEFAULT,
-                                   buffer->cancellable, selection_buffer_read_cb,
-                                   buffer);
-}
-
 static DataOfferData *
 data_offer_data_new (gpointer       offer,
                      GDestroyNotify destroy_notify)
@@ -304,18 +133,11 @@ GdkWaylandSelection *
 gdk_wayland_selection_new (void)
 {
   GdkWaylandSelection *selection;
-  gint i;
 
   /* init atoms */
   atoms[ATOM_DND] = gdk_atom_intern_static_string ("GdkWaylandSelection");
 
   selection = g_new0 (GdkWaylandSelection, 1);
-  for (i = 0; i < G_N_ELEMENTS (selection->selections); i++)
-    {
-      selection->selections[i].buffers =
-        g_hash_table_new_full (NULL, NULL, NULL,
-                               (GDestroyNotify) selection_buffer_cancel_and_unref);
-    }
 
   selection->offers =
     g_hash_table_new_full (NULL, NULL, NULL,
@@ -327,11 +149,6 @@ gdk_wayland_selection_new (void)
 void
 gdk_wayland_selection_free (GdkWaylandSelection *selection)
 {
-  gint i;
-
-  for (i = 0; i < G_N_ELEMENTS (selection->selections); i++)
-    g_hash_table_destroy (selection->selections[i].buffers);
-
   g_hash_table_destroy (selection->offers);
   g_free (selection->stored_selection.data);
 
@@ -513,8 +330,6 @@ gdk_wayland_selection_set_offer (GdkDisplay *display,
   if (selection_data)
     {
       selection_data->offer = info;
-      /* Clear all buffers */
-      g_hash_table_remove_all (selection_data->buffers);
     }
 }
 
@@ -703,29 +518,6 @@ gdk_wayland_selection_store (GdkWindow    *window,
   gdk_wayland_selection_check_write (selection);
 }
 
-static SelectionBuffer *
-gdk_wayland_selection_lookup_requestor_buffer (GdkWindow *requestor)
-{
-  GdkDisplay *display = gdk_window_get_display (requestor);
-  GdkWaylandSelection *selection = gdk_wayland_display_get_selection (display);
-  SelectionBuffer *buffer_data;
-  GHashTableIter iter;
-  gint i;
-
-  for (i = 0; i < G_N_ELEMENTS (selection->selections); i++)
-    {
-      g_hash_table_iter_init (&iter, selection->selections[i].buffers);
-
-      while (g_hash_table_iter_next (&iter, NULL, (gpointer*) &buffer_data))
-        {
-          if (g_list_find (buffer_data->requestors, requestor))
-            return buffer_data;
-        }
-    }
-
-  return NULL;
-}
-
 static void
 data_source_target (void                  *data,
                     struct wl_data_source *source,
@@ -909,171 +701,6 @@ gdk_wayland_selection_unset_data_source (GdkDisplay *display,
     }
 }
 
-void
-_gdk_wayland_display_send_selection_notify (GdkDisplay *dispay,
-                                            GdkWindow  *requestor,
-                                            GdkAtom     selection,
-                                            GdkAtom     target,
-                                            GdkAtom     property,
-                                            guint32     time)
-{
-}
-
-gint
-_gdk_wayland_display_get_selection_property (GdkDisplay  *display,
-                                             GdkWindow   *requestor,
-                                             guchar     **data,
-                                             GdkAtom     *ret_type,
-                                             gint        *ret_format)
-{
-  SelectionBuffer *buffer_data;
-  gsize len;
-
-  buffer_data = gdk_wayland_selection_lookup_requestor_buffer (requestor);
-
-  if (!buffer_data)
-    return 0;
-
-  selection_buffer_remove_requestor (buffer_data, requestor);
-  len = buffer_data->data->len;
-
-  if (data)
-    {
-      guchar *buffer;
-
-      buffer = g_new0 (guchar, len + 1);
-      memcpy (buffer, buffer_data->data->data, len);
-      *data = buffer;
-    }
-
-  if (buffer_data->target == gdk_atom_intern_static_string ("TARGETS"))
-    {
-      if (ret_type)
-        *ret_type = GDK_SELECTION_TYPE_ATOM;
-      if (ret_format)
-        *ret_format = 32;
-    }
-  else
-    {
-      if (ret_type)
-        *ret_type = buffer_data->target;
-      if (ret_format)
-        *ret_format = 8;
-    }
-
-  return len;
-}
-
-static void
-emit_empty_selection_notify (GdkWindow *requestor,
-                             GdkAtom    selection,
-                             GdkAtom    target)
-{
-  GdkEvent *event;
-
-  event = gdk_event_new (GDK_SELECTION_NOTIFY);
-  event->selection.window = g_object_ref (requestor);
-  event->selection.send_event = FALSE;
-  event->selection.selection = selection;
-  event->selection.target = target;
-  event->selection.property = NULL;
-  event->selection.time = GDK_CURRENT_TIME;
-  event->selection.requestor = g_object_ref (requestor);
-
-  _gdk_display_put_event (gdk_window_get_display (requestor), event);
-  gdk_event_free (event);
-}
-
-void
-_gdk_wayland_display_convert_selection (GdkDisplay *display,
-                                        GdkWindow  *requestor,
-                                        GdkAtom     selection,
-                                        GdkAtom     target,
-                                        guint32     time)
-{
-  GdkWaylandSelection *wayland_selection = gdk_wayland_display_get_selection (display);
-  const SelectionData *selection_data;
-  SelectionBuffer *buffer_data;
-  gpointer offer;
-  gchar *mimetype;
-  GdkContentFormats *formats;
-
-  selection_data = selection_lookup_offer_by_atom (wayland_selection, selection);
-  if (!selection_data)
-    return;
-
-  offer = gdk_wayland_selection_get_offer (display, selection);
-  formats = gdk_wayland_selection_get_targets (display, selection);
-
-  if (!offer || target == gdk_atom_intern_static_string ("DELETE"))
-    {
-      emit_empty_selection_notify (requestor, selection, target);
-      return;
-    }
-
-  mimetype = gdk_atom_name (target);
-
-  if (target != gdk_atom_intern_static_string ("TARGETS"))
-    {
-      if (!gdk_content_formats_contain_mime_type (formats, GDK_ATOM_TO_POINTER (target)))
-        {
-          emit_empty_selection_notify (requestor, selection, target);
-          return;
-        }
-
-    wl_data_offer_accept (offer,
-                          _gdk_wayland_display_get_serial (GDK_WAYLAND_DISPLAY (display)),
-                          mimetype);
-    }
-
-  buffer_data = g_hash_table_lookup (selection_data->buffers, target);
-
-  if (buffer_data)
-    selection_buffer_add_requestor (buffer_data, requestor);
-  else
-    {
-      GInputStream *stream = NULL;
-      int pipe_fd[2];
-      gsize n_targets = 0;
-      const char * const *targets = NULL;
-
-      if (target == gdk_atom_intern_static_string ("TARGETS"))
-        {
-          targets = gdk_content_formats_get_mime_types (formats, &n_targets);
-        }
-      else
-        {
-          g_unix_open_pipe (pipe_fd, FD_CLOEXEC, NULL);
-
-          wl_data_offer_receive (offer, mimetype, pipe_fd[1]);
-
-          stream = g_unix_input_stream_new (pipe_fd[0], TRUE);
-          close (pipe_fd[1]);
-        }
-
-      buffer_data = selection_buffer_new (stream, selection, target);
-      selection_buffer_add_requestor (buffer_data, requestor);
-
-      if (stream)
-        g_object_unref (stream);
-
-      if (targets)
-        {
-          /* Store directly the local atoms */
-          selection_buffer_append_data (buffer_data, targets, n_targets * sizeof (const char * const *));
-        }
-
-      g_hash_table_insert (selection_data->buffers,
-                           GDK_ATOM_TO_POINTER (target),
-                           buffer_data);
-    }
-
-  if (!buffer_data->stream)
-    selection_buffer_notify (buffer_data);
-
-  g_free (mimetype);
-}
-
 gint
 _gdk_wayland_display_text_property_to_utf8_list (GdkDisplay    *display,
                                                  GdkAtom        encoding,
diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
index fa78047..7ec5f86 100644
--- a/gdk/x11/gdkdisplay-x11.c
+++ b/gdk/x11/gdkdisplay-x11.c
@@ -1051,23 +1051,6 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
 
       break;
 
-    case SelectionNotify:
-      GDK_NOTE (EVENTS,
-               g_message ("selection notify:\twindow: %ld",
-                          xevent->xproperty.window));
-
-      event->selection.type = GDK_SELECTION_NOTIFY;
-      event->selection.window = window;
-      event->selection.selection = gdk_x11_xatom_to_atom_for_display (display, xevent->xselection.selection);
-      event->selection.target = gdk_x11_xatom_to_atom_for_display (display, xevent->xselection.target);
-      if (xevent->xselection.property == None)
-        event->selection.property = event->selection.target;
-      else
-        event->selection.property = gdk_x11_xatom_to_atom_for_display (display, xevent->xselection.property);
-      event->selection.time = xevent->xselection.time;
-
-      break;
-
     case ColormapNotify:
       GDK_NOTE (EVENTS,
                g_message ("colormap notify:\twindow: %ld",
@@ -3179,9 +3162,6 @@ gdk_x11_display_class_init (GdkX11DisplayClass * class)
   display_class->notify_startup_complete = gdk_x11_display_notify_startup_complete;
   display_class->create_window_impl = _gdk_x11_display_create_window_impl;
   display_class->get_keymap = gdk_x11_display_get_keymap;
-  display_class->send_selection_notify = _gdk_x11_display_send_selection_notify;
-  display_class->get_selection_property = _gdk_x11_display_get_selection_property;
-  display_class->convert_selection = _gdk_x11_display_convert_selection;
   display_class->text_property_to_utf8_list = _gdk_x11_display_text_property_to_utf8_list;
   display_class->utf8_to_string_target = _gdk_x11_display_utf8_to_string_target;
 
diff --git a/gdk/x11/gdkprivate-x11.h b/gdk/x11/gdkprivate-x11.h
index 81864e2..597e6b8 100644
--- a/gdk/x11/gdkprivate-x11.h
+++ b/gdk/x11/gdkprivate-x11.h
@@ -145,23 +145,6 @@ void _gdk_x11_display_queue_events            (GdkDisplay *display);
 
 GdkAppLaunchContext *_gdk_x11_display_get_app_launch_context (GdkDisplay *display);
 
-void        _gdk_x11_display_send_selection_notify (GdkDisplay       *display,
-                                                    GdkWindow        *requestor,
-                                                    GdkAtom          selection,
-                                                    GdkAtom          target,
-                                                    GdkAtom          property,
-                                                    guint32          time);
-gint        _gdk_x11_display_get_selection_property (GdkDisplay     *display,
-                                                     GdkWindow      *requestor,
-                                                     guchar        **data,
-                                                     GdkAtom        *ret_type,
-                                                     gint           *ret_format);
-void        _gdk_x11_display_convert_selection      (GdkDisplay     *display,
-                                                     GdkWindow      *requestor,
-                                                     GdkAtom         selection,
-                                                     GdkAtom         target,
-                                                     guint32         time);
-
 gint        _gdk_x11_display_text_property_to_utf8_list (GdkDisplay     *display,
                                                          GdkAtom         encoding,
                                                          gint            format,
diff --git a/gdk/x11/gdkselection-x11.c b/gdk/x11/gdkselection-x11.c
index 2ad8c20..6326840 100644
--- a/gdk/x11/gdkselection-x11.c
+++ b/gdk/x11/gdkselection-x11.c
@@ -34,160 +34,6 @@
 #include <string.h>
 
 
-void
-_gdk_x11_display_convert_selection (GdkDisplay *display,
-                                    GdkWindow  *requestor,
-                                    GdkAtom     selection,
-                                    GdkAtom     target,
-                                    guint32     time)
-{
-  g_return_if_fail (selection != NULL);
-
-  if (GDK_WINDOW_DESTROYED (requestor) || !GDK_WINDOW_IS_X11 (requestor))
-    return;
-
-  if (!gdk_window_has_native (requestor))
-    {
-      g_warning ("Can't use selections on non-native window");
-      return;
-    }
-
-  XConvertSelection (GDK_WINDOW_XDISPLAY (requestor),
-                     gdk_x11_atom_to_xatom_for_display (display, selection),
-                     gdk_x11_atom_to_xatom_for_display (display, target),
-                     gdk_x11_get_xatom_by_name_for_display (display, "GDK_SELECTION"),
-                     GDK_WINDOW_XID (requestor), time);
-}
-
-gint
-_gdk_x11_display_get_selection_property (GdkDisplay  *display,
-                                         GdkWindow   *requestor,
-                                         guchar     **data,
-                                         GdkAtom     *ret_type,
-                                         gint        *ret_format)
-{
-  gulong nitems;
-  gulong nbytes;
-  gulong length = 0;
-  Atom prop_type;
-  gint prop_format;
-  guchar *t = NULL;
-
-  if (GDK_WINDOW_DESTROYED (requestor) || !GDK_WINDOW_IS_X11 (requestor))
-    goto err;
-
-  t = NULL;
-
-  /* We can't delete the selection here, because it might be the INCR
-     protocol, in which case the client has to make sure they'll be
-     notified of PropertyChange events _before_ the property is deleted.
-     Otherwise there's no guarantee we'll win the race ... */
-  if (XGetWindowProperty (GDK_WINDOW_XDISPLAY (requestor),
-                          GDK_WINDOW_XID (requestor),
-                          gdk_x11_get_xatom_by_name_for_display (display, "GDK_SELECTION"),
-                          0, 0x1FFFFFFF /* MAXINT32 / 4 */, False,
-                          AnyPropertyType, &prop_type, &prop_format,
-                          &nitems, &nbytes, &t) != Success)
-    goto err;
-
-  if (prop_type != None)
-    {
-      if (ret_type)
-        *ret_type = gdk_x11_xatom_to_atom_for_display (display, prop_type);
-      if (ret_format)
-        *ret_format = prop_format;
-
-      if (prop_type == XA_ATOM ||
-          prop_type == gdk_x11_get_xatom_by_name_for_display (display, "ATOM_PAIR"))
-        {
-          Atom* atoms = (Atom*) t;
-          GdkAtom* atoms_dest;
-          gint num_atom, i;
-
-          if (prop_format != 32)
-            goto err;
-
-          num_atom = nitems;
-          length = sizeof (GdkAtom) * num_atom + 1;
-
-          if (data)
-            {
-              *data = g_malloc (length);
-              (*data)[length - 1] = '\0';
-              atoms_dest = (GdkAtom *)(*data);
-
-              for (i=0; i < num_atom; i++)
-                atoms_dest[i] = gdk_x11_xatom_to_atom_for_display (display, atoms[i]);
-            }
-        }
-      else
-        {
-          switch (prop_format)
-            {
-            case 8:
-              length = nitems;
-              break;
-            case 16:
-              length = sizeof(short) * nitems;
-              break;
-            case 32:
-              length = sizeof(long) * nitems;
-              break;
-            default:
-              g_assert_not_reached ();
-              break;
-            }
-
-          /* Add on an extra byte to handle null termination.  X guarantees
-             that t will be 1 longer than nitems and null terminated */
-          length += 1;
-
-          if (data)
-            *data = g_memdup (t, length);
-        }
-
-      if (t)
-        XFree (t);
-
-      return length - 1;
-    }
-
- err:
-  if (ret_type)
-    *ret_type = NULL;
-  if (ret_format)
-    *ret_format = 0;
-  if (data)
-    *data = NULL;
-
-  return 0;
-}
-
-void
-_gdk_x11_display_send_selection_notify (GdkDisplay       *display,
-                                        GdkWindow        *requestor,
-                                        GdkAtom          selection,
-                                        GdkAtom          target,
-                                        GdkAtom          property,
-                                        guint32          time)
-{
-  XSelectionEvent xevent;
-
-  xevent.type = SelectionNotify;
-  xevent.serial = 0;
-  xevent.send_event = True;
-  xevent.requestor = GDK_WINDOW_XID (requestor);
-  xevent.selection = gdk_x11_atom_to_xatom_for_display (display, selection);
-  xevent.target = gdk_x11_atom_to_xatom_for_display (display, target);
-  if (property == NULL)
-    xevent.property = None;
-  else
-    xevent.property = gdk_x11_atom_to_xatom_for_display (display, property);
-  xevent.time = time;
-
-  _gdk_x11_display_send_xevent (display, xevent.requestor, False, NoEventMask, (XEvent*) & xevent);
-}
-
 /**
  * gdk_x11_display_text_property_to_text_list:
  * @display: (type GdkX11Display): The #GdkDisplay where the encoding is defined
diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c
index 231156f..c7b7765 100644
--- a/gtk/gtkdnd.c
+++ b/gtk/gtkdnd.c
@@ -1636,7 +1636,6 @@ gtk_drag_source_info_destroy (GtkDragSourceInfo *info)
 
   g_clear_object (&info->widget);
 
-  gtk_selection_remove_all (info->ipc_widget);
   g_object_set_data (G_OBJECT (info->ipc_widget), I_("gtk-info"), NULL);
   source_widgets = g_slist_remove (source_widgets, info->ipc_widget);
   gtk_drag_release_ipc_widget (info->ipc_widget);
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
index 077db5e..d3cc7e7 100644
--- a/gtk/gtkmain.c
+++ b/gtk/gtkmain.c
@@ -1692,19 +1692,7 @@ gtk_main_do_event (GdkEvent *event)
    */
   event_widget = gtk_get_event_widget (event);
   if (!event_widget)
-    {
-      /* To handle selection INCR transactions, we select
-       * PropertyNotify events on the requestor window and create
-       * a corresponding (fake) GdkWindow so that events get here.
-       * There won't be a widget though, so we have to handle
-       * them specially
-       */
-      if (event->type == GDK_PROPERTY_NOTIFY)
-        _gtk_selection_incr_event (event->any.window,
-                                   &event->property);
-
-      return;
-    }
+    return;
 
   /* If pointer or keyboard grabs are in effect, munge the events
    * so that each window group looks like a separate app.
@@ -1823,7 +1811,6 @@ gtk_main_do_event (GdkEvent *event)
     case GDK_CONFIGURE:
     case GDK_MAP:
     case GDK_UNMAP:
-    case GDK_SELECTION_NOTIFY:
     case GDK_CLIENT_EVENT:
     case GDK_WINDOW_STATE:
     case GDK_GRAB_BROKEN:
diff --git a/gtk/gtkselection.c b/gtk/gtkselection.c
index fad6aec..0c7cd56 100644
--- a/gtk/gtkselection.c
+++ b/gtk/gtkselection.c
@@ -104,96 +104,6 @@
 #include <gdk/wayland/gdkwayland.h>
 #endif
 
-#undef DEBUG_SELECTION
-
-/* Maximum size of a sent chunk, in bytes. Also the default size of
-   our buffers */
-#ifdef GDK_WINDOWING_X11
-#define GTK_SELECTION_MAX_SIZE(display)                                 \
-  GDK_IS_X11_DISPLAY (display) ?                                        \
-  MIN(262144,                                                           \
-      XExtendedMaxRequestSize (GDK_DISPLAY_XDISPLAY (display)) == 0     \
-       ? XMaxRequestSize (GDK_DISPLAY_XDISPLAY (display)) - 100         \
-       : XExtendedMaxRequestSize (GDK_DISPLAY_XDISPLAY (display)) - 100)\
-  : G_MAXINT
-#else
-/* No chunks on Win32 */
-#define GTK_SELECTION_MAX_SIZE(display) G_MAXINT
-#endif
-
-#define IDLE_ABORT_TIME 30
-
-enum {
-  INCR,
-  MULTIPLE,
-  TARGETS,
-  TIMESTAMP,
-  SAVE_TARGETS,
-  LAST_ATOM
-};
-
-typedef struct _GtkIncrConversion GtkIncrConversion;
-typedef struct _GtkIncrInfo GtkIncrInfo;
-typedef struct _GtkRetrievalInfo GtkRetrievalInfo;
-
-struct _GtkIncrConversion 
-{
-  GdkAtom          target;     /* Requested target */
-  GdkAtom          property;   /* Property to store in */
-  GtkSelectionData  data;      /* The data being supplied */
-  gint             offset;     /* Current offset in sent selection.
-                                *  -1 => All done
-                                *  -2 => Only the final (empty) portion
-                                *        left to send */
-};
-
-struct _GtkIncrInfo
-{
-  GdkWindow *requestor;                /* Requestor window - we create a GdkWindow
-                                  so we can receive events */
-  GdkAtom    selection;                /* Selection we're sending */
-  
-  GtkIncrConversion *conversions; /* Information about requested conversions -
-                                  * With MULTIPLE requests (benighted 1980's
-                                  * hardware idea), there can be more than
-                                  * one */
-  gint num_conversions;
-  gint num_incrs;              /* number of remaining INCR style transactions */
-  guint32 idle_time;
-};
-
-
-struct _GtkRetrievalInfo
-{
-  GtkWidget *widget;
-  GdkAtom selection;           /* Selection being retrieved. */
-  GdkAtom target;              /* Form of selection that we requested */
-  guint32 idle_time;           /* Number of seconds since we last heard
-                                  from selection owner */
-  guchar   *buffer;            /* Buffer in which to accumulate results */
-  gint    offset;              /* Current offset in buffer, -1 indicates
-                                  not yet started */
-  guint32 notify_time;         /* Timestamp from SelectionNotify */
-};
-
-/* Local Functions */
-static void gtk_selection_init              (void);
-static gboolean gtk_selection_retrieval_timeout (GtkRetrievalInfo *info);
-static void gtk_selection_retrieval_report  (GtkRetrievalInfo *info,
-                                            GdkAtom           type,
-                                            gint              format,
-                                            guchar           *buffer,
-                                            gint              length,
-                                            guint32           time);
-static int  gtk_selection_bytes_per_item    (gint              format);
-
-/* Local Data */
-static gint initialize = TRUE;
-static GList *current_retrievals = NULL;
-static GList *current_incrs = NULL;
-
-static GdkAtom gtk_selection_atoms[LAST_ATOM];
-
 /****************
  * Target Lists *
  ****************/
@@ -364,110 +274,6 @@ gtk_content_formats_add_uri_targets (GdkContentFormats *list)
 }
 
 /**
- * gtk_selection_remove_all:
- * @widget: a #GtkWidget 
- * 
- * Removes all handlers and unsets ownership of all 
- * selections for a widget. Called when widget is being
- * destroyed. This function will not generally be
- * called by applications.
- **/
-void
-gtk_selection_remove_all (GtkWidget *widget)
-{
-  GList *tmp_list;
-  GList *next;
-
-  g_return_if_fail (GTK_IS_WIDGET (widget));
-
-  /* Remove pending requests/incrs for this widget */
-  
-  tmp_list = current_retrievals;
-  while (tmp_list)
-    {
-      next = tmp_list->next;
-      if (((GtkRetrievalInfo *)tmp_list->data)->widget == widget)
-       {
-         current_retrievals = g_list_remove_link (current_retrievals, 
-                                                  tmp_list);
-         /* structure will be freed in timeout */
-         g_list_free (tmp_list);
-       }
-      tmp_list = next;
-    }
-}
-
-
-/**
- * gtk_selection_convert:
- * @widget: The widget which acts as requestor
- * @selection: Which selection to get
- * @target: Form of information desired (e.g., STRING)
- * @time_: Time of request (usually of triggering event)
-       In emergency, you could use #GDK_CURRENT_TIME
- * 
- * Requests the contents of a selection. When received, 
- * a “selection-received” signal will be generated.
- * 
- * Returns: %TRUE if requested succeeded. %FALSE if we could not process
- *          request. (e.g., there was already a request in process for
- *          this widget).
- **/
-gboolean
-gtk_selection_convert (GtkWidget *widget, 
-                      GdkAtom    selection, 
-                      GdkAtom    target,
-                      guint32    time_)
-{
-  GtkRetrievalInfo *info;
-  GList *tmp_list;
-  guint id;
-  
-  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
-  g_return_val_if_fail (selection != NULL, FALSE);
-  
-  if (initialize)
-    gtk_selection_init ();
-  
-  if (!gtk_widget_get_realized (widget))
-    gtk_widget_realize (widget);
-  
-  /* Check to see if there are already any retrievals in progress for
-     this widget. If we changed GDK to use the selection for the 
-     window property in which to store the retrieved information, then
-     we could support multiple retrievals for different selections.
-     This might be useful for DND. */
-  
-  tmp_list = current_retrievals;
-  while (tmp_list)
-    {
-      info = (GtkRetrievalInfo *)tmp_list->data;
-      if (info->widget == widget)
-       return FALSE;
-      tmp_list = tmp_list->next;
-    }
-  
-  info = g_slice_new (GtkRetrievalInfo);
-  
-  info->widget = widget;
-  info->selection = selection;
-  info->target = target;
-  info->idle_time = 0;
-  info->buffer = NULL;
-  info->offset = -1;
-  
-  /* Otherwise, we need to go through X */
-  
-  current_retrievals = g_list_append (current_retrievals, info);
-  gdk_selection_convert (gtk_widget_get_window (widget), selection, target, time_);
-  id = gdk_threads_add_timeout (1000,
-      (GSourceFunc) gtk_selection_retrieval_timeout, info);
-  g_source_set_name_by_id (id, "[gtk+] gtk_selection_retrieval_timeout");
-  
-  return TRUE;
-}
-
-/**
  * gtk_selection_data_get_selection:
  * @selection_data: a pointer to a #GtkSelectionData-struct.
  *
@@ -1570,453 +1376,6 @@ gtk_selection_data_targets_include_uri (const GtkSelectionData *selection_data)
   return result;
 }
 
-         
-/*************************************************************
- * gtk_selection_init:
- *     Initialize local variables
- *   arguments:
- *     
- *   results:
- *************************************************************/
-
-static void
-gtk_selection_init (void)
-{
-  gtk_selection_atoms[INCR] = gdk_atom_intern_static_string ("INCR");
-  gtk_selection_atoms[MULTIPLE] = gdk_atom_intern_static_string ("MULTIPLE");
-  gtk_selection_atoms[TIMESTAMP] = gdk_atom_intern_static_string ("TIMESTAMP");
-  gtk_selection_atoms[TARGETS] = gdk_atom_intern_static_string ("TARGETS");
-  gtk_selection_atoms[SAVE_TARGETS] = gdk_atom_intern_static_string ("SAVE_TARGETS");
-
-  initialize = FALSE;
-}
-
-/*************************************************************
- * _gtk_selection_incr_event:
- *     Called whenever an PropertyNotify event occurs for an 
- *     GdkWindow with user_data == NULL. These will be notifications
- *     that a window we are sending the selection to via the
- *     INCR protocol has deleted a property and is ready for
- *     more data.
- *
- *   arguments:
- *     window: the requestor window
- *     event:  the property event structure
- *
- *   results:
- *************************************************************/
-
-gboolean
-_gtk_selection_incr_event (GdkWindow      *window,
-                          GdkEventProperty *event)
-{
-  GList *tmp_list;
-  GtkIncrInfo *info = NULL;
-  gint num_bytes;
-  guchar *buffer;
-  gulong selection_max_size;
-  GdkPropertyState state;
-  GdkAtom atom;
-  int i;
-  GdkDisplay *display;
-  
-  gdk_event_get_property ((GdkEvent *)event, &atom, &state);
-  if (state != GDK_PROPERTY_DELETE)
-    return FALSE;
-  
-#ifdef DEBUG_SELECTION
-  g_message ("PropertyDelete, property %ld", atom);
-#endif
-
-  display = gdk_window_get_display (window);
-  selection_max_size = GTK_SELECTION_MAX_SIZE (display);
-
-  /* Now find the appropriate ongoing INCR */
-  tmp_list = current_incrs;
-  while (tmp_list)
-    {
-      info = (GtkIncrInfo *)tmp_list->data;
-      if (info->requestor == gdk_event_get_window ((GdkEvent *)event))
-       break;
-      
-      tmp_list = tmp_list->next;
-    }
-  
-  if (tmp_list == NULL)
-    return FALSE;
-  
-  /* Find out which target this is for */
-  for (i=0; i<info->num_conversions; i++)
-    {
-      if (info->conversions[i].property == atom &&
-         info->conversions[i].offset != -1)
-       {
-         int bytes_per_item;
-         
-         info->idle_time = 0;
-         
-         if (info->conversions[i].offset == -2) /* only the last 0-length
-                                                   piece*/
-           {
-             num_bytes = 0;
-             buffer = NULL;
-           }
-         else
-           {
-             num_bytes = info->conversions[i].data.length -
-               info->conversions[i].offset;
-             buffer = info->conversions[i].data.data + 
-               info->conversions[i].offset;
-             
-             if (num_bytes > selection_max_size)
-               {
-                 num_bytes = selection_max_size;
-                 info->conversions[i].offset += selection_max_size;
-               }
-             else
-               info->conversions[i].offset = -2;
-           }
-#ifdef DEBUG_SELECTION
-         g_message ("INCR: put %d bytes (offset = %d) into window 0x%lx , property %ld",
-                    num_bytes, info->conversions[i].offset, 
-                    GDK_WINDOW_XID(info->requestor), atom);
-#endif
-
-         bytes_per_item = gtk_selection_bytes_per_item (info->conversions[i].data.format);
-
-#ifdef GDK_WINDOWING_X11
-          if (GDK_IS_X11_DISPLAY (display))
-            gdk_x11_display_error_trap_push (display);
-#endif
-
-         gdk_property_change (info->requestor, atom,
-                              info->conversions[i].data.type,
-                              info->conversions[i].data.format,
-                              GDK_PROP_MODE_REPLACE,
-                              buffer,
-                              num_bytes / bytes_per_item);
-
-#ifdef GDK_WINDOWING_X11
-          if (GDK_IS_X11_DISPLAY (display))
-            gdk_x11_display_error_trap_pop_ignored (display);
-#endif
-         
-         if (info->conversions[i].offset == -2)
-           {
-             g_free (info->conversions[i].data.data);
-             info->conversions[i].data.data = NULL;
-           }
-         
-         if (num_bytes == 0)
-           {
-             info->num_incrs--;
-             info->conversions[i].offset = -1;
-           }
-       }
-    }
-  
-  /* Check if we're finished with all the targets */
-  
-  if (info->num_incrs == 0)
-    {
-      current_incrs = g_list_remove_link (current_incrs, tmp_list);
-      g_list_free (tmp_list);
-      /* Let the timeout free it */
-    }
-  
-  return TRUE;
-}
-
-/*************************************************************
- * _gtk_selection_notify:
- *     Handler for “selection-notify-event” signals on windows
- *     where a retrieval is currently in process. The selection
- *     owner has responded to our conversion request.
- *   arguments:
- *     widget:         Widget getting signal
- *     event:          Selection event structure
- *     info:           Information about this retrieval
- *   results:
- *     was event handled?
- *************************************************************/
-
-gboolean
-_gtk_selection_notify (GtkWidget        *widget,
-                      GdkEventSelection *event)
-{
-  GList *tmp_list;
-  GtkRetrievalInfo *info = NULL;
-  GdkWindow *window;
-  guchar  *buffer = NULL;
-  gint length;
-  GdkAtom type;
-  GdkAtom selection;
-  GdkAtom property;
-  gint   format;
-  guint32 time;
-
-  gdk_event_get_selection ((GdkEvent *)event, &selection);
-  gdk_event_get_selection_property ((GdkEvent *)event, &property, NULL, NULL);
-  time = gdk_event_get_time ((GdkEvent *)event);
-
-#ifdef DEBUG_SELECTION
-  g_message ("Initial receipt of selection %ld, target %ld (property = %ld)",
-            selection, target, property);
-#endif
-
-  window = gtk_widget_get_window (widget);
-
-  tmp_list = current_retrievals;
-  while (tmp_list)
-    {
-      info = (GtkRetrievalInfo *)tmp_list->data;
-      if (info->widget == widget && info->selection == selection)
-       break;
-      tmp_list = tmp_list->next;
-    }
-  
-  if (!tmp_list)               /* no retrieval in progress */
-    return FALSE;
-
-  if (property != NULL)
-    length = gdk_selection_property_get (window, &buffer,
-                                        &type, &format);
-  else
-    length = 0; /* silence gcc */
-  
-  if (property == NULL || buffer == NULL)
-    {
-      current_retrievals = g_list_remove_link (current_retrievals, tmp_list);
-      g_list_free (tmp_list);
-      /* structure will be freed in timeout */
-      gtk_selection_retrieval_report (info, NULL, 0, NULL, -1, time);
-      
-      return TRUE;
-    }
-  
-  if (type == gtk_selection_atoms[INCR])
-    {
-      /* The remainder of the selection will come through PropertyNotify
-        events */
-
-      info->notify_time = time;
-      info->idle_time = 0;
-      info->offset = 0;                /* Mark as OK to proceed */
-      gdk_window_set_events (window,
-                             gdk_window_get_events (window)
-                            | GDK_PROPERTY_CHANGE_MASK);
-    }
-  else
-    {
-      /* We don't delete the info structure - that will happen in timeout */
-      current_retrievals = g_list_remove_link (current_retrievals, tmp_list);
-      g_list_free (tmp_list);
-      
-      info->offset = length;
-      gtk_selection_retrieval_report (info,
-                                     type, format, 
-                                     buffer, length, time);
-    }
-
-  gdk_property_delete (window, property);
-
-  g_free (buffer);
-  
-  return TRUE;
-}
-
-/*************************************************************
- * _gtk_selection_property_notify:
- *     Handler for “property-notify-event” signals on windows
- *     where a retrieval is currently in process. The selection
- *     owner has added more data.
- *   arguments:
- *     widget:         Widget getting signal
- *     event:          Property event structure
- *     info:           Information about this retrieval
- *   results:
- *     was event handled?
- *************************************************************/
-
-gboolean
-_gtk_selection_property_notify (GtkWidget      *widget,
-                               GdkEventProperty *event)
-{
-  GList *tmp_list;
-  GtkRetrievalInfo *info = NULL;
-  GdkWindow *window;
-  guchar *new_buffer;
-  int length;
-  GdkAtom type;
-  gint   format;
-  GdkAtom property;
-  GdkPropertyState state;
-  
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-
-  gdk_event_get_property ((GdkEvent *)event, &property, &state);
-
-#if defined(GDK_WINDOWING_WIN32) || defined(GDK_WINDOWING_X11)
-  if ((state != GDK_PROPERTY_NEW_VALUE) ||  /* property was deleted */
-      (property != gdk_atom_intern_static_string ("GDK_SELECTION"))) /* not the right property */
-#endif
-    return FALSE;
-  
-#ifdef DEBUG_SELECTION
-  g_message ("PropertyNewValue, property %ld", property);
-#endif
-  
-  tmp_list = current_retrievals;
-  while (tmp_list)
-    {
-      info = (GtkRetrievalInfo *)tmp_list->data;
-      if (info->widget == widget)
-       break;
-      tmp_list = tmp_list->next;
-    }
-  
-  if (!tmp_list)               /* No retrieval in progress */
-    return FALSE;
-  
-  if (info->offset < 0)                /* We haven't got the SelectionNotify
-                                  for this retrieval yet */
-    return FALSE;
-  
-  info->idle_time = 0;
-
-  window = gtk_widget_get_window (widget);
-  length = gdk_selection_property_get (window, &new_buffer,
-                                      &type, &format);
-  gdk_property_delete (window, property);
-
-  /* We could do a lot better efficiency-wise by paying attention to
-     what length was sent in the initial INCR transaction, instead of
-     doing memory allocation at every step. But its only guaranteed to
-     be a _lower bound_ (pretty useless!) */
-  
-  if (length == 0 || type == NULL)             /* final zero length portion */
-    {
-      /* Info structure will be freed in timeout */
-      current_retrievals = g_list_remove_link (current_retrievals, tmp_list);
-      g_list_free (tmp_list);
-      gtk_selection_retrieval_report (info,
-                                     type, format, 
-                                     (type == NULL) ?  NULL : info->buffer,
-                                     (type == NULL) ?  -1 : info->offset,
-                                     info->notify_time);
-    }
-  else                         /* append on newly arrived data */
-    {
-      if (!info->buffer)
-       {
-#ifdef DEBUG_SELECTION
-         g_message ("Start - Adding %d bytes at offset 0",
-                    length);
-#endif
-         info->buffer = new_buffer;
-         info->offset = length;
-       }
-      else
-       {
-         
-#ifdef DEBUG_SELECTION
-         g_message ("Appending %d bytes at offset %d",
-                    length,info->offset);
-#endif
-         /* We copy length+1 bytes to preserve guaranteed null termination */
-         info->buffer = g_realloc (info->buffer, info->offset+length+1);
-         memcpy (info->buffer + info->offset, new_buffer, length+1);
-         info->offset += length;
-         g_free (new_buffer);
-       }
-    }
-  
-  return TRUE;
-}
-
-/*************************************************************
- * gtk_selection_retrieval_timeout:
- *     Timeout callback while receiving a selection.
- *   arguments:
- *     info:   Information about this retrieval
- *   results:
- *************************************************************/
-
-static gboolean
-gtk_selection_retrieval_timeout (GtkRetrievalInfo *info)
-{
-  GList *tmp_list;
-  gboolean retval;
-
-  /* Determine if retrieval has finished by checking if it still in
-     list of pending retrievals */
-  
-  tmp_list = current_retrievals;
-  while (tmp_list)
-    {
-      if (info == (GtkRetrievalInfo *)tmp_list->data)
-       break;
-      tmp_list = tmp_list->next;
-    }
-  
-  /* If retrieval is finished */
-  if (!tmp_list || info->idle_time >= IDLE_ABORT_TIME)
-    {
-      if (tmp_list && info->idle_time >= IDLE_ABORT_TIME)
-       {
-         current_retrievals = g_list_remove_link (current_retrievals, tmp_list);
-         g_list_free (tmp_list);
-         gtk_selection_retrieval_report (info, NULL, 0, NULL, -1, GDK_CURRENT_TIME);
-       }
-      
-      g_free (info->buffer);
-      g_slice_free (GtkRetrievalInfo, info);
-      
-      retval =  FALSE;         /* remove timeout */
-    }
-  else
-    {
-      info->idle_time++;
-      
-      retval =  TRUE;          /* timeout will happen again */
-    }
-
-  return retval;
-}
-
-/*************************************************************
- * gtk_selection_retrieval_report:
- *     Emits a “selection-received” signal.
- *   arguments:
- *     info:     information about the retrieval that completed
- *     buffer:   buffer containing data (NULL => errror)
- *     time:      timestamp for data in buffer
- *   results:
- *************************************************************/
-
-static void
-gtk_selection_retrieval_report (GtkRetrievalInfo *info,
-                               GdkAtom type, gint format, 
-                               guchar *buffer, gint length,
-                               guint32 time)
-{
-  GtkSelectionData data;
-  
-  data.selection = info->selection;
-  data.target = info->target;
-  data.type = type;
-  data.format = format;
-  
-  data.length = length;
-  data.data = buffer;
-  data.display = gtk_widget_get_display (info->widget);
-  
-  g_signal_emit_by_name (info->widget,
-                        "selection-received", 
-                        &data, time);
-}
-
 /**
  * gtk_selection_data_copy:
  * @data: a pointer to a #GtkSelectionData-struct.
@@ -2065,22 +1424,3 @@ G_DEFINE_BOXED_TYPE (GtkSelectionData, gtk_selection_data,
                      gtk_selection_data_copy,
                      gtk_selection_data_free)
 
-static int
-gtk_selection_bytes_per_item (gint format)
-{
-  switch (format)
-    {
-    case 8:
-      return sizeof (char);
-      break;
-    case 16:
-      return sizeof (short);
-      break;
-    case 32:
-      return sizeof (long);
-      break;
-    default:
-      g_assert_not_reached();
-    }
-  return 0;
-}
diff --git a/gtk/gtkselection.h b/gtk/gtkselection.h
index 8f79cd7..7e6b6a9 100644
--- a/gtk/gtkselection.h
+++ b/gtk/gtkselection.h
@@ -45,14 +45,6 @@ GDK_AVAILABLE_IN_ALL
 GdkContentFormats *     gtk_content_formats_add_uri_targets       (GdkContentFormats *list) 
G_GNUC_WARN_UNUSED_RESULT;
 
 GDK_AVAILABLE_IN_ALL
-gboolean gtk_selection_convert       (GtkWidget            *widget,
-                                      GdkAtom               selection,
-                                      GdkAtom               target,
-                                      guint32               time_);
-GDK_AVAILABLE_IN_ALL
-void     gtk_selection_remove_all    (GtkWidget             *widget);
-
-GDK_AVAILABLE_IN_ALL
 GdkAtom       gtk_selection_data_get_selection (const GtkSelectionData *selection_data);
 GDK_AVAILABLE_IN_ALL
 GdkAtom       gtk_selection_data_get_target    (const GtkSelectionData *selection_data);
diff --git a/gtk/gtkselectionprivate.h b/gtk/gtkselectionprivate.h
index cd3678c..896fcd0 100644
--- a/gtk/gtkselectionprivate.h
+++ b/gtk/gtkselectionprivate.h
@@ -47,13 +47,6 @@ struct _GtkSelectionData
   GdkDisplay   *display;
 };
 
-gboolean _gtk_selection_incr_event      (GdkWindow         *window,
-                                         GdkEventProperty  *event);
-gboolean _gtk_selection_notify          (GtkWidget         *widget,
-                                         GdkEventSelection *event);
-gboolean _gtk_selection_property_notify (GtkWidget         *widget,
-                                         GdkEventProperty  *event);
-
 G_END_DECLS
 
 #endif /* __GTK_SELECTION_PRIVATE_H__ */
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index b1e859b..df21504 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -521,7 +521,6 @@ enum {
   MAP_EVENT,
   UNMAP_EVENT,
   PROPERTY_NOTIFY_EVENT,
-  SELECTION_NOTIFY_EVENT,
   SELECTION_GET,
   SELECTION_RECEIVED,
   PROXIMITY_IN_EVENT,
@@ -1045,8 +1044,7 @@ gtk_widget_class_init (GtkWidgetClass *klass)
   klass->map_event = NULL;
   klass->unmap_event = NULL;
   klass->window_state_event = NULL;
-  klass->property_notify_event = _gtk_selection_property_notify;
-  klass->selection_notify_event = _gtk_selection_notify;
+  klass->property_notify_event = NULL;
   klass->selection_received = NULL;
   klass->proximity_in_event = NULL;
   klass->proximity_out_event = NULL;
@@ -2430,25 +2428,6 @@ gtk_widget_class_init (GtkWidgetClass *klass)
                               _gtk_marshal_BOOLEAN__BOXEDv);
 
   /**
-   * GtkWidget::selection-notify-event:
-   * @widget: the object which received the signal.
-   * @event: (type Gdk.EventSelection):
-   *
-   * Returns: %TRUE to stop other handlers from being invoked for the event. %FALSE to propagate the event 
further.
-   */
-  widget_signals[SELECTION_NOTIFY_EVENT] =
-    g_signal_new (I_("selection-notify-event"),
-                 G_TYPE_FROM_CLASS (klass),
-                 G_SIGNAL_RUN_LAST | G_SIGNAL_DEPRECATED,
-                 G_STRUCT_OFFSET (GtkWidgetClass, selection_notify_event),
-                 _gtk_boolean_handled_accumulator, NULL,
-                 _gtk_marshal_BOOLEAN__BOXED,
-                 G_TYPE_BOOLEAN, 1,
-                 GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
-  g_signal_set_va_marshaller (widget_signals[SELECTION_NOTIFY_EVENT], G_TYPE_FROM_CLASS (klass),
-                              _gtk_marshal_BOOLEAN__BOXEDv);
-
-  /**
    * GtkWidget::selection-received:
    * @widget: the object which received the signal.
    * @data:
@@ -6623,7 +6602,6 @@ gtk_widget_event_internal (GtkWidget      *widget,
     case GDK_UNMAP:
     case GDK_WINDOW_STATE:
     case GDK_PROPERTY_NOTIFY:
-    case GDK_SELECTION_NOTIFY:
       return gtk_widget_emit_event_signals (widget, event);
     default:
       break;
@@ -6743,9 +6721,6 @@ gtk_widget_emit_event_signals (GtkWidget      *widget,
        case GDK_PROPERTY_NOTIFY:
          signal_num = PROPERTY_NOTIFY_EVENT;
          break;
-       case GDK_SELECTION_NOTIFY:
-         signal_num = SELECTION_NOTIFY_EVENT;
-         break;
        case GDK_PROXIMITY_IN:
          signal_num = PROXIMITY_IN_EVENT;
          break;
@@ -10147,8 +10122,6 @@ gtk_widget_real_unrealize (GtkWidget *widget)
       priv->window = NULL;
     }
 
-  gtk_selection_remove_all (widget);
-
   gtk_widget_set_realized (widget, FALSE);
 }
 
diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
index 5e7de3a..9ad1a8e 100644
--- a/gtk/gtkwidget.h
+++ b/gtk/gtkwidget.h
@@ -369,12 +369,6 @@ struct _GtkWidgetClass
                                         GdkEventAny         *event);
   gboolean (* property_notify_event)   (GtkWidget           *widget,
                                         GdkEventProperty    *event);
-  gboolean (* selection_clear_event)   (GtkWidget           *widget,
-                                        GdkEventSelection   *event);
-  gboolean (* selection_request_event) (GtkWidget           *widget,
-                                        GdkEventSelection   *event);
-  gboolean (* selection_notify_event)  (GtkWidget           *widget,
-                                        GdkEventSelection   *event);
   gboolean (* proximity_in_event)      (GtkWidget           *widget,
                                         GdkEventProximity   *event);
   gboolean (* proximity_out_event)     (GtkWidget           *widget,
diff --git a/tests/testgtk.c b/tests/testgtk.c
index bf3ddc5..9a16003 100644
--- a/tests/testgtk.c
+++ b/tests/testgtk.c
@@ -7084,98 +7084,6 @@ selection_test_received (GtkWidget        *tree_view,
   return;
 }
 
-void
-selection_test_get_targets (GtkWidget *dialog, gint response, GtkWidget *tree_view)
-{
-  static GdkAtom targets_atom = NULL;
-
-  if (response != GTK_RESPONSE_APPLY)
-    {
-      gtk_widget_destroy (dialog);
-      return;
-    }
-
-  if (targets_atom == NULL)
-    targets_atom = gdk_atom_intern ("TARGETS", FALSE);
-
-  gtk_selection_convert (tree_view, GDK_SELECTION_PRIMARY, targets_atom,
-                        GDK_CURRENT_TIME);
-}
-
-void
-create_selection_test (GtkWidget *widget)
-{
-  static GtkWidget *window = NULL;
-  GtkWidget *content_area;
-  GtkWidget *vbox;
-  GtkWidget *scrolled_win;
-  GtkListStore* store;
-  GtkWidget *tree_view;
-  GtkTreeViewColumn *column;
-  GtkCellRenderer *renderer;
-  GtkWidget *label;
-
-  if (!window)
-    {
-      window = gtk_dialog_new ();
-      
-      gtk_window_set_display (GTK_WINDOW (window),
-                             gtk_widget_get_display (widget));
-
-      g_signal_connect (window, "destroy",
-                       G_CALLBACK (gtk_widget_destroyed),
-                       &window);
-
-      content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
-
-      gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
-
-      /* Create the list */
-
-      vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
-      gtk_box_pack_start (GTK_BOX (content_area), vbox);
-
-      label = gtk_label_new ("Gets available targets for current selection");
-      gtk_box_pack_start (GTK_BOX (vbox), label);
-
-      scrolled_win = gtk_scrolled_window_new (NULL, NULL);
-      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
-                                     GTK_POLICY_AUTOMATIC,
-                                     GTK_POLICY_AUTOMATIC);
-      gtk_box_pack_start (GTK_BOX (vbox), scrolled_win);
-      gtk_widget_set_size_request (scrolled_win, 100, 200);
-
-      store = gtk_list_store_new (1, G_TYPE_STRING);
-      tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
-      gtk_container_add (GTK_CONTAINER (scrolled_win), tree_view);
-
-      renderer = gtk_cell_renderer_text_new ();
-      column = gtk_tree_view_column_new_with_attributes ("Target", renderer,
-                                                         "text", 0, NULL);
-      gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
-
-      g_signal_connect (tree_view, "selection_received",
-                       G_CALLBACK (selection_test_received), NULL);
-
-      /* .. And create some buttons */
-      gtk_dialog_add_button (GTK_DIALOG (window),
-                             "Get Targets",
-                             GTK_RESPONSE_APPLY);
-
-      g_signal_connect (window, "response",
-                       G_CALLBACK (selection_test_get_targets), tree_view);
-
-      gtk_dialog_add_button (GTK_DIALOG (window),
-                             "Quit",
-                             GTK_RESPONSE_CLOSE);
-    }
-
-  if (!gtk_widget_get_visible (window))
-    gtk_widget_show (window);
-  else
-    gtk_widget_destroy (window);
-}
-
 /*
  * Test scrolling
  */
@@ -8043,7 +7951,6 @@ struct {
   { "statusbar", create_statusbar },
   { "test mainloop", create_mainloop, TRUE },
   { "test scrolling", create_scroll_test },
-  { "test selection", create_selection_test },
   { "test timeout", create_timeout_test },
   { "toggle buttons", create_toggle_buttons },
   { "tooltips", create_tooltips },



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]