Blame tests/testentrycompletion.c

Packit Service fb6fa5
/* testentrycompletion.c
Packit Service fb6fa5
 * Copyright (C) 2004  Red Hat, Inc.
Packit Service fb6fa5
 * Author: Matthias Clasen
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 Library 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
 * Library General Public License for more details.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * You should have received a copy of the GNU Library 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
#include "config.h"
Packit Service fb6fa5
#include <stdlib.h>
Packit Service fb6fa5
#include <string.h>
Packit Service fb6fa5
#include <gtk/gtk.h>
Packit Service fb6fa5
Packit Service fb6fa5
#include "prop-editor.h"
Packit Service fb6fa5
Packit Service fb6fa5
/* Don't copy this bad example; inline RGB data is always a better
Packit Service fb6fa5
 * idea than inline XPMs.
Packit Service fb6fa5
 */
Packit Service fb6fa5
static char  *book_closed_xpm[] = {
Packit Service fb6fa5
"16 16 6 1",
Packit Service fb6fa5
"       c None s None",
Packit Service fb6fa5
".      c black",
Packit Service fb6fa5
"X      c red",
Packit Service fb6fa5
"o      c yellow",
Packit Service fb6fa5
"O      c #808080",
Packit Service fb6fa5
"#      c white",
Packit Service fb6fa5
"                ",
Packit Service fb6fa5
"       ..       ",
Packit Service fb6fa5
"     ..XX.      ",
Packit Service fb6fa5
"   ..XXXXX.     ",
Packit Service fb6fa5
" ..XXXXXXXX.    ",
Packit Service fb6fa5
".ooXXXXXXXXX.   ",
Packit Service fb6fa5
"..ooXXXXXXXXX.  ",
Packit Service fb6fa5
".X.ooXXXXXXXXX. ",
Packit Service fb6fa5
".XX.ooXXXXXX..  ",
Packit Service fb6fa5
" .XX.ooXXX..#O  ",
Packit Service fb6fa5
"  .XX.oo..##OO. ",
Packit Service fb6fa5
"   .XX..##OO..  ",
Packit Service fb6fa5
"    .X.#OO..    ",
Packit Service fb6fa5
"     ..O..      ",
Packit Service fb6fa5
"      ..        ",
Packit Service fb6fa5
"                "
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
static GtkWidget *window = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
/* Creates a tree model containing the completions */
Packit Service fb6fa5
GtkTreeModel *
Packit Service fb6fa5
create_simple_completion_model (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkListStore *store;
Packit Service fb6fa5
  GtkTreeIter iter;
Packit Service fb6fa5
  
Packit Service fb6fa5
  store = gtk_list_store_new (1, G_TYPE_STRING);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "GNOME", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "gnominious", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "Gnomonic projection", -1);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "total", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "totally", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "toto", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "tottery", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "totterer", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "Totten trust", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "totipotent", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "totipotency", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "totemism", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "totem pole", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "Totara", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "totalizer", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "totalizator", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "totalitarianism", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "total parenteral nutrition", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "total hysterectomy", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "total eclipse", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "Totipresence", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "Totipalmi", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "zombie", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "a\303\246x", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "a\303\246y", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, "a\303\246z", -1);
Packit Service fb6fa5
 
Packit Service fb6fa5
  return GTK_TREE_MODEL (store);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/* Creates a tree model containing the completions */
Packit Service fb6fa5
GtkTreeModel *
Packit Service fb6fa5
create_completion_model (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkListStore *store;
Packit Service fb6fa5
  GtkTreeIter iter;
Packit Service fb6fa5
  GdkPixbuf *pixbuf;
Packit Service fb6fa5
Packit Service fb6fa5
  pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)book_closed_xpm);
Packit Service fb6fa5
Packit Service fb6fa5
  store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, pixbuf, 1, "ambient", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, pixbuf, 1, "ambidextrously", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, pixbuf, 1, "ambidexter", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, pixbuf, 1, "ambiguity", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, pixbuf, 1, "American Party", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, pixbuf, 1, "American mountain ash", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, pixbuf, 1, "amelioration", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, pixbuf, 1, "Amelia Earhart", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, pixbuf, 1, "Totten trust", -1);
Packit Service fb6fa5
  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
  gtk_list_store_set (store, &iter, 0, pixbuf, 1, "Laminated arch", -1);
Packit Service fb6fa5
 
Packit Service fb6fa5
  return GTK_TREE_MODEL (store);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gboolean
