osdWindow: Fix level bar width
Commit 9b07ce1d0d
changed the OSD window's level bar to be a regular
actor instead of a custom drawn bar. The bar actor's width depends on
both the configured level (e.g. 40%) and the available width, however
the width is currently only updated when the configured level changes.
Fix that by properly considering changes to the parent's width as well.
https://bugzilla.gnome.org/show_bug.cgi?id=768317
This commit is contained in:
parent
99b5e10acf
commit
775187b2e4
@ -27,6 +27,8 @@ const LevelBar = new Lang.Class({
|
|||||||
this._bar = new St.Widget({ style_class: 'level-bar' });
|
this._bar = new St.Widget({ style_class: 'level-bar' });
|
||||||
|
|
||||||
this.actor.set_child(this._bar);
|
this.actor.set_child(this._bar);
|
||||||
|
|
||||||
|
this.actor.connect('notify::width', () => { this.level = this.level; });
|
||||||
},
|
},
|
||||||
|
|
||||||
get level() {
|
get level() {
|
||||||
@ -34,14 +36,12 @@ const LevelBar = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
set level(value) {
|
set level(value) {
|
||||||
let newValue = Math.max(0, Math.min(value, 100));
|
this._level = Math.max(0, Math.min(value, 100));
|
||||||
if (newValue == this._level)
|
|
||||||
return;
|
|
||||||
this._level = newValue;
|
|
||||||
|
|
||||||
let width = this.actor.width;
|
let alloc = this.actor.get_allocation_box();
|
||||||
width *= (this._level / 100.);
|
let newWidth = (alloc.x2 - alloc.x1) * this._level / 100;
|
||||||
this._bar.width = width;
|
if (newWidth != this._bar.width)
|
||||||
|
this._bar.width = newWidth;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user