On Tue, 25 Nov 2008 12:47:43 +0100
"Emmanuel Rodriguez" <[EMAIL PROTECTED]> wrote:

>Hi,
>
>I'm have Gtk2::Entry where users are expected to enter an XPath
>expression. I would like to let the user know when an expression isn't
>valid. I thought of using Pango markup but it seems very hard to do
>with a Gtk2::Entry.
>
>For the moment I can use a callback to 'changed' and set the markup this way:
>$widget->get_layout->set_markup("<span underline='error'
>underline_color='red'>$xpath</span>");
>
>The problem is that it doesn't work too well. The markup is not always
>shown. When I edit the widget for the first time the error is not
>displayed only after I start erasing at least one character while
>keeping the XPath expression invalid.
>
>I tried using a Gtk2::TextView but I didn't find out how to give the
>text view the exact height of one line (just as a Gtk2::Entry).
>
>Is there another way of achieving this?
>
>-- 
>Emmanuel Rodriguez

This is just a buggy prototype of what you might do.
Manually take control of the Entry and analyze it key-by-key,
probably with a regex for good xpath syntax,
and set the appropriate markup and entry text.

#!/usr/bin/perl -w
use strict;
use Gtk2::Gdk::Keysyms;
use Glib qw/TRUE FALSE/;
use Gtk2 -init;

my $window = Gtk2::Window->new;
$window->signal_connect (delete_event => sub { Gtk2->main_quit });
my $vbox = new Gtk2::VBox( FALSE, 0 );
my $entry = Gtk2::Entry->new();

$vbox->pack_start( $entry, FALSE, FALSE, FALSE );
$vbox->set_focus_child ($entry); # works
$window->add ($vbox);

my $string = '';

$entry->signal_connect ('key-press-event' => sub {
         my ($widget,$event)= @_;
        
         my $key =  chr( $event->keyval );
         # do your checking and markup here
         
        $string = $string.$key;

        $entry->set_text($string);
        
        #calculate string length and set cursor position
        #$entry->set_position(1);

        #False let the event propagate, so entry will still work
        #but we want manual control
        #return FALSE;
        return TRUE;
   });

$window->show_all;

Gtk2->main;

__END__


zentara

-- 
I'm not really a human, but I play one on earth.
http://zentara.net/Remember_How_Lucky_You_Are.html 
_______________________________________________
gtk-perl-list mailing list
gtk-perl-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-perl-list

Reply via email to