(trunk-1647) Fix for those not running IBus, where the IBus workaround caused broken keys in other keymaps set with non-IBus tools

(New dependancy added (python-psutil) for detecting the IBus process)
This commit is contained in:
Stephen Boddy 2015-11-30 21:54:23 +01:00
parent 042dbfb454
commit 9f09d9c334
3 changed files with 14 additions and 5 deletions

View File

@ -20,6 +20,8 @@
import sys
import os
import psutil
import pwd
try:
ORIGCWD = os.getcwd()
except OSError:
@ -53,7 +55,11 @@ if __name__ == '__main__':
# Workaround for IBus intefering with broadcast when using dead keys
# Environment also needs IBUS_DISABLE_SNOOPER=1, or double chars appear
# in the receivers.
os.environ['IBUS_DISABLE_SNOOPER']='1'
username = pwd.getpwuid(os.getuid()).pw_name
ibus_running = [p for p in psutil.process_iter() if p.name == 'ibus-daemon' and p.username == username]
ibus_running = len(ibus_running) > 0
if ibus_running:
os.environ['IBUS_DISABLE_SNOOPER']='1'
dbus_service = None
@ -107,6 +113,7 @@ if __name__ == '__main__':
TERMINATOR.set_origcwd(ORIGCWD)
TERMINATOR.set_dbus_data(dbus_service)
TERMINATOR.reconfigure()
TERMINATOR.ibus_running = ibus_running
try:
dbg('Creating a terminal with layout: %s' % OPTIONS.layout)

View File

@ -867,12 +867,13 @@ class Terminal(Gtk.VBox):
dbg('Terminal::on_keypress: Called on %s with no event' % widget)
return(False)
# Workaround for IBus intefering with broadcast when using dead keys
# Workaround for IBus interfering with broadcast when using dead keys
# Environment also needs IBUS_DISABLE_SNOOPER=1, or double chars appear
# in the receivers.
if (event.state | Gdk.ModifierType.MODIFIER_MASK ) ^ Gdk.ModifierType.MODIFIER_MASK != 0:
dbg('Terminal::on_keypress: Ingore processed event with event.state %d' % event.state)
return(False)
if self.terminator.ibus_running:
if (event.state | Gdk.ModifierType.MODIFIER_MASK ) ^ Gdk.ModifierType.MODIFIER_MASK != 0:
dbg('Terminal::on_keypress: Ingore processed event with event.state %d' % event.state)
return(False)
# FIXME: Does keybindings really want to live in Terminator()?
mapping = self.terminator.keybindings.lookup(event)

View File

@ -48,6 +48,7 @@ class Terminator(Borg):
pid_cwd = None
gnome_client = None
debug_address = None
ibus_running = None
doing_layout = None
layoutname = None