Blame tests/testentrycompletion.c

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