diff --git a/data/key-mapper.glade b/data/key-mapper.glade
index af2f777f..71cb9885 100644
--- a/data/key-mapper.glade
+++ b/data/key-mapper.glade
@@ -257,7 +257,7 @@
mouse
-
-
+
True
False
- 10
- 10
- 10
- 10
- 6
- 6
- vertical
- 2
+
+
+ True
+ False
+ 10
+ 10
+ 10
+ 10
+ 6
+ 6
+ vertical
+ 2
+
+
+ True
+ True
+ 0
+
+
+
+
+ True
+ False
+
+
+ False
+ True
+ 1
+
+
+
+
+ True
+ False
+ 10
+ 10
+ 4
+
+
+ False
+ True
+ 2
+
+
False
@@ -663,4 +705,90 @@ Control_R
+
+ False
+ Key Mapper
+ True
+ center
+ mouse
+ dialog
+ True
+
+
+ True
+ False
+ vertical
+
+
+ True
+ False
+ center
+ end
+
+
+
+
+
+
+
+
+ False
+ True
+ end
+ 0
+
+
+
+
+ True
+ False
+
+
+ True
+ False
+ 0
+ 12
+ 12
+ mouse
+ 6
+
+
+ False
+ False
+ 0
+
+
+
+
+ True
+ False
+ 10
+ 10
+ 10
+ 10
+ 6
+ Loading...
+ True
+ 0
+ 0.5
+
+
+ True
+ True
+ 1
+
+
+
+
+ True
+ True
+ 2
+
+
+
+
+
+
+
+
diff --git a/keymapper/gtk/loading.py b/keymapper/gtk/loading.py
new file mode 100644
index 00000000..aad62d1b
--- /dev/null
+++ b/keymapper/gtk/loading.py
@@ -0,0 +1,45 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+# key-mapper - GUI for device specific keyboard mappings
+# Copyright (C) 2020 sezanzeb
+#
+# This file is part of key-mapper.
+#
+# key-mapper is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# key-mapper is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with key-mapper. If not, see .
+
+
+"""Error dialog."""
+
+
+import gi
+gi.require_version('Gtk', '3.0')
+gi.require_version('GLib', '2.0')
+from gi.repository import Gtk
+
+from keymapper.data import get_data_path
+
+
+class LoadingDialog:
+ """Displays 'Loading...' until Key Mapper is loaded."""
+ def __init__(self):
+ """Open a dialog that says 'Loading...'."""
+ gladefile = get_data_path('key-mapper.glade')
+ builder = Gtk.Builder()
+ builder.add_from_file(gladefile)
+ dialog = builder.get_object('loading')
+ dialog.show()
+ self.dialog = dialog
+
+ def close(self):
+ self.dialog.destroy()
diff --git a/keymapper/gtk/window.py b/keymapper/gtk/window.py
index b9b2c6a0..3b404707 100755
--- a/keymapper/gtk/window.py
+++ b/keymapper/gtk/window.py
@@ -35,6 +35,7 @@ from keymapper.presets import get_presets, find_newest_preset, \
from keymapper.logger import logger
from keymapper.linux import get_devices
from keymapper.gtk.row import Row
+from keymapper.gtk.loading import LoadingDialog
from keymapper.gtk.unsaved import unsaved_changes_dialog, GO_BACK
@@ -100,14 +101,23 @@ class Window:
window = self.get('window')
window.show()
+ window.set_sensitive(False)
+ self.get('wrapper').set_opacity(0)
+ loading = LoadingDialog()
self.window = window
+ gtk_iteration()
+
self.populate_devices()
self.select_newest_preset()
self.timeout = GLib.timeout_add(100, self.check_add_row)
+ window.set_sensitive(True)
+ self.get('wrapper').set_opacity(1)
+ loading.close()
+
def get(self, name):
"""Get a widget from the window"""
return self.builder.get_object(name)
diff --git a/keymapper/presets.py b/keymapper/presets.py
index 15ca36db..47b2daed 100644
--- a/keymapper/presets.py
+++ b/keymapper/presets.py
@@ -75,6 +75,7 @@ def find_newest_preset(device=None):
device : string
If set, will return the newest preset for the device or None
"""
+ print('find_newest_preset')
# sort the oldest files to the front in order to use pop to get the newest
if device is None:
paths = sorted(