Fix clipboard paste data negotiation
authorJohn Darrington <john@cellform.com>
Sat, 17 Jun 2023 09:44:20 +0000 (11:44 +0200)
committerJohn Darrington <john@cellform.com>
Sat, 17 Jun 2023 17:34:47 +0000 (19:34 +0200)
Fixed a bug which caused pasting of output to programs such as libreoffice to
get pasted as images instead of editable tables.

src/ui/gui/psppire-output-view.c

index 07dbd646161dbf5dc56ee1bdd0aee541bc880040..75d82246f0609d47b4bbb9dbe8b8f8fb630890eb 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2008-2015, 2016 Free Software Foundation.
+   Copyright (C) 2008-2015, 2016, 2023 Free Software Foundation.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -594,6 +594,7 @@ clipboard_get_cb (GtkClipboard     *clipboard,
   if (view->selected_item == NULL)
     return;
 
+  g_message ("clipboard paste of item type %d", info);
   td = create_temp_dir ("pspp", NULL, false);
   if (td == NULL)
     {
@@ -742,8 +743,31 @@ build_target_list (const struct output_item *item)
 {
   GtkTargetList *tl = gtk_target_list_new (targets, G_N_ELEMENTS (targets));
   g_return_val_if_fail (tl, NULL);
-  if (item->type == OUTPUT_ITEM_TABLE || item->type == OUTPUT_ITEM_CHART)
-    gtk_target_list_add_image_targets (tl, SELECT_FMT_IMG, TRUE);
+  switch (item->type)
+    {
+    case OUTPUT_ITEM_CHART:
+    case OUTPUT_ITEM_IMAGE:
+      gtk_target_list_add_image_targets (tl, SELECT_FMT_IMG, TRUE);
+      gtk_target_list_add_image_targets (tl, SELECT_FMT_SVG, TRUE);
+      break;
+    case OUTPUT_ITEM_TABLE:
+      gtk_target_list_add_text_targets (tl, SELECT_FMT_ODT);
+      gtk_target_list_add_text_targets (tl, SELECT_FMT_HTML);
+      break;
+    case OUTPUT_ITEM_MESSAGE:
+    case OUTPUT_ITEM_TEXT:
+      gtk_target_list_add_text_targets (tl, SELECT_FMT_UTF8);
+      gtk_target_list_add_text_targets (tl, SELECT_FMT_TEXT);
+      gtk_target_list_add_text_targets (tl, SELECT_FMT_HTML);
+      gtk_target_list_add_text_targets (tl, SELECT_FMT_ODT);
+      break;
+    case OUTPUT_ITEM_GROUP:
+    case OUTPUT_ITEM_PAGE_BREAK:
+      break;
+    default:
+      g_critical ("Unknown output item type: %d", item->type);
+      break;
+    }
   return tl;
 }