Packit Service fb6fa5
match_func (GtkEntryCompletion *completion,
Packit Service fb6fa5
	    const gchar        *key,
Packit Service fb6fa5
	    GtkTreeIter        *iter,
Packit Service fb6fa5
	    gpointer            user_data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  gchar *item = NULL;
Packit Service fb6fa5
  GtkTreeModel *model;
Packit Service fb6fa5
Packit Service fb6fa5
  gboolean ret = FALSE;
Packit Service fb6fa5
Packit Service fb6fa5
  model = gtk_entry_completion_get_model (completion);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_tree_model_get (model, iter, 1, &item, -1);
Packit Service fb6fa5
Packit Service fb6fa5
  if (item != NULL)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_print ("compare %s %s\n", key, item);
Packit Service fb6fa5
      if (strncmp (key, item, strlen (key)) == 0)
Packit Service fb6fa5
	ret = TRUE;
Packit Service fb6fa5
Packit Service fb6fa5
      g_free (item);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  return ret;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
activated_cb (GtkEntryCompletion *completion, 
Packit Service fb6fa5
	      gint                index,
Packit Service fb6fa5
	      gpointer            user_data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_print ("action activated: %d\n", index);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gint timer_count = 0;
Packit Service fb6fa5
Packit Service fb6fa5
static gchar *dynamic_completions[] = {
Packit Service fb6fa5
  "GNOME",
Packit Service fb6fa5
  "gnominious",
Packit Service fb6fa5
  "Gnomonic projection",
Packit Service fb6fa5
  "total",
Packit Service fb6fa5
  "totally",
Packit Service fb6fa5
  "toto",
Packit Service fb6fa5
  "tottery",
Packit Service fb6fa5
  "totterer",
Packit Service fb6fa5
  "Totten trust",
Packit Service fb6fa5
  "totipotent",
Packit Service fb6fa5
  "totipotency",
Packit Service fb6fa5
  "totemism",
Packit Service fb6fa5
  "totem pole",
Packit Service fb6fa5
  "Totara",
Packit Service fb6fa5
  "totalizer",
Packit Service fb6fa5
  "totalizator",
Packit Service fb6fa5
  "totalitarianism",
Packit Service fb6fa5
  "total parenteral nutrition",
Packit Service fb6fa5
  "total hysterectomy",
Packit Service fb6fa5
  "total eclipse",
Packit Service fb6fa5
  "Totipresence",
Packit Service fb6fa5
  "Totipalmi",
Packit Service fb6fa5
  "zombie"
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
static gint
Packit Service fb6fa5
animation_timer (GtkEntryCompletion *completion)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkTreeIter iter;
Packit Service fb6fa5
  gint n_completions = G_N_ELEMENTS (dynamic_completions);
Packit Service fb6fa5
  gint n;
Packit Service fb6fa5
  static GtkListStore *old_store = NULL;
Packit Service fb6fa5
  GtkListStore *store = GTK_LIST_STORE (gtk_entry_completion_get_model (completion));
Packit Service fb6fa5
Packit Service fb6fa5
  if (timer_count % 10 == 0)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      if (!old_store)
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  g_print ("removing model!\n");
Packit Service fb6fa5
Packit Service fb6fa5
	  old_store = g_object_ref (gtk_entry_completion_get_model (completion));
Packit Service fb6fa5
	  gtk_entry_completion_set_model (completion, NULL);
Packit Service fb6fa5
	}
Packit Service fb6fa5
      else
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  g_print ("readding model!\n");
Packit Service fb6fa5
	  
Packit Service fb6fa5
	  gtk_entry_completion_set_model (completion, GTK_TREE_MODEL (old_store));
Packit Service fb6fa5
	  g_object_unref (old_store);
Packit Service fb6fa5
	  old_store = NULL;
Packit Service fb6fa5
	}
Packit Service fb6fa5
Packit Service fb6fa5
      timer_count ++;
Packit Service fb6fa5
      return TRUE;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (!old_store)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      if ((timer_count / n_completions) % 2 == 0)
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  n = timer_count % n_completions;
Packit Service fb6fa5
	  gtk_list_store_append (store, &iter);
Packit Service fb6fa5
	  gtk_list_store_set (store, &iter, 0, dynamic_completions[n], -1);
Packit Service fb6fa5
	  
Packit Service fb6fa5
	}
Packit Service fb6fa5
      else
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter))
Packit Service fb6fa5
	    gtk_list_store_remove (store, &iter);
Packit Service fb6fa5
	}
