const Gi = imports._gi const Clutter = imports.gi.Clutter const Main = imports.ui.main const Unite = imports.misc.extensionUtils.getCurrentExtension() const Base = Unite.imports.module.BaseModule var ExtendLeftBox = class ExtendLeftBox extends Base { _onSetup() { this._enableKey = 'extend-left-box' this._enableValue = true } _onActivate() { this._oldAllocate = Main.panel.__proto__.vfunc_allocate Main.panel.__proto__[Gi.hook_up_vfunc_symbol]('allocate', (box, flags) => { Main.panel.vfunc_allocate.call(Main.panel, box, flags) this._extendBox(Main.panel, box, flags) }) } _onDeactivate() { if (this._oldAllocate) { Main.panel.__proto__[Gi.hook_up_vfunc_symbol]('allocate', this._oldAllocate) this._oldAllocate = null } } _onReload() { Main.panel.queue_relayout() } _extendBox(actor, box, flags) { let leftBox = Main.panel._leftBox let centerBox = Main.panel._centerBox let rightBox = Main.panel._rightBox let allocWidth = box.x2 - box.x1 let allocHeight = box.y2 - box.y1 let [leftMinWidth, leftNaturalWidth] = leftBox.get_preferred_width(-1) let [centerMinWidth, centerNaturalWidth] = centerBox.get_preferred_width(-1) let [rightMinWidth, rightNaturalWidth] = rightBox.get_preferred_width(-1) let sideWidth = allocWidth - rightNaturalWidth - centerNaturalWidth let childBox = new Clutter.ActorBox() childBox.y1 = 0 childBox.y2 = allocHeight if (actor.get_text_direction() == Clutter.TextDirection.RTL) { childBox.x1 = allocWidth - Math.min(Math.floor(sideWidth), leftNaturalWidth) childBox.x2 = allocWidth } else { childBox.x1 = 0 childBox.x2 = Math.min(Math.floor(sideWidth), leftNaturalWidth) } leftBox.allocate(childBox, flags) childBox.y1 = 0 childBox.y2 = allocHeight if (actor.get_text_direction() == Clutter.TextDirection.RTL) { childBox.x1 = rightNaturalWidth childBox.x2 = childBox.x1 + centerNaturalWidth } else { childBox.x1 = allocWidth - centerNaturalWidth - rightNaturalWidth childBox.x2 = childBox.x1 + centerNaturalWidth } centerBox.allocate(childBox, flags) childBox.y1 = 0 childBox.y2 = allocHeight if (actor.get_text_direction() == Clutter.TextDirection.RTL) { childBox.x1 = 0 childBox.x2 = rightNaturalWidth } else { childBox.x1 = allocWidth - rightNaturalWidth childBox.x2 = allocWidth } rightBox.allocate(childBox, flags) } }