On Oct 7, 2006, at 1:46 PM, Michael Hartmann wrote:

> Hi everybody,
>
> I'm using this code to run code when someone presses enter in a  
> entry widget:
>
>       $entry->signal_connect("key_press_event" => sub {
>         use Gtk2::Gdk::Keysyms;
>         my $key = {reverse %Gtk2::Gdk::Keysyms}->{$_[1]->keyval};
>         if($key =~ m/^(KP_Enter)|(Return)$/) {
>           $button->clicked;
>         }
>       } );

In general, the -event signals want a boolean return value, saying  
whether to continue event propagation.  You're not explicitly  
returning anything, so the behavior may be unexpected.


> In the documentation I've found activates_default:
> ’activates-default’ (boolean : readable / writable / private)
>            Whether to activate the default widget (such as the  
> default button
>            in a dialog) when Enter is pressed
>
> However, I don't understand how to use it. How can I define the  
> button that is
> activated?

The "default" button is usually marked by a dark ring.  Use  
Gtk2::Widget::can_default to allow a widget to take the default.   
Gtk2::Widget::has_default tells you whether the widget is the  
default, and Gtk2::Widget::grab_default makes a widget the default  
widget for a window.

#!/usr/bin/perl -w
use strict;
use Gtk2 -init;
use Glib qw(TRUE);
my $window = Gtk2::Window->new;
my $vbox = Gtk2::VBox->new;
my $entry = Gtk2::Entry->new;
my $button = Gtk2::Button->new ("clicky");

$window->add ($vbox);
$vbox->add ($entry);
$vbox->add ($button);

# Make $button the default widget in this window.
$button->can_default (TRUE);
$button->grab_default;

# Make typing "Enter" in $entry activate $button.
$entry->set (activates_default => TRUE);

# And, so you can tell the button was clicked...
$button->signal_connect (clicked => sub { print "You clicked me!\n" });

$window->signal_connect (destroy => sub {Gtk2->main_quit});
$window->show_all;
Gtk2->main;
__END__


> I know there is more than one way to do it, but in this partitcular  
> case: Is
> there a more elegant way to do it?

"Activates default" is how you want to do it.  That's what it's  
designed for.


> Another problem: I have two windows and one window is modal. How  
> can I prevent
> that the window that is not modal gets the focus. At the moment all  
> widgets
> are not sensitive, but the window can still get the focus.

Do you mean that it is in front, or that the keyboard focus is on  
it?  $window->present may be what you want.

--
Brian: If i recall correctly, this is the physics department.
Chris: That explains all that gravity.
     -- Family Guy, "The Story on Page One"

_______________________________________________
gtk-perl-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-perl-list

Reply via email to