Paste to a single common syntax window instead of a new one.
authorJohn Darrington <john@darrington.wattle.id.au>
Sun, 16 May 2010 11:21:47 +0000 (13:21 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Sun, 16 May 2010 11:21:47 +0000 (13:21 +0200)
Previously, when a dialog box's "paste" button was pressed, a
new syntax window was created and the syntax pasted to it.  This
change alters that behaviour.  Now there is just one syntax window
that is used for all paste operations.  Fixes bug #27686

src/ui/gui/helper.c

index e25342ed0dc2a472a54db9c256bc3fa48642fed6..e6f7c672b0ab7b59d41d8cbe7bc9af19036f3139 100644 (file)
@@ -40,6 +40,7 @@
 #include <data/settings.h>
 
 #include "psppire-data-store.h"
+#include "psppire.h"
 
 #include "gl/configmake.h"
 #include "xalloc.h"
@@ -274,14 +275,35 @@ clone_list_store (const GtkListStore *src)
 }
 
 
+
+
+static gboolean 
+on_delete (GtkWindow *window, GdkEvent *e, GtkWindow **addr)
+{
+  *addr = NULL;
+
+  return FALSE;
+}
+
 void
 paste_syntax_in_new_window (const gchar *syntax)
 {
-  GtkWidget *se = psppire_syntax_window_new ();
+  static GtkWidget *the_syntax_pasteboard = NULL;
+
+  if ( NULL == the_syntax_pasteboard)
+    {
+      the_syntax_pasteboard = psppire_syntax_window_new ();
+      g_signal_connect (the_syntax_pasteboard, "delete-event", G_CALLBACK (on_delete),
+                       &the_syntax_pasteboard);
+    }
+
+  gtk_text_buffer_insert_at_cursor (PSPPIRE_SYNTAX_WINDOW (the_syntax_pasteboard)->buffer,
+                                   syntax, -1);
 
-  gtk_text_buffer_insert_at_cursor (PSPPIRE_SYNTAX_WINDOW (se)->buffer, syntax, -1);
+  gtk_text_buffer_insert_at_cursor (PSPPIRE_SYNTAX_WINDOW (the_syntax_pasteboard)->buffer,
+                                   "\n", 1);
 
-  gtk_widget_show (se);
+  gtk_widget_show (the_syntax_pasteboard);
 }