#!/usr/bin/perl -w # # Entry Completion # # GtkEntryCompletion provides a mechanism for adding support for # completion in GtkEntry. # # package entry_completion; use strict; use Glib qw(TRUE FALSE); use Gtk2; my $window = undef; # Creates a tree model containing the completions sub create_completion_model { my $store = Gtk2::ListStore->new (Glib::String::); # Append one word $store->set ($store->append, 0, "GNOME"); # Append another word $store->set ($store->append, 0, "total"); # And another word $store->set ($store->append, 0, "totally"); return $store; } sub do { my $do_widget = shift; if (!$window) { $window = Gtk2::Dialog->new ("GtkEntryCompletion", $do_widget, [], "gtk-close" => 'none'); $window->set_resizable (FALSE); $window->signal_connect (response => sub {$window->destroy}); $window->signal_connect (destroy => sub {$window = undef}); my $vbox = Gtk2::VBox->new (FALSE, 5); $window->vbox->pack_start ($vbox, TRUE, TRUE, 0); $vbox->set_border_width (5); my $label = Gtk2::Label->new; $label->set_markup ("Completion demo, try writing <b>total</b> or <b>gnome</b> for example."); $vbox->pack_start ($label, FALSE, FALSE, 0); # Create our entry my $entry = Gtk2::Entry->new; $vbox->pack_start ($entry, FALSE, FALSE, 0); # Create the completion object my $completion = Gtk2::EntryCompletion->new; # Assign the completion to the entry $entry->set_completion ($completion); # Create a tree model and use it as the completion model $completion->set_model (create_completion_model ()); # Use model column 0 as the text column $completion->set_text_column (0); } if (!$window->visible) { $window->show_all; } else { $window->destroy; } return $window; } 1;