Packit Service fb6fa5
    }
Packit Service fb6fa5
  
Packit Service fb6fa5
  timer_count++;
Packit Service fb6fa5
  return TRUE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
gboolean 
Packit Service fb6fa5
match_selected_cb (GtkEntryCompletion *completion,
Packit Service fb6fa5
		   GtkTreeModel       *model,
Packit Service fb6fa5
		   GtkTreeIter        *iter)
Packit Service fb6fa5
{
Packit Service fb6fa5
  gchar *str;
Packit Service fb6fa5
  GtkWidget *entry;
Packit Service fb6fa5
Packit Service fb6fa5
  entry = gtk_entry_completion_get_entry (completion);
Packit Service fb6fa5
  gtk_tree_model_get (GTK_TREE_MODEL (model), iter, 1, &str, -1);
Packit Service fb6fa5
  gtk_entry_set_text (GTK_ENTRY (entry), str);
Packit Service fb6fa5
  gtk_editable_set_position (GTK_EDITABLE (entry), -1);
Packit Service fb6fa5
  g_free (str);
Packit Service fb6fa5
Packit Service fb6fa5
  return TRUE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
new_prop_editor (GObject *object)
Packit Service fb6fa5
{
Packit Service fb6fa5
	gtk_widget_show (create_prop_editor (object, G_OBJECT_TYPE (object)));
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
add_with_prop_edit_button (GtkWidget *vbox, GtkWidget *entry, GtkEntryCompletion *completion)
Packit Service fb6fa5
{
Packit Service fb6fa5
	GtkWidget *hbox, *button;
Packit Service fb6fa5
Packit Service fb6fa5
	hbox = gtk_hbox_new (FALSE, 12);
Packit Service fb6fa5
	gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
Packit Service fb6fa5
Packit Service fb6fa5
	gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
Packit Service fb6fa5
Packit Service fb6fa5
	button = gtk_button_new_with_label ("Properties");
Packit Service fb6fa5
	g_signal_connect_swapped (button, "clicked", G_CALLBACK (new_prop_editor), completion);
Packit Service fb6fa5
	gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 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 *vbox;
Packit Service fb6fa5
  GtkWidget *label;
Packit Service fb6fa5
  GtkWidget *entry;
Packit Service fb6fa5
  GtkEntryCompletion *completion;
Packit Service fb6fa5
  GtkTreeModel *completion_model;
Packit Service fb6fa5
  GtkCellRenderer *cell;
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_init (&argc, &argv);
Packit Service fb6fa5
Packit Service fb6fa5
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
Packit Service fb6fa5
  gtk_container_set_border_width (GTK_CONTAINER (window), 5);
Packit Service fb6fa5
  g_signal_connect (window, "delete_event", gtk_main_quit, NULL);
Packit Service fb6fa5
  
Packit Service fb6fa5
  vbox = gtk_vbox_new (FALSE, 2);
Packit Service fb6fa5
  gtk_container_add (GTK_CONTAINER (window), vbox);
Packit Service fb6fa5
    
Packit Service fb6fa5
  gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
Packit Service fb6fa5
  
Packit Service fb6fa5
  label = gtk_label_new (NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_label_set_markup (GTK_LABEL (label), "Completion demo, try writing total or gnome for example.");
Packit Service fb6fa5
  gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Create our first entry */
Packit Service fb6fa5
  entry = gtk_entry_new ();
Packit Service fb6fa5
  
Packit Service fb6fa5
  /* Create the completion object */
Packit Service fb6fa5
  completion = gtk_entry_completion_new ();
Packit Service fb6fa5
  gtk_entry_completion_set_inline_completion (completion, TRUE);
Packit Service fb6fa5
  
Packit Service fb6fa5
  /* Assign the completion to the entry */
Packit Service fb6fa5
  gtk_entry_set_completion (GTK_ENTRY (entry), completion);
Packit Service fb6fa5
  g_object_unref (completion);
Packit Service fb6fa5
  
Packit Service fb6fa5
  add_with_prop_edit_button (vbox, entry, completion);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Create a tree model and use it as the completion model */
Packit Service fb6fa5
  completion_model = create_simple_completion_model ();
Packit Service fb6fa5
  gtk_entry_completion_set_model (completion, completion_model);
Packit Service fb6fa5
  g_object_unref (completion_model);
Packit Service fb6fa5
  
Packit Service fb6fa5
  /* Use model column 0 as the text column */
Packit Service fb6fa5
  gtk_entry_completion_set_text_column (completion, 0);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Create our second entry */
Packit Service fb6fa5
  entry = gtk_entry_new ();
Packit Service fb6fa5
Packit Service fb6fa5
  /* Create the completion object */
Packit Service fb6fa5
  completion = gtk_entry_completion_new ();
Packit Service fb6fa5
  
Packit Service fb6fa5
  /* Assign the completion to the entry */
Packit Service fb6fa5
  gtk_entry_set_completion (GTK_ENTRY (entry), completion);
Packit Service fb6fa5
  g_object_unref (completion);
Packit Service fb6fa5
  
Packit Service fb6fa5
  add_with_prop_edit_button (vbox, entry, completion);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Create a tree model and use it as the completion model */
Packit Service fb6fa5
  completion_model = create_completion_model ();
Packit Service fb6fa5
  gtk_entry_completion_set_model (completion, completion_model);
Packit Service fb6fa5
  gtk_entry_completion_set_minimum_key_length (completion, 2);
Packit Service fb6fa5
  g_object_unref (completion_model);
Packit Service fb6fa5
  
Packit Service fb6fa5
  /* Use model column 1 as the text column */
Packit Service fb6fa5
  cell = gtk_cell_renderer_pixbuf_new ();
Packit Service fb6fa5
  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (completion), cell, FALSE);
Packit Service fb6fa5
  gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (completion), cell, 
Packit Service fb6fa5
				  "pixbuf", 0, NULL); 
Packit Service fb6fa5
Packit Service fb6fa5
  cell = gtk_cell_renderer_text_new ();
Packit Service fb6fa5
  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (completion), cell, FALSE);
Packit Service fb6fa5
  gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (completion), cell, 
Packit Service fb6fa5
				  "text", 1, NULL); 
