diff --git a/extension.js b/extension.js index b3c05fe..c0692d6 100644 --- a/extension.js +++ b/extension.js @@ -18,7 +18,7 @@ window.gsconnect = { imports.searchPath.unshift(gsconnect.extdatadir); const KeyBindings = imports.keybindings -let keyManager = new KeyBindings.Manager(); +let keyManager = null; var oldbindings = { unmaximize: [], maximize: [], @@ -285,30 +285,37 @@ function resetBinding(settings, key) { } var enable = function() { - let desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.wm.keybindings' }); - let mutterSettings = new Gio.Settings({ schema_id: 'org.gnome.mutter.keybindings' }); - oldbindings['unmaximize'] = desktopSettings.get_strv('unmaximize'); - oldbindings['maximize'] = desktopSettings.get_strv('maximize'); - oldbindings['toggle_tiled_left'] = mutterSettings.get_strv('toggle-tiled-left'); - oldbindings['toggle_tiled_right'] = mutterSettings.get_strv('toggle-tiled-right'); - changeBinding(desktopSettings, 'unmaximize', 'Down', 'Down'); - changeBinding(desktopSettings, 'maximize', 'Up', 'Up'); - changeBinding(mutterSettings, 'toggle-tiled-left', 'Left', 'Left'); - changeBinding(mutterSettings, 'toggle-tiled-right', 'Right', 'Right'); - Mainloop.timeout_add(3000, function() { - keyManager.add("left", function() { requestMove("left") }) - keyManager.add("right", function() { requestMove("right") }) - keyManager.add("up", function() { requestMove("up") }) - keyManager.add("down", function() { requestMove("down") }) - }); + if (!keyManager) { + keyManager = new KeyBindings.Manager(); + let desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.wm.keybindings' }); + let mutterSettings = new Gio.Settings({ schema_id: 'org.gnome.mutter.keybindings' }); + oldbindings['unmaximize'] = desktopSettings.get_strv('unmaximize'); + oldbindings['maximize'] = desktopSettings.get_strv('maximize'); + oldbindings['toggle_tiled_left'] = mutterSettings.get_strv('toggle-tiled-left'); + oldbindings['toggle_tiled_right'] = mutterSettings.get_strv('toggle-tiled-right'); + changeBinding(desktopSettings, 'unmaximize', 'Down', 'Down'); + changeBinding(desktopSettings, 'maximize', 'Up', 'Up'); + changeBinding(mutterSettings, 'toggle-tiled-left', 'Left', 'Left'); + changeBinding(mutterSettings, 'toggle-tiled-right', 'Right', 'Right'); + Mainloop.timeout_add(3000, function() { + keyManager.add("left", function() { requestMove("left") }) + keyManager.add("right", function() { requestMove("right") }) + keyManager.add("up", function() { requestMove("up") }) + keyManager.add("down", function() { requestMove("down") }) + }); + } } var disable = function() { - keyManager.removeAll(); - let desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.wm.keybindings' }); - let mutterSettings = new Gio.Settings({ schema_id: 'org.gnome.mutter.keybindings' }); - resetBinding(desktopSettings, 'unmaximize'); - resetBinding(desktopSettings, 'maximize'); - resetBinding(mutterSettings, 'toggle-tiled-left'); - resetBinding(mutterSettings, 'toggle-tiled-right'); + if (keyManager) { + keyManager.removeAll(); + keyManager.destroy(); + keyManager = null; + let desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.wm.keybindings' }); + let mutterSettings = new Gio.Settings({ schema_id: 'org.gnome.mutter.keybindings' }); + resetBinding(desktopSettings, 'unmaximize'); + resetBinding(desktopSettings, 'maximize'); + resetBinding(mutterSettings, 'toggle-tiled-left'); + resetBinding(mutterSettings, 'toggle-tiled-right'); + } } diff --git a/metadata.json b/metadata.json index 145d28e..9757a44 100644 --- a/metadata.json +++ b/metadata.json @@ -3,5 +3,6 @@ "description": "Window tiling based on Windows 10 hotkey patterns.", "uuid": "wintile@nowsci.com", "url": "https://github.com/fmstrat/wintile", - "shell-version": ["3.28"] + "shell-version": ["3.28"], + "version": 2 }