Blame tests/testselection.c

Packit Service fb6fa5
/* GTK - The GIMP Toolkit
Packit Service fb6fa5
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is free software; you can redistribute it and/or
Packit Service fb6fa5
 * modify it under the terms of the GNU Lesser General Public
Packit Service fb6fa5
 * License as published by the Free Software Foundation; either
Packit Service fb6fa5
 * version 2 of the License, or (at your option) any later version.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is distributed in the hope that it will be useful,
Packit Service fb6fa5
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service fb6fa5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service fb6fa5
 * Lesser General Public License for more details.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * You should have received a copy of the GNU Lesser General Public
Packit Service fb6fa5
 * License along with this library; if not, write to the
Packit Service fb6fa5
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit Service fb6fa5
 * Boston, MA 02111-1307, USA.
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
/*
Packit Service fb6fa5
 * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
Packit Service fb6fa5
 * file for a list of people on the GTK+ Team.  See the ChangeLog
Packit Service fb6fa5
 * files for a list of changes.  These files are distributed with
Packit Service fb6fa5
 * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
#undef GTK_DISABLE_DEPRECATED
Packit Service fb6fa5
Packit Service fb6fa5
#include "config.h"
Packit Service fb6fa5
#include <stdio.h>
Packit Service fb6fa5
#include <string.h>
Packit Service fb6fa5
#define GTK_ENABLE_BROKEN
Packit Service fb6fa5
#include "gtk/gtk.h"
Packit Service fb6fa5
Packit Service fb6fa5
typedef enum {
Packit Service fb6fa5
  SEL_TYPE_NONE,
Packit Service fb6fa5
  APPLE_PICT,
Packit Service fb6fa5
  ATOM,
Packit Service fb6fa5
  ATOM_PAIR,
Packit Service fb6fa5
  BITMAP,
Packit Service fb6fa5
  C_STRING,
Packit Service fb6fa5
  COLORMAP,
Packit Service fb6fa5
  COMPOUND_TEXT,
Packit Service fb6fa5
  DRAWABLE,
Packit Service fb6fa5
  INTEGER,
Packit Service fb6fa5
  PIXEL,
Packit Service fb6fa5
  PIXMAP,
Packit Service fb6fa5
  SPAN,
Packit Service fb6fa5
  STRING,
Packit Service fb6fa5
  TEXT,
Packit Service fb6fa5
  WINDOW,
Packit Service fb6fa5
  LAST_SEL_TYPE
Packit Service fb6fa5
} SelType;
Packit Service fb6fa5
Packit Service fb6fa5
GdkAtom seltypes[LAST_SEL_TYPE];
Packit Service fb6fa5
Packit Service fb6fa5
typedef struct _Target {
Packit Service fb6fa5
  gchar *target_name;
Packit Service fb6fa5
  SelType type;
Packit Service fb6fa5
  GdkAtom target;
Packit Service fb6fa5
  gint format;
Packit Service fb6fa5
} Target;
Packit Service fb6fa5
Packit Service fb6fa5
/* The following is a list of all the selection targets defined
Packit Service fb6fa5
   in the ICCCM */
