+
+static void
+psppire_data_sheet_primary_get_cb (GtkClipboard *clipboard,
+ GtkSelectionData *selection_data,
+ guint info,
+ gpointer data)
+{
+ PsppireDataSheet *data_sheet = PSPPIRE_DATA_SHEET (data);
+ struct casereader *reader;
+ struct dictionary *dict;
+
+ if (psppire_data_sheet_fetch_clip (data_sheet, FALSE, &reader, &dict))
+ {
+ psppire_data_sheet_clipboard_set (selection_data, info,
+ reader, dict);
+ casereader_destroy (reader);
+ dict_destroy (dict);
+ }
+}
+
+static void
+psppire_data_sheet_update_primary_selection (PsppireDataSheet *data_sheet,
+ gboolean should_own)
+{
+ GtkClipboard *clipboard;
+ GdkDisplay *display;
+
+ display = gtk_widget_get_display (GTK_WIDGET (data_sheet));
+ clipboard = gtk_clipboard_get_for_display (display, GDK_SELECTION_PRIMARY);
+ g_return_if_fail (clipboard != NULL);
+
+ printf ("owns_primary_selection=%d should_own=%d\n",
+ data_sheet->owns_primary_selection, should_own);
+ if (data_sheet->owns_primary_selection && !should_own)
+ {
+ data_sheet->owns_primary_selection = FALSE;
+ gtk_clipboard_clear (clipboard);
+ }
+ else if (should_own)
+ data_sheet->owns_primary_selection =
+ gtk_clipboard_set_with_owner (clipboard, targets, G_N_ELEMENTS (targets),
+ psppire_data_sheet_primary_get_cb,
+ NULL, G_OBJECT (data_sheet));
+}