(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 sys
import os import os
import psutil
import pwd
try: try:
ORIGCWD = os.getcwd() ORIGCWD = os.getcwd()
except OSError: except OSError:
@ -53,6 +55,10 @@ if __name__ == '__main__':
# Workaround for IBus intefering with broadcast when using dead keys # Workaround for IBus intefering with broadcast when using dead keys
# Environment also needs IBUS_DISABLE_SNOOPER=1, or double chars appear # Environment also needs IBUS_DISABLE_SNOOPER=1, or double chars appear
# in the receivers. # in the receivers.
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' os.environ['IBUS_DISABLE_SNOOPER']='1'
dbus_service = None dbus_service = None
@ -107,6 +113,7 @@ if __name__ == '__main__':
TERMINATOR.set_origcwd(ORIGCWD) TERMINATOR.set_origcwd(ORIGCWD)
TERMINATOR.set_dbus_data(dbus_service) TERMINATOR.set_dbus_data(dbus_service)
TERMINATOR.reconfigure() TERMINATOR.reconfigure()
TERMINATOR.ibus_running = ibus_running
try: try:
dbg('Creating a terminal with layout: %s' % OPTIONS.layout) dbg('Creating a terminal with layout: %s' % OPTIONS.layout)

View File

@ -867,9 +867,10 @@ class Terminal(Gtk.VBox):
dbg('Terminal::on_keypress: Called on %s with no event' % widget) dbg('Terminal::on_keypress: Called on %s with no event' % widget)
return(False) 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 # Environment also needs IBUS_DISABLE_SNOOPER=1, or double chars appear
# in the receivers. # in the receivers.
if self.terminator.ibus_running:
if (event.state | Gdk.ModifierType.MODIFIER_MASK ) ^ Gdk.ModifierType.MODIFIER_MASK != 0: 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) dbg('Terminal::on_keypress: Ingore processed event with event.state %d' % event.state)
return(False) return(False)

View File

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