Packit Service fb6fa5
Packit Service fb6fa5
static Target targets[] = {
Packit Service fb6fa5
  { "ADOBE_PORTABLE_DOCUMENT_FORMAT",	    STRING, 	   NULL, 8 },
Packit Service fb6fa5
  { "APPLE_PICT", 			    APPLE_PICT,    NULL, 8 },
Packit Service fb6fa5
  { "BACKGROUND",			    PIXEL,         NULL, 32 },
Packit Service fb6fa5
  { "BITMAP", 				    BITMAP,        NULL, 32 },
Packit Service fb6fa5
  { "CHARACTER_POSITION",                   SPAN, 	   NULL, 32 },
Packit Service fb6fa5
  { "CLASS", 				    TEXT, 	   NULL, 8 },
Packit Service fb6fa5
  { "CLIENT_WINDOW", 			    WINDOW, 	   NULL, 32 },
Packit Service fb6fa5
  { "COLORMAP", 			    COLORMAP,      NULL, 32 },
Packit Service fb6fa5
  { "COLUMN_NUMBER", 			    SPAN, 	   NULL, 32 },
Packit Service fb6fa5
  { "COMPOUND_TEXT", 			    COMPOUND_TEXT, NULL, 8 },
Packit Service fb6fa5
  /*  { "DELETE", "NULL", 0, ? }, */
Packit Service fb6fa5
  { "DRAWABLE", 			    DRAWABLE,      NULL, 32 },
Packit Service fb6fa5
  { "ENCAPSULATED_POSTSCRIPT", 		    STRING, 	   NULL, 8 },
Packit Service fb6fa5
  { "ENCAPSULATED_POSTSCRIPT_INTERCHANGE",  STRING, 	   NULL, 8 },
Packit Service fb6fa5
  { "FILE_NAME", 			    TEXT, 	   NULL, 8 },
Packit Service fb6fa5
  { "FOREGROUND", 			    PIXEL, 	   NULL, 32 },
Packit Service fb6fa5
  { "HOST_NAME", 			    TEXT, 	   NULL, 8 },
Packit Service fb6fa5
  /*  { "INSERT_PROPERTY", "NULL", 0, ? NULL }, */
Packit Service fb6fa5
  /*  { "INSERT_SELECTION", "NULL", 0, ? NULL }, */
Packit Service fb6fa5
  { "LENGTH", 				    INTEGER, 	   NULL, 32 },
Packit Service fb6fa5
  { "LINE_NUMBER", 			    SPAN, 	   NULL, 32 },
Packit Service fb6fa5
  { "LIST_LENGTH", 			    INTEGER,       NULL, 32 },
Packit Service fb6fa5
  { "MODULE", 				    TEXT, 	   NULL, 8 },
Packit Service fb6fa5
  /*  { "MULTIPLE", "ATOM_PAIR", 0, 32 }, */
Packit Service fb6fa5
  { "NAME", 				    TEXT, 	   NULL, 8 },
Packit Service fb6fa5
  { "ODIF", 				    TEXT,          NULL, 8 },
Packit Service fb6fa5
  { "OWNER_OS", 			    TEXT, 	   NULL, 8 },
Packit Service fb6fa5
  { "PIXMAP", 				    PIXMAP,        NULL, 32 },
Packit Service fb6fa5
  { "POSTSCRIPT", 			    STRING,        NULL, 8 },
Packit Service fb6fa5
  { "PROCEDURE", 			    TEXT,          NULL, 8 },
Packit Service fb6fa5
  { "PROCESS",				    INTEGER,       NULL, 32 },
Packit Service fb6fa5
  { "STRING", 				    STRING,        NULL, 8 },
Packit Service fb6fa5
  { "TARGETS", 				    ATOM, 	   NULL, 32 },
Packit Service fb6fa5
  { "TASK", 				    INTEGER,       NULL, 32 },
Packit Service fb6fa5
  { "TEXT", 				    TEXT,          NULL, 8  },
Packit Service fb6fa5
  { "TIMESTAMP", 			    INTEGER,       NULL, 32 },
Packit Service fb6fa5
  { "USER", 				    TEXT, 	   NULL, 8 },
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
static int num_targets = sizeof(targets)/sizeof(Target);
Packit Service fb6fa5
Packit Service fb6fa5
static int have_selection = FALSE;
Packit Service fb6fa5
Packit Service fb6fa5
GtkWidget *selection_widget;
Packit Service fb6fa5
GtkWidget *selection_text;
Packit Service fb6fa5
GtkWidget *selection_button;
Packit Service fb6fa5
GString *selection_string = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
init_atoms (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  int i;
Packit Service fb6fa5
Packit Service fb6fa5
  seltypes[SEL_TYPE_NONE] = GDK_NONE;
Packit Service fb6fa5
  seltypes[APPLE_PICT] = gdk_atom_intern ("APPLE_PICT",FALSE);
Packit Service fb6fa5
  seltypes[ATOM]       = gdk_atom_intern ("ATOM",FALSE);
Packit Service fb6fa5
  seltypes[ATOM_PAIR]  = gdk_atom_intern ("ATOM_PAIR",FALSE);
Packit Service fb6fa5
  seltypes[BITMAP]     = gdk_atom_intern ("BITMAP",FALSE);
Packit Service fb6fa5
  seltypes[C_STRING]   = gdk_atom_intern ("C_STRING",FALSE);
Packit Service fb6fa5
  seltypes[COLORMAP]   = gdk_atom_intern ("COLORMAP",FALSE);
Packit Service fb6fa5
  seltypes[COMPOUND_TEXT] = gdk_atom_intern ("COMPOUND_TEXT",FALSE);
Packit Service fb6fa5
  seltypes[DRAWABLE]   = gdk_atom_intern ("DRAWABLE",FALSE);
Packit Service fb6fa5
  seltypes[INTEGER]    = gdk_atom_intern ("INTEGER",FALSE);
Packit Service fb6fa5
  seltypes[PIXEL]      = gdk_atom_intern ("PIXEL",FALSE);
Packit Service fb6fa5
  seltypes[PIXMAP]     = gdk_atom_intern ("PIXMAP",FALSE);
Packit Service fb6fa5
  seltypes[SPAN]       = gdk_atom_intern ("SPAN",FALSE);
Packit Service fb6fa5
  seltypes[STRING]     = gdk_atom_intern ("STRING",FALSE);
Packit Service fb6fa5
  seltypes[TEXT]       = gdk_atom_intern ("TEXT",FALSE);
Packit Service fb6fa5
  seltypes[WINDOW]     = gdk_atom_intern ("WINDOW",FALSE);
Packit Service fb6fa5
Packit Service fb6fa5
  for (i=0; i
Packit Service fb6fa5
    targets[i].target = gdk_atom_intern (targets[i].target_name, FALSE);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
selection_toggled (GtkWidget *widget)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if (GTK_TOGGLE_BUTTON(widget)->active)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      have_selection = gtk_selection_owner_set (selection_widget,
Packit Service fb6fa5
						GDK_SELECTION_PRIMARY,
Packit Service fb6fa5
						GDK_CURRENT_TIME);
Packit Service fb6fa5
      if (!have_selection)
Packit Service fb6fa5
	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widget), FALSE);
Packit Service fb6fa5
    }
