]> Pileus Git - ~andy/gtk/blobdiff - gtk/testselection.c
Add a 'text' argument to set the initial text.
[~andy/gtk] / gtk / testselection.c
index 3377cc62309a56f095ba1e94b13aa1b8a7ca7908..a13fb5ad442107d06ea0013670f3a2188be920dc 100644 (file)
  * Library General Public License for more details.
  *
  * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
  */
 
+/*
+ * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
+ * file for a list of people on the GTK+ Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#include <stdio.h>
+#include <string.h>
 #include "gtk.h"
 
 typedef enum {
@@ -35,7 +45,7 @@ typedef enum {
   STRING,
   TEXT,
   WINDOW,
-  LAST_SEL_TYPE,
+  LAST_SEL_TYPE
 } SelType;
 
 GdkAtom seltypes[LAST_SEL_TYPE];
@@ -45,50 +55,49 @@ typedef struct _Target {
   SelType type;
   GdkAtom target;
   gint format;
-  GtkSelectionFunction *handler;
 } Target;
 
 /* The following is a list of all the selection targets defined
    in the ICCCM */
 
 static Target targets[] = {
-  { "ADOBE_PORTABLE_DOCUMENT_FORMAT",      STRING,        0, 8,  NULL },
-  { "APPLE_PICT",                          APPLE_PICT,    0, 8,  NULL },
-  { "BACKGROUND",                          PIXEL,         0, 32, NULL },
-  { "BITMAP",                              BITMAP,        0, 32, NULL },
-  { "CHARACTER_POSITION",                   SPAN,         0, 32, NULL },
-  { "CLASS",                               TEXT,          0, 8,  NULL },
-  { "CLIENT_WINDOW",                       WINDOW,        0, 32, NULL },
-  { "COLORMAP",                            COLORMAP,      0, 32, NULL },
-  { "COLUMN_NUMBER",                       SPAN,          0, 32, NULL },
-  { "COMPOUND_TEXT",                       COMPOUND_TEXT, 0, 8,  NULL },
-  /*  { "DELETE", "NULL", 0, ?, NULL }, */
-  { "DRAWABLE",                            DRAWABLE,      0, 32, NULL },
-  { "ENCAPSULATED_POSTSCRIPT",                     STRING,        0, 8,  NULL },
-  { "ENCAPSULATED_POSTSCRIPT_INTERCHANGE",  STRING,       0, 8,  NULL },
-  { "FILE_NAME",                           TEXT,          0, 8,  NULL },
-  { "FOREGROUND",                          PIXEL,         0, 32, NULL },
-  { "HOST_NAME",                           TEXT,          0, 8,  NULL },
+  { "ADOBE_PORTABLE_DOCUMENT_FORMAT",      STRING,        0, 8 },
+  { "APPLE_PICT",                          APPLE_PICT,    0, 8 },
+  { "BACKGROUND",                          PIXEL,         0, 32 },
+  { "BITMAP",                              BITMAP,        0, 32 },
+  { "CHARACTER_POSITION",                   SPAN,         0, 32 },
+  { "CLASS",                               TEXT,          0, 8 },
+  { "CLIENT_WINDOW",                       WINDOW,        0, 32 },
+  { "COLORMAP",                            COLORMAP,      0, 32 },
+  { "COLUMN_NUMBER",                       SPAN,          0, 32 },
+  { "COMPOUND_TEXT",                       COMPOUND_TEXT, 0, 8 },
+  /*  { "DELETE", "NULL", 0, ? }, */
+  { "DRAWABLE",                            DRAWABLE,      0, 32 },
+  { "ENCAPSULATED_POSTSCRIPT",                     STRING,        0, 8 },
+  { "ENCAPSULATED_POSTSCRIPT_INTERCHANGE",  STRING,       0, 8 },
+  { "FILE_NAME",                           TEXT,          0, 8 },
+  { "FOREGROUND",                          PIXEL,         0, 32 },
+  { "HOST_NAME",                           TEXT,          0, 8 },
   /*  { "INSERT_PROPERTY", "NULL", 0, ? NULL }, */
   /*  { "INSERT_SELECTION", "NULL", 0, ? NULL }, */
-  { "LENGTH",                              INTEGER,       0, 32, NULL },
-  { "LINE_NUMBER",                         SPAN,          0, 32, NULL },
-  { "LIST_LENGTH",                         INTEGER,       0, 32, NULL },
-  { "MODULE",                              TEXT,          0, 8,  NULL },
-  /*  { "MULTIPLE", "ATOM_PAIR", 0, 32, NULL }, */
-  { "NAME",                                TEXT,          0, 8,  NULL },
-  { "ODIF",                                TEXT,          0, 8,  NULL },
-  { "OWNER_OS",                            TEXT,          0, 8,  NULL },
-  { "PIXMAP",                              PIXMAP,        0, 32, NULL },
-  { "POSTSCRIPT",                          STRING,        0, 8,  NULL },
-  { "PROCEDURE",                           TEXT,          0, 8,  NULL },
-  { "PROCESS",                             INTEGER,       0, 32, NULL },
-  { "STRING",                              STRING,        0, 8,  NULL },
-  { "TARGETS",                                     ATOM,          0, 32, NULL },
-  { "TASK",                                INTEGER,       0, 32, NULL },
-  { "TEXT",                                TEXT,          0, 8 , NULL },
-  { "TIMESTAMP",                           INTEGER,       0, 32, NULL },
-  { "USER",                                TEXT,          0, 8,  NULL },
+  { "LENGTH",                              INTEGER,       0, 32 },
+  { "LINE_NUMBER",                         SPAN,          0, 32 },
+  { "LIST_LENGTH",                         INTEGER,       0, 32 },
+  { "MODULE",                              TEXT,          0, 8 },
+  /*  { "MULTIPLE", "ATOM_PAIR", 0, 32 }, */
+  { "NAME",                                TEXT,          0, 8 },
+  { "ODIF",                                TEXT,          0, 8 },
+  { "OWNER_OS",                            TEXT,          0, 8 },
+  { "PIXMAP",                              PIXMAP,        0, 32 },
+  { "POSTSCRIPT",                          STRING,        0, 8 },
+  { "PROCEDURE",                           TEXT,          0, 8 },
+  { "PROCESS",                             INTEGER,       0, 32 },
+  { "STRING",                              STRING,        0, 8 },
+  { "TARGETS",                                     ATOM,          0, 32 },
+  { "TASK",                                INTEGER,       0, 32 },
+  { "TEXT",                                TEXT,          0, 8  },
+  { "TIMESTAMP",                           INTEGER,       0, 32 },
+  { "USER",                                TEXT,          0, 8 },
 };
 
 static int num_targets = sizeof(targets)/sizeof(Target);
