(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:
parent
042dbfb454
commit
9f09d9c334
|
@ -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,7 +55,11 @@ 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.
|
||||||
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
|
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)
|
||||||
|
|
|
@ -867,12 +867,13 @@ 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 (event.state | Gdk.ModifierType.MODIFIER_MASK ) ^ Gdk.ModifierType.MODIFIER_MASK != 0:
|
if self.terminator.ibus_running:
|
||||||
dbg('Terminal::on_keypress: Ingore processed event with event.state %d' % event.state)
|
if (event.state | Gdk.ModifierType.MODIFIER_MASK ) ^ Gdk.ModifierType.MODIFIER_MASK != 0:
|
||||||
return(False)
|
dbg('Terminal::on_keypress: Ingore processed event with event.state %d' % event.state)
|
||||||
|
return(False)
|
||||||
|
|
||||||
# FIXME: Does keybindings really want to live in Terminator()?
|
# FIXME: Does keybindings really want to live in Terminator()?
|
||||||
mapping = self.terminator.keybindings.lookup(event)
|
mapping = self.terminator.keybindings.lookup(event)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue