Skip to content

Commit

Permalink
#2301 show the current keyboard layout on start and every time it cha…
Browse files Browse the repository at this point in the history
…nges

git-svn-id: https://xpra.org/svn/Xpra/trunk@25236 3bb7dfac-3a0b-4e04-842a-767bc560f471
  • Loading branch information
totaam committed Feb 15, 2020
1 parent 7543183 commit ea78c30
Showing 1 changed file with 38 additions and 0 deletions.
38 changes: 38 additions & 0 deletions src/xpra/gtk_common/gtk_view_keyboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
from collections import deque
from gi.repository import GLib, Pango, Gtk, Gdk

from xpra.util import csv
from xpra.os_util import POSIX, OSX, bytestostr
from xpra.platform.paths import get_icon


Expand Down Expand Up @@ -47,6 +49,11 @@ def __init__(self):
self.key_events = deque(maxlen=35)
self.window.connect("key-press-event", self.key_press)
self.window.connect("key-release-event", self.key_release)
display = Gdk.Display.get_default()
keymap = Gdk.Keymap.get_for_display(display)
self.keymap_change_timer = 0
keymap.connect("keys-changed", self.keymap_changed)
self.show_keymap("current keymap")

icon = get_icon("keyboard.png")
if icon:
Expand Down Expand Up @@ -88,6 +95,31 @@ def mask_to_names(self, mask, names_dict):
names.append(name)
return names

def keymap_changed(self, *args):
print("keymap_changed%s" % (args,))
if not self.keymap_change_timer:
self.keymap_change_timer = GLib.timeout_add(500, self.show_keymap)

def show_keymap(self, msg="keymap changed:"):
self.keymap_change_timer = 0
from xpra.platform.keyboard import Keyboard
keyboard = Keyboard() #pylint: disable=not-callable
layout, layouts, variant, variants, options = keyboard.get_layout_spec()
self.add_event_text(msg)
for k,v in {
"layout" : layout,
"variant" : variant,
"layouts" : layouts,
"variants" : variants,
"options" : options,
}.items():
if v:
if isinstance(v, (list, tuple)):
v = csv(bytestostr(x) for x in v)
self.add_event_text("%16s: %s" % (k, bytestostr(v)))
print("do_keymap_changed: %s" % (msg,))
print("do_keymap_changed: %s" % ((layout, layouts, variant, variants, options),))

def key_press(self, _, event):
self.add_key_event("down", event)

Expand All @@ -106,6 +138,9 @@ def add_key_event(self, etype, event):
if l>0:
s = s.ljust(l)
text += s
self.add_event_text(text)

def add_event_text(self, text):
self.key_events.append(text)
self.keys.set_text("\n".join(self.key_events))

Expand All @@ -118,6 +153,9 @@ def main():
from xpra.log import enable_color
with program_context("Keyboard-Test", "Keyboard Test Tool"):
enable_color()
if POSIX and not OSX:
from xpra.x11.gtk_x11.gdk_display_source import init_gdk_display_source
init_gdk_display_source()
KeyboardStateInfoWindow()
Gtk.main()
return 0
Expand Down

0 comments on commit ea78c30

Please sign in to comment.