Packit Service fb6fa5
  
Packit Service fb6fa5
  gtk_entry_completion_set_match_func (completion, match_func, NULL, NULL);
Packit Service fb6fa5
  g_signal_connect (completion, "match-selected", 
Packit Service fb6fa5
		    G_CALLBACK (match_selected_cb), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_entry_completion_insert_action_text (completion, 100, "action!");
Packit Service fb6fa5
  gtk_entry_completion_insert_action_text (completion, 101, "'nother action!");
Packit Service fb6fa5
  g_signal_connect (completion, "action_activated", G_CALLBACK (activated_cb), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Create our third entry */
Packit Service fb6fa5
  entry = gtk_entry_new ();
Packit Service fb6fa5
Packit Service fb6fa5
  /* Create the completion object */
Packit Service fb6fa5
  completion = gtk_entry_completion_new ();
Packit Service fb6fa5
  
Packit Service fb6fa5
  /* Assign the completion to the entry */
Packit Service fb6fa5
  gtk_entry_set_completion (GTK_ENTRY (entry), completion);
Packit Service fb6fa5
  g_object_unref (completion);
Packit Service fb6fa5
  
Packit Service fb6fa5
  add_with_prop_edit_button (vbox, entry, completion);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Create a tree model and use it as the completion model */
Packit Service fb6fa5
  completion_model = GTK_TREE_MODEL (gtk_list_store_new (1, G_TYPE_STRING));
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_entry_completion_set_model (completion, completion_model);
Packit Service fb6fa5
  g_object_unref (completion_model);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Use model column 0 as the text column */
Packit Service fb6fa5
  gtk_entry_completion_set_text_column (completion, 0);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Fill the completion dynamically */
Packit Service fb6fa5
  gdk_threads_add_timeout (1000, (GSourceFunc) animation_timer, completion);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Fourth entry */
Packit Service fb6fa5
  gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Model-less entry completion"), FALSE, FALSE, 0);
Packit Service fb6fa5
Packit Service fb6fa5
  entry = gtk_entry_new ();
Packit Service fb6fa5
Packit Service fb6fa5
  /* Create the completion object */
Packit Service fb6fa5
  completion = gtk_entry_completion_new ();
Packit Service fb6fa5
  
Packit Service fb6fa5
  /* Assign the completion to the entry */
Packit Service fb6fa5
  gtk_entry_set_completion (GTK_ENTRY (entry), completion);
Packit Service fb6fa5
  g_object_unref (completion);
Packit Service fb6fa5
  
Packit Service fb6fa5
  add_with_prop_edit_button (vbox, entry, completion);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_widget_show_all (window);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_main ();
Packit Service fb6fa5
  
Packit Service fb6fa5
  return 0;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5