[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: GtkBindingSet etc
- From: Kevin Ryde <user42 zip com au>
- To: gtk-perl-list gnome org
- Subject: Re: GtkBindingSet etc
- Date: Fri, 09 Jan 2009 11:37:28 +1100
I wrote:
>
> gtk_bindings_activate() and gtk_bindings_activate_event()
Indeed those two go fine, per below.
But it seems they refuse to operate on plain GtkObjects, only widgets,
because of wanting to spin keys through the per-display keymap thingie.
So I might want gtk_bindings_set_activate() too, which would mean
wrapping GtkBindingSet, however opaquely.
Index: GtkObject.xs
===================================================================
--- GtkObject.xs (revision 2104)
+++ GtkObject.xs (working copy)
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003-2005 by the gtk2-perl team (see the file AUTHORS)
+ * Copyright (c) 2003-2005, 2009 by the gtk2-perl team (see the file AUTHORS)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -171,3 +171,31 @@
OUTPUT:
RETVAL
+
+MODULE = Gtk2::Object PACKAGE = Gtk2::Object PREFIX = gtk_
+
+=for apidoc
+Although C<activate> and C<activate_event> are C<Gtk2::Object>
+methods, as of Gtk 2.12 they will only actually invoke signals on a
+C<Gtk2::Widget>. On a C<Gtk2::Object> the return is always false (no
+binding activated).
+=cut
+gboolean
+gtk_bindings_activate (object, keyval, modifiers)
+ GtkObject *object
+ guint keyval
+ GdkModifierType modifiers
+
+gboolean
+gtk_bindings_activate_event (object, event)
+ GtkObject *object
+ GdkEvent *event
+PREINIT:
+ GdkEventType type;
+CODE:
+ type = event->type;
+ if (type != GDK_KEY_PRESS && type != GDK_KEY_RELEASE)
+ croak ("Event must be key-press or key-release");
+ RETVAL = gtk_bindings_activate_event (object, (GdkEventKey*) event);
+OUTPUT:
+ RETVAL
use strict;
use warnings;
use Gtk2 '-init';
Gtk2::Rc->parse_string (<<HERE);
binding "my_keys" {
bind "<ctrl>x" { "move-cursor" (logical-positions, -1, 0) }
}
class "GtkEntry" binding "my_keys"
HERE
my $toplevel = Gtk2::Window->new('toplevel');
$toplevel->signal_connect (destroy => sub { Gtk2->main_quit; });
my $vbox = Gtk2::VBox->new;
$toplevel->add ($vbox);
my $entry = Gtk2::Entry->new;
# $entry->signal_connect
# (key_press_event => sub {
# my ($entry, $event) = @_;
# print $event->hardware_keycode, " ", $event->group, "\n";
# return 0;
# });
$vbox->pack_start ($entry, 0,0,0);
my $keyval_left = Gtk2::Gdk->keyval_from_name('Left');
{
my $button = Gtk2::Button->new_with_label ("keyval left");
$button->signal_connect
(clicked => sub {
Glib::Timeout->add
(3000, sub {
print __FILE__,": keyval left\n";
$entry->bindings_activate ($keyval_left, []);
return 0;
});
});
$vbox->pack_start ($button, 0,0,0);
}
{
my $button = Gtk2::Button->new_with_label ("event left");
$button->signal_connect
(clicked => sub {
my $event = Gtk2::Gdk::Event->new ('key-press');
$event->window ($entry->window);
$event->hardware_keycode (100); # left
$event->group (0);
$event->keyval ($keyval_left);
$event->set_state ([]);
Glib::Timeout->add
(3000, sub {
print __FILE__,": event left\n";
$entry->bindings_activate_event ($event);
return 0;
});
});
$vbox->pack_start ($button, 0,0,0);
}
$toplevel->show_all;
Gtk2->main;
exit 0;
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]