@@ -100,7 +109,7 @@ GtkWidget *selection_button;
 GString *selection_string = NULL;
 
 static void
-init_atoms ()
+init_atoms (void)
 {
   int i;
 
@@ -134,7 +143,7 @@ selection_toggled (GtkWidget *widget)
                                                GDK_SELECTION_PRIMARY,
                                                GDK_CURRENT_TIME);
       if (!have_selection)
-       gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(widget), FALSE);
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widget), FALSE);
     }
   else
     {
@@ -149,11 +158,15 @@ selection_toggled (GtkWidget *widget)
 }
 
 void
-selection_handle (GtkWidget *widget, 
-                 GtkSelectionData *selection_data, gpointer data)
+selection_get (GtkWidget *widget, 
+              GtkSelectionData *selection_data,
+              guint      info,
+              guint      time,
+              gpointer   data)
 {
   guchar *buffer;
   gint len;
+  GdkAtom type = GDK_NONE;
 
   if (!selection_string)
     {
@@ -162,21 +175,27 @@ selection_handle (GtkWidget *widget,
     }      
   else
     {
-      buffer = selection_string->str;
+      buffer = (guchar *)selection_string->str;
       len = selection_string->len;
     }
+
+  switch (info)
+    {
+    case COMPOUND_TEXT:
+    case TEXT:
+      type = seltypes[COMPOUND_TEXT];
+    case STRING:
+      type = seltypes[STRING];
+    }
   
-  gtk_selection_data_set (selection_data,
-                         selection_data->target == seltypes[COMPOUND_TEXT] ?
-                                 seltypes[COMPOUND_TEXT] : seltypes[STRING],
-                         8, buffer, len);
+  gtk_selection_data_set (selection_data, type, 8, buffer, len);
 }
 
 gint
 selection_clear (GtkWidget *widget, GdkEventSelection *event)
 {
   have_selection = FALSE;
-  gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(widget), FALSE);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widget), FALSE);
 
   return TRUE;
 }
