From 4953117023db81489d06d48e7751c4a6c97ea422 Mon Sep 17 00:00:00 2001 From: Stephen Boddy Date: Wed, 16 Sep 2015 00:05:30 +0200 Subject: [PATCH] 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) --- ChangeLog | 8 ++++++++ debian/control | 2 +- terminator | 10 ++++++++-- terminatorlib/terminal.py | 11 ++++++----- terminatorlib/terminator.py | 1 + 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index be15f682..4f2fd193 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +terminator trunk: + * Features + * Enhancements + * Bug fixes + * Fix for those not running IBus, where the IBus workaround caused + broken keys in other keymaps set with non-IBus tools (Steve + Boddy, LP#1494606) + terminator 0.98: * Features * Layout launcher with option or shortcut (Steve Boddy) diff --git a/debian/control b/debian/control index acf1d843..f22104b9 100644 --- a/debian/control +++ b/debian/control @@ -14,7 +14,7 @@ Homepage: http://www.tenshu.net/terminator/ Package: terminator Architecture: all -Depends: ${python:Depends}, ${misc:Depends}, python-vte, python-gobject, python-gtk2 (>= 2.14.0), gconf2, libgtk2.0-bin, hicolor-icon-theme +Depends: ${python:Depends}, ${misc:Depends}, python-vte, python-gobject, python-gtk2 (>= 2.14.0), python-psutil, gconf2, libgtk2.0-bin, hicolor-icon-theme XB-Python-Version: ${python:Versions} Provides: x-terminal-emulator Recommends: xdg-utils, python-gnome2, python-keybinder diff --git a/terminator b/terminator index ef9e7727..38973f60 100755 --- a/terminator +++ b/terminator @@ -20,6 +20,8 @@ import sys import os +import psutil +import pwd try: ORIGCWD = os.getcwd() except OSError: @@ -57,7 +59,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 @@ -69,7 +75,6 @@ if __name__ == '__main__': # launch gui, return selection LAYOUTLAUNCHER=LayoutLauncher() else: - # Attempt to import our dbus server. If one exists already we will just # connect to that and ask for a new window. If not, we will create one and # continue. Failure to import dbus, or the global config option "dbus" @@ -112,6 +117,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) diff --git a/terminatorlib/terminal.py b/terminatorlib/terminal.py index 203c1bea..ed035fcd 100755 --- a/terminatorlib/terminal.py +++ b/terminatorlib/terminal.py @@ -844,13 +844,14 @@ 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 | gtk.gdk.MODIFIER_MASK ) ^ gtk.gdk.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 | gtk.gdk.MODIFIER_MASK ) ^ gtk.gdk.MODIFIER_MASK != 0: + dbg('Terminal::on_keypress: Ignore 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) diff --git a/terminatorlib/terminator.py b/terminatorlib/terminator.py index 1fe17993..5508d406 100755 --- a/terminatorlib/terminator.py +++ b/terminatorlib/terminator.py @@ -32,6 +32,7 @@ class Terminator(Borg): pid_cwd = None gnome_client = None debug_address = None + ibus_running = None doing_layout = None layoutname = None