=== modified file 'terminator' --- terminator 2015-08-13 20:16:24 +0000 +++ terminator 2015-09-15 12:06:57 +0000 @@ -20,6 +20,8 @@ import sys import os +import psutil +import pwd try: ORIGCWD = os.getcwd() except OSError: @@ -57,7 +59,10 @@ # 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] + if ibus_running: + os.environ['IBUS_DISABLE_SNOOPER']='1' dbus_service = None @@ -69,7 +74,6 @@ # 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 +116,7 @@ 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) === modified file 'terminatorlib/terminal.py' --- terminatorlib/terminal.py 2015-08-20 22:05:48 +0000 +++ terminatorlib/terminal.py 2015-09-15 16:30:41 +0000 @@ -341,6 +341,7 @@ self.scrollbar.connect('button-press-event', self.on_buttonpress) self.vte.connect('key-press-event', self.on_keypress) + self.vte.connect('key-release-event', self.on_keyrelease) self.vte.connect('button-press-event', self.on_buttonpress) self.vte.connect('scroll-event', self.on_mousewheel) self.vte.connect('popup-menu', self.popup_menu) @@ -838,19 +839,42 @@ dbg('on_group_button_press: unknown group button interaction') return(False) + def _dump_keyevent(self, widget, event): + dbg('Terminal::widget %s received key event %s ' % (widget, event)) + dbg('Terminal:: event: type: %s' % event.type) + dbg('Terminal:: event: hardware_keycode: %s' % event.hardware_keycode) + dbg('Terminal:: event: keyval: %s' % event.keyval) + dbg('Terminal:: event: state: %s' % event.state) + dbg('Terminal:: event: state.real: %s' % event.state.real) + #print (event.state | gtk.gdk.MODIFIER_MASK ) + #print (event.state | gtk.gdk.MODIFIER_MASK ) ^ gtk.gdk.MODIFIER_MASK + + def on_keyrelease(self, widget, event): + """Handler for keyboard events""" + if not event: + dbg('Terminal::on_keyrelease: Called on %s with no event' % widget) + return(False) + + self._dump_keyevent(widget, event) + + return(False) + def on_keypress(self, widget, event): """Handler for keyboard events""" if not event: dbg('Terminal::on_keypress: Called on %s with no event' % widget) return(False) - # Workaround for IBus intefering with broadcast when using dead keys + self._dump_keyevent(widget, event) + + # 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) === modified file 'terminatorlib/terminator.py' --- terminatorlib/terminator.py 2015-07-14 21:09:05 +0000 +++ terminatorlib/terminator.py 2015-09-15 12:07:08 +0000 @@ -32,6 +32,7 @@ pid_cwd = None gnome_client = None debug_address = None + ibus_running = None doing_layout = None layoutname = None