@@ -282,8 +301,8 @@ selection_received (GtkWidget *widget, GtkSelectionData *data)
 
   gtk_text_freeze (GTK_TEXT (selection_text));
   gtk_text_set_point (GTK_TEXT (selection_text), 0);
-  gtk_text_foreward_delete (GTK_TEXT (selection_text), 
-                           gtk_text_get_length (GTK_TEXT (selection_text)));
+  gtk_text_forward_delete (GTK_TEXT (selection_text), 
+                          gtk_text_get_length (GTK_TEXT (selection_text)));
 
   position = 0;
   while (position < data->length)
@@ -319,6 +338,7 @@ selection_received (GtkWidget *widget, GtkSelectionData *data)
                    name?name:"<unknown>",
                    data->type);
            position = data->length;
+           continue;
          }
        }
       gtk_text_insert (GTK_TEXT (selection_text), NULL, 
@@ -353,7 +373,7 @@ paste (GtkWidget *widget, GtkWidget *entry)
 }
 
 void
-quit ()
+quit (void)
 {
   gtk_exit (0);
 }
@@ -369,6 +389,13 @@ main (int argc, char *argv[])
   GtkWidget *hscrollbar;
   GtkWidget *vscrollbar;
   GtkWidget *hbox;
+
+  static GtkTargetEntry targetlist[] = {
+    { "STRING",        0, STRING },
+    { "TEXT",          0, TEXT },
+    { "COMPOUND_TEXT", 0, COMPOUND_TEXT }
+  };
+  static gint ntargets = sizeof(targetlist) / sizeof(targetlist[0]);
   
   gtk_init (&argc, &argv);
 
@@ -376,13 +403,13 @@ main (int argc, char *argv[])
 
   dialog = gtk_dialog_new ();
   gtk_widget_set_name (dialog, "Test Input");
-  gtk_container_border_width (GTK_CONTAINER(dialog), 0);
+  gtk_container_set_border_width (GTK_CONTAINER(dialog), 0);
 
   gtk_signal_connect (GTK_OBJECT (dialog), "destroy",
                      GTK_SIGNAL_FUNC (quit), NULL);
 
   table = gtk_table_new (4, 2, FALSE);
-  gtk_container_border_width (GTK_CONTAINER(table), 10);
+  gtk_container_set_border_width (GTK_CONTAINER(table), 10);
 
   gtk_table_set_row_spacing (GTK_TABLE (table), 0, 5);
   gtk_table_set_row_spacing (GTK_TABLE (table), 1, 2);
@@ -404,15 +431,11 @@ main (int argc, char *argv[])
   gtk_signal_connect (GTK_OBJECT(selection_button), "selection_received",
                      GTK_SIGNAL_FUNC (selection_received), NULL);
 
-  gtk_selection_add_handler (selection_button, GDK_SELECTION_PRIMARY,
-                            seltypes[STRING], selection_handle, NULL, NULL);
-
-  gtk_selection_add_handler (selection_button, GDK_SELECTION_PRIMARY,
-                            seltypes[TEXT], selection_handle, NULL, NULL);
+  gtk_selection_add_targets (selection_button, GDK_SELECTION_PRIMARY,
+                            targetlist, ntargets);
 
-  gtk_selection_add_handler (selection_button, GDK_SELECTION_PRIMARY,
-                            seltypes[COMPOUND_TEXT],
-                            selection_handle, NULL, NULL);
+  gtk_signal_connect (GTK_OBJECT(selection_button), "selection_get",
+                     GTK_SIGNAL_FUNC (selection_get), NULL);
 
   selection_text = gtk_text_new (NULL, NULL);
   gtk_table_attach_defaults (GTK_TABLE (table), selection_text, 0, 1, 1, 2);