File: Keybinding.pm

package info (click to toggle)
dbishell 0.8.9-7
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 828 kB
  • ctags: 1,423
  • sloc: perl: 13,353; makefile: 138; sh: 15
file content (108 lines) | stat: -rw-r--r-- 2,091 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package Gtk::Keybinding;

use strict;
use integer;
use Exporter ();
use constant TRUE  => 1;
use constant FALSE => 0;

use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
use vars qw(@modifiers);
#define ShiftMask               (1<<0)
#define LockMask                (1<<1)
#define ControlMask             (1<<2)
#define Mod1Mask                (1<<3)
#define Mod2Mask                (1<<4)
#define Mod3Mask                (1<<5)
#define Mod4Mask                (1<<6)
#define Mod5Mask                (1<<7)

use constant MOD_SHIFT    => 1 << 0;
use constant MOD_LOCK     => 1 << 1;
use constant MOD_CTRL     => 1 << 2;
use constant MOD_1        => 1 << 3;
use constant MOD_2        => 1 << 4;
use constant MOD_3        => 1 << 5;
use constant MOD_4        => 1 << 6;
use constant MOD_5        => 1 << 7;

use constant MOD_CAPSLOCK => MOD_LOCK;
use constant MOD_ALT      => MOD_1;
use constant MOD_META     => MOD_1;
use constant MOD_NUMLOCK  => MOD_2;
use constant MOD_SCRLOCK  => MOD_5;
use constant MOD_ALTGR    => MOD_3;
use constant MOD_WM       => MOD_4;

@modifiers =
  qw(
     MOD_SHIFT
     MOD_LOCK
     MOD_CTRL
     MOD_1
     MOD_2
     MOD_3
     MOD_4
     MOD_5
     MOD_CAPSLOCK
     MOD_ALT
     MOD_META
     MOD_NUMLOCK
     MOD_SCRLOCK
     MOD_ALTGR
     MOD_WM
    );

@ISA         = qw(Exporter);
@EXPORT      = ();
@EXPORT_OK   = (@modifiers);
%EXPORT_TAGS = (
		modifiers => \@modifiers
	       );

$VERSION = 0.01_03;

sub make_map (@)
{
    my $callback;
  CALLBACK_CLOSURE:
    {
	my %map;

	foreach my $map_entry (@_)
	{
	    my $key  = $map_entry->{key} || ord( $map_entry->{str} );
	    my $mod  = $map_entry->{mod};
	    my $func = $map_entry->{func};

	    $map{$key} ||= {};
	    $map{$key}{$mod} = $func;
	}

	$callback =
	  sub
	  {
	      my $widget = $_[0];
	      my $event  = $_[1];

	      my $keynum = $event->{keyval};
	      my $modval = $event->{state};

	      $map{$keynum}
		&& $map{$keynum}{$modval}
		  && return $map{$keynum}{$modval}->($widget, $event);

	      return FALSE;
	  };
    };

    return $callback;
}


__END__