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
This commit is contained in:
Florian Müllner 2020-07-04 02:36:10 +02:00 committed by Florian Müllner
parent 1e72874192
commit 261d36ba72

View File

@ -61,6 +61,24 @@ class AspectContainer extends St.Widget {
this.queue_relayout(); 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) { vfunc_allocate(box) {
if (box.get_width() > 0 && box.get_height() > 0) { if (box.get_width() > 0 && box.get_height() > 0) {
let sizeRatio = box.get_width() / box.get_height(); let sizeRatio = box.get_width() / box.get_height();
@ -1608,7 +1626,8 @@ class Keyboard extends St.BoxLayout {
* we allow the OSK being smaller than 1/3rd of the monitor height * we allow the OSK being smaller than 1/3rd of the monitor height
* there. * 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); this.height = Math.min(maxHeight, natHeight);
} }
} }