1 /* Copyright 2011 Martin Koegler <mkoegler@auto.tuwien.ac.at>
2  * Copyright 2011 Pierre Ossman <ossman@cendio.se> for Cendio AB
3  *
4  * This is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This software is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this software; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
17  * USA.
18  */
19 
20 #include <string.h>
21 #include <FL/Fl.H>
22 
23 // FLTK can pull in the X11 headers on some systems
24 #ifndef XK_VoidSymbol
25 #define XK_MISCELLANY
26 #include <rfb/keysymdef.h>
27 #endif
28 
29 #include "menukey.h"
30 #include "parameters.h"
31 
32 static const MenuKeySymbol menuSymbols[] = {
33   {"F1",          FL_F + 1,       0x3b, XK_F1},
34   {"F2",          FL_F + 2,       0x3c, XK_F2},
35   {"F3",          FL_F + 3,       0x3d, XK_F3},
36   {"F4",          FL_F + 4,       0x3e, XK_F4},
37   {"F5",          FL_F + 5,       0x3f, XK_F5},
38   {"F6",          FL_F + 6,       0x40, XK_F6},
39   {"F7",          FL_F + 7,       0x41, XK_F7},
40   {"F8",          FL_F + 8,       0x42, XK_F8},
41   {"F9",          FL_F + 9,       0x43, XK_F9},
42   {"F10",         FL_F + 10,      0x44, XK_F10},
43   {"F11",         FL_F + 11,      0x57, XK_F11},
44   {"F12",         FL_F + 12,      0x58, XK_F12},
45   {"Pause",       FL_Pause,       0xc6, XK_Pause},
46   {"Scroll_Lock", FL_Scroll_Lock, 0x46, XK_Scroll_Lock},
47   {"Escape",      FL_Escape,      0x01, XK_Escape},
48   {"Insert",      FL_Insert,      0xd2, XK_Insert},
49   {"Delete",      FL_Delete,      0xd3, XK_Delete},
50   {"Home",        FL_Home,        0xc7, XK_Home},
51   {"Page_Up",     FL_Page_Up,     0xc9, XK_Page_Up},
52   {"Page_Down",   FL_Page_Down,   0xd1, XK_Page_Down},
53 };
54 
getMenuKeySymbolCount()55 int getMenuKeySymbolCount()
56 {
57   return sizeof(menuSymbols)/sizeof(menuSymbols[0]);
58 }
59 
getMenuKeySymbols()60 const MenuKeySymbol* getMenuKeySymbols()
61 {
62   return menuSymbols;
63 }
64 
getMenuKey(int * fltkcode,int * keycode,rdr::U32 * keysym)65 void getMenuKey(int *fltkcode, int *keycode, rdr::U32 *keysym)
66 {
67   const char *menuKeyStr;
68 
69   menuKeyStr = menuKey;
70   for(int i = 0; i < getMenuKeySymbolCount(); i++) {
71     if (!strcmp(menuSymbols[i].name, menuKeyStr)) {
72       *fltkcode = menuSymbols[i].fltkcode;
73       *keycode = menuSymbols[i].keycode;
74       *keysym = menuSymbols[i].keysym;
75       return;
76     }
77   }
78 
79   *fltkcode = 0;
80   *keycode = 0;
81   *keysym = 0;
82 }
83