summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/reference/gdk/gdk4-sections.txt5
-rw-r--r--docs/reference/gtk/gtk4-sections.txt3
-rw-r--r--gdk/broadway/gdkdisplay-broadway.c3
-rw-r--r--gdk/broadway/gdkprivate-broadway.h16
-rw-r--r--gdk/broadway/gdkselection-broadway.c43
-rw-r--r--gdk/gdkdisplayprivate.h17
-rw-r--r--gdk/gdkdnd.c14
-rw-r--r--gdk/gdkevents.c80
-rw-r--r--gdk/gdkevents.h18
-rw-r--r--gdk/gdkeventsprivate.h28
-rw-r--r--gdk/gdkselection.c104
-rw-r--r--gdk/gdkselection.h40
-rw-r--r--gdk/gdkwindow.c4
-rw-r--r--gdk/mir/gdkmirdisplay.c324
-rw-r--r--gdk/quartz/gdkdisplay-quartz.c2
-rw-r--r--gdk/quartz/gdkdisplay-quartz.h11
-rw-r--r--gdk/quartz/gdkselection-quartz.c21
-rw-r--r--gdk/wayland/gdkdisplay-wayland.c3
-rw-r--r--gdk/wayland/gdkselection-wayland.c373
-rw-r--r--gdk/x11/gdkdisplay-x11.c20
-rw-r--r--gdk/x11/gdkprivate-x11.h17
-rw-r--r--gdk/x11/gdkselection-x11.c154
-rw-r--r--gtk/gtkdnd.c1
-rw-r--r--gtk/gtkmain.c15
-rw-r--r--gtk/gtkselection.c660
-rw-r--r--gtk/gtkselection.h8
-rw-r--r--gtk/gtkselectionprivate.h7
-rw-r--r--gtk/gtkwidget.c29
-rw-r--r--gtk/gtkwidget.h6
-rw-r--r--tests/testgtk.c93
30 files changed, 2 insertions, 2117 deletions
diff --git a/docs/reference/gdk/gdk4-sections.txt b/docs/reference/gdk/gdk4-sections.txt
index f4a40d8991..7036a0717f 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 de57bc1c30..81bcf7a8ad 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 f3335beac9..43330d6128 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 5639ad0520..3cdc55e928 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 843c8a8778..9c5a4ab81f 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 3dd13a82d7..df181e0946 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 2344b7ee65..2b5d40cb12 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 624c1d2f37..6afaf6c4ce 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 f2893cc5d3..88e19809da 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 bf57607182..6681fe3743 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 76c5f19fc4..09e495083f 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 7d6e7d9443..5728f92f13 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 89202ad087..8acc87d3c7 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 f98b1e062b..09b71bcc8c 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 f2342aec41..8c3dddac90 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 77a222adc7..6f2ed37152 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 16f3569426..5cc5f68d58 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 d276cf1b59..ab6a913c54 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 7d1b30ae2f..233eebbcd6 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 fa780476cd..7ec5f869ec 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 81864e2f15..597e6b8fcd 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 2ad8c2023f..632684063e 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 231156ff2f..c7b77656b0 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 077db5e3b2..d3cc7e7a28 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 fad6aec4f9..0c7cd566a6 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 8f79cd7cb9..7e6b6a9f2c 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 cd3678c8d6..896fcd0c28 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 b1e859b608..df21504e75 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 5e7de3a505..9ad1a8e62a 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 bf3ddc5e8c..9a16003c56 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 },