Packit Service fb6fa5
  else
Packit Service fb6fa5
    {
Packit Service fb6fa5
      if (have_selection)
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  if (gdk_selection_owner_get (GDK_SELECTION_PRIMARY) == widget->window)
Packit Service fb6fa5
	    gtk_selection_owner_set (NULL, GDK_SELECTION_PRIMARY,
Packit Service fb6fa5
				     GDK_CURRENT_TIME);
Packit Service fb6fa5
	  have_selection = FALSE;
Packit Service fb6fa5
	}
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
selection_get (GtkWidget *widget, 
Packit Service fb6fa5
	       GtkSelectionData *selection_data,
Packit Service fb6fa5
	       guint      info,
Packit Service fb6fa5
	       guint      time,
Packit Service fb6fa5
	       gpointer   data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  guchar *buffer;
Packit Service fb6fa5
  gint len;
Packit Service fb6fa5
  GdkAtom type = GDK_NONE;
Packit Service fb6fa5
Packit Service fb6fa5
  if (!selection_string)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      buffer = NULL;
Packit Service fb6fa5
      len = 0;
Packit Service fb6fa5
    }      
Packit Service fb6fa5
  else
Packit Service fb6fa5
    {
Packit Service fb6fa5
      buffer = (guchar *)selection_string->str;
Packit Service fb6fa5
      len = selection_string->len;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  switch (info)
Packit Service fb6fa5
    {
Packit Service fb6fa5
    case COMPOUND_TEXT:
Packit Service fb6fa5
    case TEXT:
Packit Service fb6fa5
      type = seltypes[COMPOUND_TEXT];
Packit Service fb6fa5
    case STRING:
Packit Service fb6fa5
      type = seltypes[STRING];
Packit Service fb6fa5
    }
Packit Service fb6fa5
  
Packit Service fb6fa5
  gtk_selection_data_set (selection_data, type, 8, buffer, len);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
gint
Packit Service fb6fa5
selection_clear (GtkWidget *widget, GdkEventSelection *event)
Packit Service fb6fa5
{
Packit Service fb6fa5
  have_selection = FALSE;
Packit Service fb6fa5
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(selection_button), FALSE);
Packit Service fb6fa5
Packit Service fb6fa5
  return TRUE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
gchar *
Packit Service fb6fa5
stringify_atom (guchar *data, gint *position)
Packit Service fb6fa5
{
Packit Service fb6fa5
  gchar *str = gdk_atom_name (*(GdkAtom *)(data+*position));
Packit Service fb6fa5
  *position += sizeof(GdkAtom);
Packit Service fb6fa5
    
Packit Service fb6fa5
  return str;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
gchar *
Packit Service fb6fa5
stringify_text (guchar *data, gint *position)
Packit Service fb6fa5
{
Packit Service fb6fa5
  gchar *str = g_strdup ((gchar *)(data+*position));
Packit Service fb6fa5
  *position += strlen (str) + 1;
Packit Service fb6fa5
    
Packit Service fb6fa5
  return str;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
gchar *
Packit Service fb6fa5
stringify_xid (guchar *data, gint *position)
Packit Service fb6fa5
{
Packit Service fb6fa5
  gchar buffer[20];
Packit Service fb6fa5
  gchar *str;
Packit Service fb6fa5
Packit Service fb6fa5
  sprintf(buffer,"0x%x",*(guint32 *)(data+*position));
Packit Service fb6fa5
  str = g_strdup (buffer);
Packit Service fb6fa5
Packit Service fb6fa5
  *position += sizeof(guint32);
Packit Service fb6fa5
    
Packit Service fb6fa5
  return str;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
gchar *
Packit Service fb6fa5
stringify_integer (guchar *data, gint *position)
Packit Service fb6fa5
{
Packit Service fb6fa5
  gchar buffer[20];
Packit Service fb6fa5
  gchar *str;
Packit Service fb6fa5
Packit Service fb6fa5
  sprintf(buffer,"%d",*(int *)(data+*position));
Packit Service fb6fa5
  str = g_strdup (buffer);
Packit Service fb6fa5
Packit Service fb6fa5
  *position += sizeof(int);
Packit Service fb6fa5
    
Packit Service fb6fa5
  return str;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
gchar *
Packit Service fb6fa5
stringify_span (guchar *data, gint *position)
Packit Service fb6fa5
{
Packit Service fb6fa5
  gchar buffer[42];
Packit Service fb6fa5
  gchar *str;
Packit Service fb6fa5
Packit Service fb6fa5
  sprintf(buffer,"%d - %d",((int *)(data+*position))[0],
Packit Service fb6fa5
	  ((int *)(data+*position))[1]);
Packit Service fb6fa5
  str = g_strdup (buffer);
Packit Service fb6fa5
Packit Service fb6fa5
  *position += 2*sizeof(int);
Packit Service fb6fa5
    
Packit Service fb6fa5
  return str;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
selection_received (GtkWidget *widget, GtkSelectionData *data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  int position;
Packit Service fb6fa5
  int i;
Packit Service fb6fa5
  SelType seltype;
Packit Service fb6fa5
  char *str;
Packit Service fb6fa5
  
Packit Service fb6fa5
  if (data->length < 0)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_print("Error retrieving selection\n");
Packit Service fb6fa5
      return;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  seltype = SEL_TYPE_NONE;
Packit Service fb6fa5
  for (i=0; i
Packit Service fb6fa5
    {
Packit Service fb6fa5
      if (seltypes[i] == data->type)
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  seltype = i;
Packit Service fb6fa5
	  break;
Packit Service fb6fa5
	}
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (seltype == SEL_TYPE_NONE)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      char *name = gdk_atom_name (data->type);
Packit Service fb6fa5
      g_print("Don't know how to handle type: %s\n",
Packit Service fb6fa5
	      name?name:"<unknown>");
Packit Service fb6fa5
      return;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (selection_string != NULL)
Packit Service fb6fa5
    g_string_free (selection_string, TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
  selection_string = g_string_new (NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_text_freeze (GTK_TEXT (selection_text));
Packit Service fb6fa5
  gtk_text_set_point (GTK_TEXT (selection_text), 0);
Packit Service fb6fa5
  gtk_text_forward_delete (GTK_TEXT (selection_text), 
Packit Service fb6fa5
			   gtk_text_get_length (GTK_TEXT (selection_text)));
Packit Service fb6fa5
Packit Service fb6fa5
  position = 0;
Packit Service fb6fa5
  while (position < data->length)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      switch (seltype)
Packit Service fb6fa5
	{
Packit Service fb6fa5
	case ATOM:
Packit Service fb6fa5
	  str = stringify_atom (data->data, &position);
Packit Service fb6fa5
	  break;
Packit Service fb6fa5
	case COMPOUND_TEXT:
Packit Service fb6fa5
	case STRING:
Packit Service fb6fa5
	case TEXT:
Packit Service fb6fa5
	  str = stringify_text (data->data, &position);
Packit Service fb6fa5
	  break;
Packit Service fb6fa5
	case BITMAP:
Packit Service fb6fa5
	case DRAWABLE:
Packit Service fb6fa5
	case PIXMAP:
Packit Service fb6fa5
	case WINDOW:
Packit Service fb6fa5
	case COLORMAP:
Packit Service fb6fa5
	  str = stringify_xid (data->data, &position);
Packit Service fb6fa5
	  break;
Packit Service fb6fa5
	case INTEGER:
Packit Service fb6fa5
	case PIXEL:
Packit Service fb6fa5
	  str = stringify_integer (data->data, &position);
Packit Service fb6fa5
	  break;
Packit Service fb6fa5
	case SPAN:
Packit Service fb6fa5
	  str = stringify_span (data->data, &position);
Packit Service fb6fa5
	  break;
Packit Service fb6fa5
	default:
Packit Service fb6fa5
	  {
Packit Service fb6fa5
	    char *name = gdk_atom_name (data->type);
Packit Service fb6fa5
	    g_print("Can't convert type %s to string\n",
Packit Service fb6fa5
		    name?name:"<unknown>");
Packit Service fb6fa5
	    position = data->length;
Packit Service fb6fa5
	    continue;
Packit Service fb6fa5
	  }
Packit Service fb6fa5
	}
Packit Service fb6fa5
      gtk_text_insert (GTK_TEXT (selection_text), NULL, 
Packit Service fb6fa5
		       &selection_text->style->black, 
Packit Service fb6fa5
		       NULL, str, -1);
Packit Service fb6fa5
      gtk_text_insert (GTK_TEXT (selection_text), NULL, 
Packit Service fb6fa5
		       &selection_text->style->black, 
Packit Service fb6fa5
		       NULL, "\n", -1);
Packit Service fb6fa5
      g_string_append (selection_string, str);
Packit Service fb6fa5
      g_free (str);
Packit Service fb6fa5
    }
Packit Service fb6fa5
  gtk_text_thaw (GTK_TEXT (selection_text));
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
paste (GtkWidget *widget, GtkWidget *entry)
Packit Service fb6fa5
{
Packit Service fb6fa5
  const char *name;
Packit Service fb6fa5
  GdkAtom atom;
Packit Service fb6fa5
Packit Service fb6fa5
  name = gtk_entry_get_text (GTK_ENTRY(entry));
Packit Service fb6fa5
  atom = gdk_atom_intern (name, FALSE);
Packit Service fb6fa5
Packit Service fb6fa5
  if (atom == GDK_NONE)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_print("Could not create atom: \"%s\"\n",name);
Packit Service fb6fa5
      return;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_selection_convert (selection_widget, GDK_SELECTION_PRIMARY, atom, 
Packit Service fb6fa5
			 GDK_CURRENT_TIME);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
quit (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  gtk_exit (0);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
int
Packit Service fb6fa5
main (int argc, char *argv[])
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkWidget *dialog;
Packit Service fb6fa5
  GtkWidget *button;
Packit Service fb6fa5
  GtkWidget *table;
Packit Service fb6fa5
  GtkWidget *label;
Packit Service fb6fa5
  GtkWidget *entry;
Packit Service fb6fa5
  GtkWidget *hscrollbar;
Packit Service fb6fa5
  GtkWidget *vscrollbar;
Packit Service fb6fa5
  GtkWidget *hbox;
Packit Service fb6fa5
Packit Service fb6fa5
  static GtkTargetEntry targetlist[] = {
Packit Service fb6fa5
    { "STRING",        0, STRING },
Packit Service fb6fa5
    { "TEXT",          0, TEXT },
Packit Service fb6fa5
    { "COMPOUND_TEXT", 0, COMPOUND_TEXT }
Packit Service fb6fa5
  };
Packit Service fb6fa5
  static gint ntargets = sizeof(targetlist) / sizeof(targetlist[0]);
Packit Service fb6fa5
  
Packit Service fb6fa5
  gtk_init (&argc, &argv);
Packit Service fb6fa5
Packit Service fb6fa5
  init_atoms();
Packit Service fb6fa5
Packit Service fb6fa5
  selection_widget = gtk_invisible_new ();
Packit Service fb6fa5
Packit Service fb6fa5
  dialog = gtk_dialog_new ();
Packit Service fb6fa5
  gtk_widget_set_name (dialog, "Test Input");
Packit Service fb6fa5
  gtk_container_set_border_width (GTK_CONTAINER(dialog), 0);
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_connect (dialog, "destroy",
Packit Service fb6fa5
		    G_CALLBACK (quit), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  table = gtk_table_new (4, 2, FALSE);
Packit Service fb6fa5
  gtk_container_set_border_width (GTK_CONTAINER(table), 10);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_table_set_row_spacing (GTK_TABLE (table), 0, 5);
Packit Service fb6fa5
  gtk_table_set_row_spacing (GTK_TABLE (table), 1, 2);
Packit Service fb6fa5
  gtk_table_set_row_spacing (GTK_TABLE (table), 2, 2);
Packit Service fb6fa5
  gtk_table_set_col_spacing (GTK_TABLE (table), 0, 2);
Packit Service fb6fa5
  gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox), 
Packit Service fb6fa5
		      table, TRUE, TRUE, 0);
Packit Service fb6fa5
  gtk_widget_show (table);
Packit Service fb6fa5
  
Packit Service fb6fa5
  selection_button = gtk_toggle_button_new_with_label ("Claim Selection");
Packit Service fb6fa5
  gtk_table_attach (GTK_TABLE (table), selection_button, 0, 2, 0, 1,
Packit Service fb6fa5
		    GTK_EXPAND | GTK_FILL, 0, 0, 0);
Packit Service fb6fa5
  gtk_widget_show (selection_button);
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_connect (selection_button, "toggled",
Packit Service fb6fa5
		    G_CALLBACK (selection_toggled), NULL);
Packit Service fb6fa5
  g_signal_connect (selection_widget, "selection_clear_event",
Packit Service fb6fa5
		    G_CALLBACK (selection_clear), NULL);
Packit Service fb6fa5
  g_signal_connect (selection_widget, "selection_received",
Packit Service fb6fa5
		    G_CALLBACK (selection_received), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_selection_add_targets (selection_widget, GDK_SELECTION_PRIMARY,
Packit Service fb6fa5
			     targetlist, ntargets);
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_connect (selection_widget, "selection_get",
Packit Service fb6fa5
		    G_CALLBACK (selection_get), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  selection_text = gtk_text_new (NULL, NULL);
Packit Service fb6fa5
  gtk_table_attach_defaults (GTK_TABLE (table), selection_text, 0, 1, 1, 2);
Packit Service fb6fa5
  gtk_widget_show (selection_text);
Packit Service fb6fa5
  
Packit Service fb6fa5
  hscrollbar = gtk_hscrollbar_new (GTK_TEXT (selection_text)->hadj);
Packit Service fb6fa5
  gtk_table_attach (GTK_TABLE (table), hscrollbar, 0, 1, 2, 3,
Packit Service fb6fa5
		    GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
Packit Service fb6fa5
  gtk_widget_show (hscrollbar);
Packit Service fb6fa5
  
Packit Service fb6fa5
  vscrollbar = gtk_vscrollbar_new (GTK_TEXT (selection_text)->vadj);
Packit Service fb6fa5
  gtk_table_attach (GTK_TABLE (table), vscrollbar, 1, 2, 1, 2,
Packit Service fb6fa5
		    GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
Packit Service fb6fa5
  gtk_widget_show (vscrollbar);
Packit Service fb6fa5
Packit Service fb6fa5
  hbox = gtk_hbox_new (FALSE, 2);
Packit Service fb6fa5
  gtk_table_attach (GTK_TABLE (table), hbox, 0, 2, 3, 4,
Packit Service fb6fa5
		    GTK_EXPAND | GTK_FILL, 0, 0, 0);
Packit Service fb6fa5
  gtk_widget_show (hbox);
Packit Service fb6fa5
Packit Service fb6fa5
  label = gtk_label_new ("Target:");
Packit Service fb6fa5
  gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0);
Packit Service fb6fa5
  gtk_widget_show (label);
Packit Service fb6fa5
Packit Service fb6fa5
  entry = gtk_entry_new ();
Packit Service fb6fa5
  gtk_box_pack_start (GTK_BOX(hbox), entry, TRUE, TRUE, 0);
Packit Service fb6fa5
  gtk_widget_show (entry);
Packit Service fb6fa5
Packit Service fb6fa5
  /* .. And create some buttons */
Packit Service fb6fa5
  button = gtk_button_new_with_label ("Paste");
Packit Service fb6fa5
  gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->action_area), 
Packit Service fb6fa5
		      button, TRUE, TRUE, 0);
Packit Service fb6fa5
  g_signal_connect (button, "clicked",
Packit Service fb6fa5
		    G_CALLBACK (paste), entry);
Packit Service fb6fa5
  gtk_widget_show (button);
Packit Service fb6fa5
Packit Service fb6fa5
  button = gtk_button_new_with_label ("Quit");
Packit Service fb6fa5
  gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->action_area), 
Packit Service fb6fa5
		      button, TRUE, TRUE, 0);
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_connect_swapped (button, "clicked",
Packit Service fb6fa5
			    G_CALLBACK (gtk_widget_destroy), dialog);
Packit Service fb6fa5
  gtk_widget_show (button);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_widget_show (dialog);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_main ();
Packit Service fb6fa5
Packit Service fb6fa5
  return 0;
Packit Service fb6fa5
}