From d76c2190263b80c4fd9697e3008282a3710c0f19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 4 Jul 2020 02:36:10 +0200 Subject: [PATCH] keyboard: Request a bigger size in portrait orientation In portrait orientation, we set the height to the preferred height for the monitor width (or, if smaller, a third o the screen height). However as the forWidth currently doesn't make a difference, the height is effectively controlled by the natural height of the keys - which is rather small. Address this by making AspectContainer request an appropriate preferred size based on the fixed ratio. https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2349 --- js/ui/keyboard.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index a3a30c023..58e857f19 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -61,6 +61,24 @@ class AspectContainer extends St.Widget { this.queue_relayout(); } + vfunc_get_preferred_width(forHeight) { + let [min, nat] = super.vfunc_get_preferred_width(forHeight); + + if (forHeight > 0) + nat = forHeight * this._ratio; + + return [min, nat]; + } + + vfunc_get_preferred_height(forWidth) { + let [min, nat] = super.vfunc_get_preferred_height(forWidth); + + if (forWidth > 0) + nat = forWidth / this._ratio; + + return [min, nat]; + } + vfunc_allocate(box, flags) { if (box.get_width() > 0 && box.get_height() > 0) { let sizeRatio = box.get_width() / box.get_height(); @@ -1609,7 +1627,8 @@ class Keyboard extends St.BoxLayout { * we allow the OSK being smaller than 1/3rd of the monitor height * there. */ - const [, natHeight] = this.get_preferred_height(monitor.width); + const forWidth = this.get_theme_node().adjust_for_width(monitor.width); + const [, natHeight] = this.get_preferred_height(forWidth); this.height = Math.min(maxHeight, natHeight); } }