diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index ae3cdd35c..50a1cd7f4 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -1148,7 +1148,10 @@ var KeyboardManager = class KeyBoardManager { const mode = Shell.ActionMode.ALL & ~Shell.ActionMode.LOCK_SCREEN; const bottomDragAction = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM, mode); bottomDragAction.connect('activated', () => { - this.open(Main.layoutManager.bottomIndex); + this._keyboard.gestureActivate(Main.layoutManager.bottomIndex); + }); + bottomDragAction.connect('progress', (_action, progress) => { + this._keyboard.gestureProgress(progress); }); global.stage.add_action(bottomDragAction); this._bottomDragAction = bottomDragAction; @@ -1725,7 +1728,7 @@ var Keyboard = GObject.registerClass({ this._keyboardRestingId = 0; } - open() { + open(immediate = false) { this._clearShowIdle(); this._keyboardRequested = true; @@ -1734,6 +1737,11 @@ var Keyboard = GObject.registerClass({ return; } + if (immediate) { + this._open(); + return; + } + this._clearKeyboardRestTimer(); this._keyboardRestingId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, KEYBOARD_REST_TIME, @@ -1835,6 +1843,21 @@ var Keyboard = GObject.registerClass({ Main.layoutManager.keyboardBox.hide(); } + gestureProgress(delta) { + Main.layoutManager.keyboardBox.show(); + let progress = Math.min(delta, this.height) / this.height; + this.translation_y = -this.height * progress; + this.opacity = 255 * progress; + if (this._focusWindow) { + const windowActor = this._focusWindow.get_compositor_private(); + windowActor.translation_y = -this.height * progress; + } + } + + gestureActivate() { + this.open(true); + } + resetSuggestions() { if (this._suggestions) this._suggestions.clear();