From 85c05186439c31192840b755465079e4bfcae6c2 Mon Sep 17 00:00:00 2001 From: Stephen Boddy Date: Sat, 28 Nov 2015 17:25:47 +0100 Subject: [PATCH] Fixes startup on Wayland because Keybinder seems to be X11 only --- terminatorlib/util.py | 7 +++++++ terminatorlib/window.py | 37 ++++++++++++++++++++----------------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/terminatorlib/util.py b/terminatorlib/util.py index 81450e68..aa5e5772 100755 --- a/terminatorlib/util.py +++ b/terminatorlib/util.py @@ -337,3 +337,10 @@ def spawn_new_terminator(cwd, args): dbg("Spawning: %s" % cmd) subprocess.Popen([cmd]+args) + +def display_manager(): + """Try to detect which display manager we run under""" + if os.environ.get('WAYLAND_DISPLAY'): + return 'WAYLAND' + # Fallback assumption of X11 + return 'X11' diff --git a/terminatorlib/window.py b/terminatorlib/window.py index 7cefb4f8..540541b8 100755 --- a/terminatorlib/window.py +++ b/terminatorlib/window.py @@ -9,9 +9,8 @@ import uuid import gi from gi.repository import GObject from gi.repository import Gtk, Gdk -from gi.repository import Keybinder -from util import dbg, err, make_uuid +from util import dbg, err, make_uuid, display_manager import util from translation import _ from version import APP_NAME @@ -19,10 +18,13 @@ from container import Container from factory import Factory from terminator import Terminator -try: - from gi.repository import Keybinder -except ImportError: - err('Warning: python-keybinder is not installed. This means the \ +if display_manager() == 'X11': + try: + gi.require_version('Keybinder', '3.0') + from gi.repository import Keybinder + Keybinder.init() + except ImportError: + err('Warning: python-keybinder is not installed. This means the \ hide_window shortcut will be unavailable') # pylint: disable-msg=R0904 @@ -120,18 +122,19 @@ class Window(Container, Gtk.Window): # Attempt to grab a global hotkey for hiding the window. # If we fail, we'll never hide the window, iconifying instead. if self.config['keybindings']['hide_window'] != None: - try: - self.hidebound = Keybinder.bind( - self.config['keybindings']['hide_window'], - self.on_hide_window) - except (KeyError, NameError): - pass + if display_manager() == 'X11': + try: + self.hidebound = Keybinder.bind( + self.config['keybindings']['hide_window'], + self.on_hide_window) + except (KeyError, NameError): + pass - if not self.hidebound: - err('Unable to bind hide_window key, another instance/window has it.') - self.hidefunc = self.iconify - else: - self.hidefunc = self.hide + if not self.hidebound: + err('Unable to bind hide_window key, another instance/window has it.') + self.hidefunc = self.iconify + else: + self.hidefunc = self.hide def apply_config(self): """Apply various configuration options"""