ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/keyboard.h
Revision: 1.1
Committed: Sun Jan 16 15:59:45 2005 UTC (19 years, 4 months ago) by root
Content type: text/plain
Branch: MAIN
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #ifndef KEYBOARD_H_
2     #define KEYBOARD_H_
3    
4     #include "feature.h"
5     #include "rxvtutil.h"
6    
7     #ifdef KEYSYM_RESOURCE
8    
9     #define KEYSYM_HASH_BITS 9 /* lowest #bits of keysym is used as hash key */
10     #define KEYSYM_HASH_BUDGETS (1<<KEYSYM_HASH_BITS)
11     #define KEYSYM_HASH_MASK (KEYSYM_HASH_BUDGETS-1)
12    
13     #define MetaMask 0x0100
14     #define NumLockMask 0x0200
15     #define AllModMask (ShiftMask | LockMask | ControlMask \
16     | Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask)
17    
18     #if (AllModMask & (MetaMask | NumLockMask)) != 0
19     #error redefine MetaMask or NumLockMask!
20     #endif
21    
22     struct rxvt_term;
23     struct keysym_t;
24     typedef void (keyevent_handler) (rxvt_term *rt,
25     keysym_t *key,
26     KeySym keysym,
27     unsigned int state);
28     typedef unsigned short u16;
29    
30     struct keysym_t
31     {
32     KeySym keysym;
33     /* only the lower 8 bits of state are used for matching according to X.h */
34     /* the higher bits are preserved for Meta/NumLock keys */
35     /* which are mapped to corresponding lower bits at register time */
36     u16 state; /* indicates each modifiers' DOWN/UP status */
37     u16 range; /* =1: single keysym; >1: a of range keysyms */
38     keyevent_handler *handler; /* event handler */
39     const char *str; /* would normally be a keycode translation */
40     };
41    
42    
43     class keyboard_manager
44     {
45     public:
46     keyboard_manager (rxvt_term *rt);
47     ~keyboard_manager ();
48    
49     void clear ();
50     void register_user_translation (KeySym keysym, unsigned int state, const char *trans);
51     void register_done (); // call this to make newly registered keymaps take effect
52     bool dispatch (KeySym keysym, unsigned int state);
53    
54     private:
55     void register_keymap (keysym_t *key);
56     void purge_duplicate_keymap ();
57     void setup_hash ();
58     int find_keysym (KeySym keysym, unsigned int state);
59    
60     private:
61     rxvt_term * const term_;
62    
63     u16 hash_[KEYSYM_HASH_BUDGETS]; //
64     vector<keysym_t *> keymap_;
65    
66     // stock keymaps are all static data
67     static keysym_t stock_keymap_[];
68     // user keymaps and their .string are dynamicly allocated and freed
69     vector<keysym_t *> user_keymap_;
70     vector<const char *> user_translations_;
71     };
72    
73     #endif /* KEYSYM_RESOURCE */
74     #endif /* KEYBOARD_H_ */
75     // vim:et:ts=2:sw=2