Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1# This file is part of Xpra. 

2# Copyright (C) 2008, 2009 Nathaniel Smith <njs@pobox.com> 

3# Copyright (C) 2012-2019 Antoine Martin <antoine@xpra.org> 

4# Xpra is released under the terms of the GNU GPL v2, or, at your option, any 

5# later version. See the file COPYING for details. 

6 

7from gi.repository import Gdk 

8 

9from xpra.x11.bindings.keyboard_bindings import X11KeyboardBindings #@UnresolvedImport 

10from xpra.keyboard.mask import DEFAULT_MODIFIER_MEANINGS 

11 

12X11Keyboard = X11KeyboardBindings() 

13 

14 

15def grok_modifier_map(display, meanings): 

16 """Return an dict mapping modifier names to corresponding X modifier 

17 bitmasks.""" 

18 #TODO: needs fixing for GTK3 

19 from xpra.keyboard.mask import MODIFIER_MAP 

20 modifier_map = MODIFIER_MAP.copy() 

21 modifier_map.update({ 

22 "scroll": 0, 

23 "num": 0, 

24 "meta": 0, 

25 "super": 0, 

26 "hyper": 0, 

27 "alt": 0, 

28 }) 

29 if not meanings: 

30 meanings = DEFAULT_MODIFIER_MEANINGS 

31 

32 (max_keypermod, keycodes) = X11Keyboard.get_modifier_map() 

33 assert len(keycodes) == 8 * max_keypermod 

34 keymap = Gdk.Keymap.get_for_display(display) 

35 for i in range(8): 

36 for j in range(max_keypermod): 

37 keycode = keycodes[i * max_keypermod + j] 

38 if keycode: 

39 entries = keymap.get_entries_for_keycode(keycode) 

40 if entries is None: # pragma: no cover 

41 # This keycode has no entry in the keymap: 

42 continue 

43 found, _, keyvals = entries 

44 if not found: # pragma: no cover 

45 continue 

46 for keyval in keyvals: 

47 keyval_name = Gdk.keyval_name(keyval) 

48 modifier = meanings.get(keyval_name) 

49 if modifier: 

50 modifier_map[modifier] |= (1 << i) 

51 return modifier_map