2021-05-10 22:03:41 +00:00
|
|
|
const GObject = imports.gi.GObject
|
|
|
|
const St = imports.gi.St
|
|
|
|
const Clutter = imports.gi.Clutter
|
|
|
|
const Main = imports.ui.main
|
|
|
|
const Me = imports.misc.extensionUtils.getCurrentExtension()
|
|
|
|
const AppMenu = Main.panel.statusArea.appMenu
|
|
|
|
const Handlers = Me.imports.handlers
|
|
|
|
const Override = Me.imports.overrides.helper
|
|
|
|
|
|
|
|
var WidgetArrow = class WidgetArrow {
|
|
|
|
constructor(widget) {
|
|
|
|
this.widget = widget || {}
|
|
|
|
|
|
|
|
if (!this.widget.hasOwnProperty('_arrow')) {
|
|
|
|
this._findActor(this.widget)
|
|
|
|
}
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
get arrow() {
|
|
|
|
return this.widget._arrow || {}
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
_findActor(widget) {
|
|
|
|
if (widget.hasOwnProperty('_arrow')) {
|
|
|
|
return this.widget._arrow = widget._arrow
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
const actor = widget.last_child
|
2021-06-09 15:51:27 +00:00
|
|
|
const valid = actor && actor.has_style_class_name
|
2021-05-10 22:03:41 +00:00
|
|
|
|
2021-06-09 15:51:27 +00:00
|
|
|
if (valid && actor.has_style_class_name('popup-menu-arrow')) {
|
2021-05-10 22:03:41 +00:00
|
|
|
return this.widget._arrow = actor
|
2020-11-10 02:15:36 +00:00
|
|
|
}
|
2021-05-10 22:03:41 +00:00
|
|
|
|
|
|
|
actor && this._findActor(actor)
|
2020-11-10 02:15:36 +00:00
|
|
|
}
|
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
hide() {
|
|
|
|
if (!this.widget._arrowRemoved) {
|
|
|
|
this.arrow.visible = false
|
|
|
|
this.widget._arrowRemoved = true
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
}
|
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
show() {
|
|
|
|
if (this.widget._arrowRemoved) {
|
|
|
|
this.arrow.visible = true
|
|
|
|
delete this.widget._arrowRemoved
|
|
|
|
}
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
}
|
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
var Messages = class Messages extends Handlers.Feature {
|
|
|
|
constructor() {
|
|
|
|
super('notifications-position', setting => setting != 'center')
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
activate() {
|
|
|
|
this.settings = new Handlers.Settings()
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
this.settings.connect(
|
|
|
|
'notifications-position', this._onPositionChange.bind(this)
|
|
|
|
)
|
|
|
|
|
|
|
|
this._onPositionChange()
|
2020-11-10 02:15:36 +00:00
|
|
|
}
|
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
get position() {
|
|
|
|
const mapping = { left: 'START', right: 'END' }
|
|
|
|
const setting = this.settings.get('notifications-position')
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
return mapping[setting]
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
_onPositionChange() {
|
|
|
|
const banner = Main.messageTray._bannerBin
|
|
|
|
const context = St.ThemeContext.get_for_stage(global.stage)
|
|
|
|
const position = Clutter.ActorAlign[this.position]
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
banner.set_x_align(position)
|
|
|
|
banner.set_width(390 * context.scale_factor)
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
destroy() {
|
|
|
|
const banner = Main.messageTray._bannerBin
|
|
|
|
const position = Clutter.ActorAlign.CENTER
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
banner.set_x_align(position)
|
|
|
|
banner.set_width(-1)
|
|
|
|
|
|
|
|
this.settings.disconnectAll()
|
|
|
|
}
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
var AppMenuIcon = class AppMenuIcon extends Handlers.Feature {
|
|
|
|
constructor() {
|
|
|
|
super('hide-app-menu-icon', setting => setting == true)
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
Override.inject(this, 'layout', 'AppMenuIconClassic')
|
|
|
|
}
|
|
|
|
|
|
|
|
activate() {
|
|
|
|
AppMenu._iconBox.hide()
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
destroy() {
|
|
|
|
AppMenu._iconBox.show()
|
|
|
|
}
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
var DropdownArrows = class DropdownArrows extends Handlers.Feature {
|
|
|
|
constructor() {
|
|
|
|
super('hide-dropdown-arrows', setting => setting == true)
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
Override.inject(this, 'layout', 'DropdownArrows')
|
|
|
|
}
|
|
|
|
|
|
|
|
activate() {
|
|
|
|
this.signals = new Handlers.Signals()
|
|
|
|
|
|
|
|
for (const box of Main.panel.get_children()) {
|
|
|
|
this.signals.connect(box, 'actor_added', this._onActorAdded.bind(this))
|
2020-11-10 02:15:36 +00:00
|
|
|
}
|
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
this._onActorAdded()
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
get arrows() {
|
|
|
|
const items = Main.panel.statusArea
|
|
|
|
const names = Object.keys(items).filter(this._handleWidget.bind(this))
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
return names.map(name => new WidgetArrow(items[name]))
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
_handleWidget(name) {
|
|
|
|
return !name.startsWith('unite')
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
_onActorAdded() {
|
|
|
|
this.arrows.forEach(arrow => arrow.hide())
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
destroy() {
|
|
|
|
this.arrows.forEach(arrow => arrow.show())
|
|
|
|
this.signals.disconnectAll()
|
|
|
|
}
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
var PanelSpacing = class PanelSpacing extends Handlers.Feature {
|
|
|
|
constructor() {
|
|
|
|
super('reduce-panel-spacing', setting => setting == true)
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
Override.inject(this, 'layout', 'PanelSpacing')
|
|
|
|
Override.inject(this, 'layout', 'PanelSpacingClassic')
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
activate() {
|
|
|
|
this.styles = new Handlers.Styles()
|
|
|
|
this._injectStyles()
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
Main.panel._addStyleClassName('reduce-spacing')
|
|
|
|
this._syncLayout()
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
_injectStyles() {
|
|
|
|
this.styles.addShellStyle('spacing', '@/styles/shell/spacing.css')
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
_syncLayout() {
|
|
|
|
// Fix dateMenu paddings when reduce spacing enabled
|
|
|
|
// when returning from lock screen
|
|
|
|
const dateMenu = Main.panel.statusArea.dateMenu
|
|
|
|
const paddings = this._dateMenuPadding
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
if (!paddings) {
|
|
|
|
this._dateMenuPadding = [dateMenu._minHPadding, dateMenu._natHPadding]
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
dateMenu._minHPadding = 0
|
|
|
|
dateMenu._natHPadding = 0
|
|
|
|
} else {
|
|
|
|
dateMenu._minHPadding = paddings[0]
|
|
|
|
dateMenu._natHPadding = paddings[1]
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
this._dateMenuPadding = null
|
2020-11-10 02:15:36 +00:00
|
|
|
}
|
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
dateMenu.queue_relayout()
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
destroy() {
|
|
|
|
Main.panel._removeStyleClassName('reduce-spacing')
|
|
|
|
this.styles.removeAll()
|
2021-04-12 21:48:16 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
this._syncLayout()
|
|
|
|
}
|
|
|
|
}
|
2021-04-12 21:48:16 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
var LayoutManager = GObject.registerClass(
|
|
|
|
class UniteLayoutManager extends GObject.Object {
|
|
|
|
_init() {
|
|
|
|
this.features = new Handlers.Features()
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
this.features.add(Messages)
|
|
|
|
this.features.add(AppMenuIcon)
|
|
|
|
this.features.add(DropdownArrows)
|
|
|
|
this.features.add(PanelSpacing)
|
2021-04-12 21:48:16 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
Override.inject(this, 'layout', 'LayoutManager')
|
|
|
|
}
|
2021-04-12 21:48:16 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
activate() {
|
|
|
|
this.features.activate()
|
|
|
|
}
|
2020-11-10 02:15:36 +00:00
|
|
|
|
2021-05-10 22:03:41 +00:00
|
|
|
destroy() {
|
|
|
|
this.features.destroy()
|
2020-11-10 02:15:36 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|