]> Pileus Git - ~andy/gtk/blobdiff - tests/testselection.c
stylecontext: Do invalidation on first resize container
[~andy/gtk] / tests / testselection.c
index 765f918f28592aa099bddc5378b478ed4de44ce4..eda61ef8c212710d7b1af7a6ccf461fd15be9b5b 100644 (file)
@@ -2,24 +2,31 @@
  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
  *
  * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2 of the License, or (at your option) any later version.
  *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
+ * Lesser 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
+/*
+ * Modified by the GTK+ Team and others 1997-2000.  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 "config.h"
 #include <stdio.h>
 #include <string.h>
-#include "gtk.h"
+#include "gtk/gtk.h"
 
 typedef enum {
   SEL_TYPE_NONE,
@@ -54,49 +61,50 @@ typedef struct _Target {
    in the ICCCM */
 
 static Target targets[] = {
-  { "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 },
+  { "ADOBE_PORTABLE_DOCUMENT_FORMAT",      STRING,        NULL, 8 },
+  { "APPLE_PICT",                          APPLE_PICT,    NULL, 8 },
+  { "BACKGROUND",                          PIXEL,         NULL, 32 },
+  { "BITMAP",                              BITMAP,        NULL, 32 },
+  { "CHARACTER_POSITION",                   SPAN,         NULL, 32 },
+  { "CLASS",                               TEXT,          NULL, 8 },
+  { "CLIENT_WINDOW",                       WINDOW,        NULL, 32 },
+  { "COLORMAP",                            COLORMAP,      NULL, 32 },
+  { "COLUMN_NUMBER",                       SPAN,          NULL, 32 },
+  { "COMPOUND_TEXT",                       COMPOUND_TEXT, NULL, 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 },
+  { "DRAWABLE",                            DRAWABLE,      NULL, 32 },
+  { "ENCAPSULATED_POSTSCRIPT",                     STRING,        NULL, 8 },
+  { "ENCAPSULATED_POSTSCRIPT_INTERCHANGE",  STRING,       NULL, 8 },
+  { "FILE_NAME",                           TEXT,          NULL, 8 },
+  { "FOREGROUND",                          PIXEL,         NULL, 32 },
+  { "HOST_NAME",                           TEXT,          NULL, 8 },
   /*  { "INSERT_PROPERTY", "NULL", 0, ? NULL }, */
   /*  { "INSERT_SELECTION", "NULL", 0, ? NULL }, */
-  { "LENGTH",                              INTEGER,       0, 32 },
-  { "LINE_NUMBER",                         SPAN,          0, 32 },
-  { "LIST_LENGTH",                         INTEGER,       0, 32 },
-  { "MODULE",                              TEXT,          0, 8 },
+  { "LENGTH",                              INTEGER,       NULL, 32 },
+  { "LINE_NUMBER",                         SPAN,          NULL, 32 },
+  { "LIST_LENGTH",                         INTEGER,       NULL, 32 },
+  { "MODULE",                              TEXT,          NULL, 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 },
+  { "NAME",                                TEXT,          NULL, 8 },
+  { "ODIF",                                TEXT,          NULL, 8 },
+  { "OWNER_OS",                            TEXT,          NULL, 8 },
+  { "PIXMAP",                              PIXMAP,        NULL, 32 },
+  { "POSTSCRIPT",                          STRING,        NULL, 8 },
+  { "PROCEDURE",                           TEXT,          NULL, 8 },
+  { "PROCESS",                             INTEGER,       NULL, 32 },
+  { "STRING",                              STRING,        NULL, 8 },
+  { "TARGETS",                                     ATOM,          NULL, 32 },
+  { "TASK",                                INTEGER,       NULL, 32 },
+  { "TEXT",                                TEXT,          NULL, 8  },
+  { "TIMESTAMP",                           INTEGER,       NULL, 32 },
+  { "USER",                                TEXT,          NULL, 8 },
 };
 
 static int num_targets = sizeof(targets)/sizeof(Target);
 
 static int have_selection = FALSE;
 
+GtkWidget *selection_widget;
 GtkWidget *selection_text;
 GtkWidget *selection_button;
 GString *selection_string = NULL;
@@ -130,19 +138,19 @@ init_atoms (void)
 void
 selection_toggled (GtkWidget *widget)
 {
-  if (GTK_TOGGLE_BUTTON(widget)->active)
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
     {
-      have_selection = gtk_selection_owner_set (widget,
+      have_selection = gtk_selection_owner_set (selection_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
     {
       if (have_selection)
        {
-         if (gdk_selection_owner_get (GDK_SELECTION_PRIMARY) == widget->window)
+          if (gdk_selection_owner_get (GDK_SELECTION_PRIMARY) == gtk_widget_get_window (widget))
            gtk_selection_owner_set (NULL, GDK_SELECTION_PRIMARY,
                                     GDK_CURRENT_TIME);
          have_selection = FALSE;
@@ -188,7 +196,7 @@ 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(selection_button), FALSE);
 
   return TRUE;
 }
@@ -255,23 +263,28 @@ stringify_span (guchar *data, gint *position)
 }
 
 void
-selection_received (GtkWidget *widget, GtkSelectionData *data)
+selection_received (GtkWidget *widget, GtkSelectionData *selection_data)
 {
   int position;
   int i;
   SelType seltype;
   char *str;
-  
-  if (data->length < 0)
+  guchar *data;
+  GtkTextBuffer *buffer;
+  GdkAtom type;
+
+  if (gtk_selection_data_get_length (selection_data) < 0)
     {
       g_print("Error retrieving selection\n");
       return;
     }
 
+  type = gtk_selection_data_get_data_type (selection_data);
+
   seltype = SEL_TYPE_NONE;
   for (i=0; i<LAST_SEL_TYPE; i++)
     {
-      if (seltypes[i] == data->type)
+      if (seltypes[i] == type)
        {
          seltype = i;
          break;
@@ -280,10 +293,9 @@ selection_received (GtkWidget *widget, GtkSelectionData *data)
 
   if (seltype == SEL_TYPE_NONE)
     {
-      char *name = gdk_atom_name (data->type);
-      g_print("Don't know how to handle type: %s (%ld)\n",
-             name?name:"<unknown>",
-             data->type);
+      char *name = gdk_atom_name (type);
+      g_print("Don't know how to handle type: %s\n",
+             name?name:"<unknown>");
       return;
     }
 
@@ -292,64 +304,57 @@ selection_received (GtkWidget *widget, GtkSelectionData *data)
 
   selection_string = g_string_new (NULL);
 
-  gtk_text_freeze (GTK_TEXT (selection_text));
-  gtk_text_set_point (GTK_TEXT (selection_text), 0);
-  gtk_text_forward_delete (GTK_TEXT (selection_text), 
-                          gtk_text_get_length (GTK_TEXT (selection_text)));
+  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (selection_text));
+  gtk_text_buffer_set_text (buffer, "", -1);
 
   position = 0;
-  while (position < data->length)
+  while (position < gtk_selection_data_get_length (selection_data))
     {
+      data = (guchar *) gtk_selection_data_get_data (selection_data);
       switch (seltype)
        {
        case ATOM:
-         str = stringify_atom (data->data, &position);
+         str = stringify_atom (data, &position);
          break;
        case COMPOUND_TEXT:
        case STRING:
        case TEXT:
-         str = stringify_text (data->data, &position);
+         str = stringify_text (data, &position);
          break;
        case BITMAP:
        case DRAWABLE:
        case PIXMAP:
        case WINDOW:
        case COLORMAP:
-         str = stringify_xid (data->data, &position);
+         str = stringify_xid (data, &position);
          break;
        case INTEGER:
        case PIXEL:
-         str = stringify_integer (data->data, &position);
+         str = stringify_integer (data, &position);
          break;
        case SPAN:
-         str = stringify_span (data->data, &position);
+         str = stringify_span (data, &position);
          break;
        default:
          {
-           char *name = gdk_atom_name (data->type);
-           g_print("Can't convert type %s (%ld) to string\n",
-                   name?name:"<unknown>",
-                   data->type);
-           position = data->length;
+           char *name = gdk_atom_name (gtk_selection_data_get_data_type (selection_data));
+           g_print("Can't convert type %s to string\n",
+                   name?name:"<unknown>");
+           position = gtk_selection_data_get_length (selection_data);
            continue;
          }
        }
-      gtk_text_insert (GTK_TEXT (selection_text), NULL, 
-                      &selection_text->style->black, 
-                      NULL, str, -1);
-      gtk_text_insert (GTK_TEXT (selection_text), NULL, 
-                      &selection_text->style->black, 
-                      NULL, "\n", -1);
+      gtk_text_buffer_insert_at_cursor (buffer, str, -1);
+      gtk_text_buffer_insert_at_cursor (buffer, "\n", -1);
       g_string_append (selection_string, str);
       g_free (str);
     }
-  gtk_text_thaw (GTK_TEXT (selection_text));
 }
 
 void
 paste (GtkWidget *widget, GtkWidget *entry)
 {
-  char *name;
+  const char *name;
   GdkAtom atom;
 
   name = gtk_entry_get_text (GTK_ENTRY(entry));
@@ -361,27 +366,27 @@ paste (GtkWidget *widget, GtkWidget *entry)
       return;
     }
 
-  gtk_selection_convert (selection_button, GDK_SELECTION_PRIMARY, atom, 
+  gtk_selection_convert (selection_widget, GDK_SELECTION_PRIMARY, atom, 
                         GDK_CURRENT_TIME);
 }
 
 void
 quit (void)
 {
-  gtk_exit (0);
+  gtk_main_quit ();
 }
 
 int
 main (int argc, char *argv[])
 {
+  GtkWidget *action_area, *content_area;
   GtkWidget *dialog;
   GtkWidget *button;
-  GtkWidget *table;
+  GtkWidget *vbox;
   GtkWidget *label;
   GtkWidget *entry;
-  GtkWidget *hscrollbar;
-  GtkWidget *vscrollbar;
   GtkWidget *hbox;
+  GtkWidget *scrolled;
 
   static GtkTargetEntry targetlist[] = {
     { "STRING",        0, STRING },
@@ -394,59 +399,49 @@ main (int argc, char *argv[])
 
   init_atoms();
 
+  selection_widget = gtk_invisible_new ();
+
   dialog = gtk_dialog_new ();
   gtk_widget_set_name (dialog, "Test Input");
   gtk_container_set_border_width (GTK_CONTAINER(dialog), 0);
 
-  gtk_signal_connect (GTK_OBJECT (dialog), "destroy",
-                     GTK_SIGNAL_FUNC (quit), NULL);
+  g_signal_connect (dialog, "destroy",
+                   G_CALLBACK (quit), NULL);
+
+  content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+  action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog));
 
-  table = gtk_table_new (4, 2, FALSE);
-  gtk_container_set_border_width (GTK_CONTAINER(table), 10);
+  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
+  gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
 
-  gtk_table_set_row_spacing (GTK_TABLE (table), 0, 5);
-  gtk_table_set_row_spacing (GTK_TABLE (table), 1, 2);
-  gtk_table_set_row_spacing (GTK_TABLE (table), 2, 2);
-  gtk_table_set_col_spacing (GTK_TABLE (table), 0, 2);
-  gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox), 
-                     table, TRUE, TRUE, 0);
-  gtk_widget_show (table);
+  gtk_box_pack_start (GTK_BOX (content_area), vbox, TRUE, TRUE, 0);
+  gtk_widget_show (vbox);
   
   selection_button = gtk_toggle_button_new_with_label ("Claim Selection");
-  gtk_table_attach (GTK_TABLE (table), selection_button, 0, 2, 0, 1,
-                   GTK_EXPAND | GTK_FILL, 0, 0, 0);
+  gtk_container_add (GTK_CONTAINER (vbox), selection_button);
   gtk_widget_show (selection_button);
 
-  gtk_signal_connect (GTK_OBJECT(selection_button), "toggled",
-                     GTK_SIGNAL_FUNC (selection_toggled), NULL);
-  gtk_signal_connect (GTK_OBJECT(selection_button), "selection_clear_event",
-                     GTK_SIGNAL_FUNC (selection_clear), NULL);
-  gtk_signal_connect (GTK_OBJECT(selection_button), "selection_received",
-                     GTK_SIGNAL_FUNC (selection_received), NULL);
+  g_signal_connect (selection_button, "toggled",
+                   G_CALLBACK (selection_toggled), NULL);
+  g_signal_connect (selection_widget, "selection_clear_event",
+                   G_CALLBACK (selection_clear), NULL);
+  g_signal_connect (selection_widget, "selection_received",
+                   G_CALLBACK (selection_received), NULL);
 
-  gtk_selection_add_targets (selection_button, GDK_SELECTION_PRIMARY,
+  gtk_selection_add_targets (selection_widget, GDK_SELECTION_PRIMARY,
                             targetlist, ntargets);
 
-  gtk_signal_connect (GTK_OBJECT(selection_button), "selection_get",
-                     GTK_SIGNAL_FUNC (selection_get), NULL);
+  g_signal_connect (selection_widget, "selection_get",
+                   G_CALLBACK (selection_get), NULL);
 
-  selection_text = gtk_text_new (NULL, NULL);
-  gtk_table_attach_defaults (GTK_TABLE (table), selection_text, 0, 1, 1, 2);
+  selection_text = gtk_text_view_new ();
+  scrolled = gtk_scrolled_window_new (NULL, NULL);
+  gtk_container_add (GTK_CONTAINER (scrolled), selection_text);
+  gtk_container_add (GTK_CONTAINER (vbox), scrolled);
   gtk_widget_show (selection_text);
-  
-  hscrollbar = gtk_hscrollbar_new (GTK_TEXT (selection_text)->hadj);
-  gtk_table_attach (GTK_TABLE (table), hscrollbar, 0, 1, 2, 3,
-                   GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-  gtk_widget_show (hscrollbar);
-  
-  vscrollbar = gtk_vscrollbar_new (GTK_TEXT (selection_text)->vadj);
-  gtk_table_attach (GTK_TABLE (table), vscrollbar, 1, 2, 1, 2,
-                   GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  gtk_widget_show (vscrollbar);
-
-  hbox = gtk_hbox_new (FALSE, 2);
-  gtk_table_attach (GTK_TABLE (table), hbox, 0, 2, 3, 4,
-                   GTK_EXPAND | GTK_FILL, 0, 0, 0);
+
+  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
   gtk_widget_show (hbox);
 
   label = gtk_label_new ("Target:");
@@ -459,19 +454,16 @@ main (int argc, char *argv[])
 
   /* .. And create some buttons */
   button = gtk_button_new_with_label ("Paste");
-  gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->action_area), 
-                     button, TRUE, TRUE, 0);
-  gtk_signal_connect (GTK_OBJECT (button), "clicked",
-                     GTK_SIGNAL_FUNC (paste), entry);
+  gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
+  g_signal_connect (button, "clicked",
+                   G_CALLBACK (paste), entry);
   gtk_widget_show (button);
 
   button = gtk_button_new_with_label ("Quit");
-  gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->action_area), 
-                     button, TRUE, TRUE, 0);
+  gtk_box_pack_start (GTK_BOX (action_area), button, TRUE, TRUE, 0);
 
-  gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
-                            GTK_SIGNAL_FUNC (gtk_widget_destroy), 
-                            GTK_OBJECT (dialog));
+  g_signal_connect_swapped (button, "clicked",
+                           G_CALLBACK (gtk_widget_destroy), dialog);
   gtk_widget_show (button);
 
   gtk_widget_show (dialog);