Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-3.0-or-later
2 : : // SPDX-FileCopyrightText: Andy Holmes <andrew.g.r.holmes@gmail.com>
3 : :
4 : : #pragma once
5 : :
6 : : #include <gdk/gdk.h>
7 : :
8 : : G_BEGIN_DECLS
9 : :
10 : : /**
11 : : * valent_mousepad_keysym_is_modifier:
12 : : * @keysym: a keysym
13 : : *
14 : : * Check if @keysym is a known keyboard modifier (e.g. Shift).
15 : : *
16 : : * Returns: %TRUE, or %FALSE if not a modifier
17 : : */
18 : : static inline gboolean
19 : : valent_mousepad_keysym_is_modifier (uint32_t keysym)
20 : : {
21 : : switch (keysym)
22 : : {
23 : : /* Supported */
24 : : case GDK_KEY_Control_L:
25 : : case GDK_KEY_Control_R:
26 : : case GDK_KEY_Alt_L:
27 : : case GDK_KEY_Alt_R:
28 : : case GDK_KEY_Shift_L:
29 : : case GDK_KEY_Shift_R:
30 : : case GDK_KEY_Super_L:
31 : : case GDK_KEY_Super_R:
32 : :
33 : : /* Unsupported */
34 : : case GDK_KEY_Overlay1_Enable:
35 : : case GDK_KEY_Overlay2_Enable:
36 : : case GDK_KEY_Caps_Lock:
37 : : case GDK_KEY_Shift_Lock:
38 : : case GDK_KEY_Meta_L:
39 : : case GDK_KEY_Meta_R:
40 : : case GDK_KEY_Hyper_L:
41 : : case GDK_KEY_Hyper_R:
42 : : case GDK_KEY_Mode_switch:
43 : : case GDK_KEY_ISO_Level3_Shift:
44 : : case GDK_KEY_ISO_Level3_Latch:
45 : : case GDK_KEY_ISO_Level5_Shift:
46 : : case GDK_KEY_ISO_Level5_Latch:
47 : : return TRUE;
48 : : default:
49 : : return FALSE;
50 : : }
51 : : }
52 : :
53 : : /**
54 : : * valent_mousepad_keycode_to_keyval:
55 : : * @keycode: a special keycode
56 : : *
57 : : * Convert @keycode from a KDE Connect special key to a GDK keyval.
58 : : *
59 : : * Returns: a GDK keyval, or `0` if not found
60 : : */
61 : : static inline uint32_t
62 : 1 : valent_mousepad_keycode_to_keyval (uint32_t keycode)
63 : : {
64 : 1 : static const uint32_t keymap[] = {
65 : : 0, // 0 (Invalid)
66 : : GDK_KEY_BackSpace, // 1
67 : : GDK_KEY_Tab, // 2
68 : : GDK_KEY_Linefeed, // 3
69 : : GDK_KEY_Left, // 4
70 : : GDK_KEY_Up, // 5
71 : : GDK_KEY_Right, // 6
72 : : GDK_KEY_Down, // 7
73 : : GDK_KEY_Page_Up, // 8
74 : : GDK_KEY_Page_Down, // 9
75 : : GDK_KEY_Home, // 10
76 : : GDK_KEY_End, // 11
77 : : GDK_KEY_Return, // 12
78 : : GDK_KEY_Delete, // 13
79 : : GDK_KEY_Escape, // 14
80 : : GDK_KEY_Sys_Req, // 15
81 : : GDK_KEY_Scroll_Lock, // 16
82 : : 0, // 17 (Reserved)
83 : : 0, // 18 (Reserved)
84 : : 0, // 19 (Reserved)
85 : : 0, // 20 (Reserved)
86 : : GDK_KEY_F1, // 21
87 : : GDK_KEY_F2, // 22
88 : : GDK_KEY_F3, // 23
89 : : GDK_KEY_F4, // 24
90 : : GDK_KEY_F5, // 25
91 : : GDK_KEY_F6, // 26
92 : : GDK_KEY_F7, // 27
93 : : GDK_KEY_F8, // 28
94 : : GDK_KEY_F9, // 29
95 : : GDK_KEY_F10, // 30
96 : : GDK_KEY_F11, // 31
97 : : GDK_KEY_F12, // 32
98 : : };
99 : :
100 [ + - ]: 1 : if (keycode >= G_N_ELEMENTS (keymap))
101 : : return 0;
102 : :
103 [ - + ]: 1 : return keymap[keycode];
104 : : }
105 : :
106 : : /**
107 : : * valent_mousepad_keyval_to_keycode:
108 : : * @keyval: a key value
109 : : *
110 : : * Convert @keyval from a GDK keyval to a special key for KDE Connect.
111 : : *
112 : : * Returns: a special key code, or `0` if not found
113 : : */
114 : : static inline uint32_t
115 : 3 : valent_mousepad_keyval_to_keycode (uint32_t keyval)
116 : : {
117 [ - - - - : 3 : switch (keyval)
- - - - -
- - - - -
- - - - -
- - - - -
- - + +
- ]
118 : : {
119 : : case GDK_KEY_BackSpace:
120 : : return 1;
121 : :
122 : 0 : case GDK_KEY_Tab:
123 : : case GDK_KEY_KP_Tab:
124 : 0 : return 2;
125 : :
126 : 0 : case GDK_KEY_Linefeed:
127 : 0 : return 3;
128 : :
129 : 0 : case GDK_KEY_Left:
130 : : case GDK_KEY_KP_Left:
131 : 0 : return 4;
132 : :
133 : 0 : case GDK_KEY_Up:
134 : : case GDK_KEY_KP_Up:
135 : 0 : return 5;
136 : :
137 : 0 : case GDK_KEY_Right:
138 : : case GDK_KEY_KP_Right:
139 : 0 : return 6;
140 : :
141 : 0 : case GDK_KEY_Down:
142 : : case GDK_KEY_KP_Down:
143 : 0 : return 7;
144 : :
145 : 0 : case GDK_KEY_Page_Up:
146 : : case GDK_KEY_KP_Page_Up:
147 : 0 : return 8;
148 : :
149 : 0 : case GDK_KEY_Page_Down:
150 : : case GDK_KEY_KP_Page_Down:
151 : 0 : return 9;
152 : :
153 : 0 : case GDK_KEY_Home:
154 : : case GDK_KEY_KP_Home:
155 : 0 : return 10;
156 : :
157 : 0 : case GDK_KEY_End:
158 : : case GDK_KEY_KP_End:
159 : 0 : return 11;
160 : :
161 : 0 : case GDK_KEY_Return:
162 : : case GDK_KEY_KP_Enter:
163 : : case GDK_KEY_ISO_Enter:
164 : 0 : return 12;
165 : :
166 : 0 : case GDK_KEY_Delete:
167 : : case GDK_KEY_KP_Delete:
168 : 0 : return 13;
169 : :
170 : 0 : case GDK_KEY_Escape:
171 : 0 : return 14;
172 : :
173 : 0 : case GDK_KEY_Sys_Req:
174 : 0 : return 15;
175 : :
176 : 0 : case GDK_KEY_Scroll_Lock:
177 : 0 : return 16;
178 : :
179 : 0 : case GDK_KEY_F1:
180 : 0 : return 21;
181 : :
182 : 0 : case GDK_KEY_F2:
183 : 0 : return 22;
184 : :
185 : 0 : case GDK_KEY_F3:
186 : 0 : return 23;
187 : :
188 : 0 : case GDK_KEY_F4:
189 : 0 : return 24;
190 : :
191 : 0 : case GDK_KEY_F5:
192 : 0 : return 25;
193 : :
194 : 0 : case GDK_KEY_F6:
195 : 0 : return 26;
196 : :
197 : 0 : case GDK_KEY_F7:
198 : 0 : return 27;
199 : :
200 : 0 : case GDK_KEY_F8:
201 : 0 : return 28;
202 : :
203 : 0 : case GDK_KEY_F9:
204 : 0 : return 29;
205 : :
206 : 0 : case GDK_KEY_F10:
207 : 0 : return 30;
208 : :
209 : 0 : case GDK_KEY_F11:
210 : 0 : return 31;
211 : :
212 : 1 : case GDK_KEY_F12:
213 : 1 : return 32;
214 : :
215 : 2 : default:
216 : 2 : return 0;
217 : : }
218 : : }
219 : :
220 : : G_END_DECLS
221 : :
|