iso-profiles-settings/tromjaro/gnome/desktop-overlay/etc/skel/.local/share/gnome-shell/extensions/unite@hardpixel.eu/layout.js

220 lines
4.9 KiB
JavaScript

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)
}
}
get arrow() {
return this.widget._arrow || {}
}
_findActor(widget) {
if (widget.hasOwnProperty('_arrow')) {
return this.widget._arrow = widget._arrow
}
const actor = widget.last_child
const valid = actor && actor.has_style_class_name
if (valid && actor.has_style_class_name('popup-menu-arrow')) {
return this.widget._arrow = actor
}
actor && this._findActor(actor)
}
hide() {
if (!this.widget._arrowRemoved) {
this.arrow.visible = false
this.widget._arrowRemoved = true
}
}
show() {
if (this.widget._arrowRemoved) {
this.arrow.visible = true
delete this.widget._arrowRemoved
}
}
}
var Messages = class Messages extends Handlers.Feature {
constructor() {
super('notifications-position', setting => setting != 'center')
}
activate() {
this.settings = new Handlers.Settings()
this.settings.connect(
'notifications-position', this._onPositionChange.bind(this)
)
this._onPositionChange()
}
get position() {
const mapping = { left: 'START', right: 'END' }
const setting = this.settings.get('notifications-position')
return mapping[setting]
}
_onPositionChange() {
const banner = Main.messageTray._bannerBin
const context = St.ThemeContext.get_for_stage(global.stage)
const position = Clutter.ActorAlign[this.position]
banner.set_x_align(position)
banner.set_width(390 * context.scale_factor)
}
destroy() {
const banner = Main.messageTray._bannerBin
const position = Clutter.ActorAlign.CENTER
banner.set_x_align(position)
banner.set_width(-1)
this.settings.disconnectAll()
}
}
var AppMenuIcon = class AppMenuIcon extends Handlers.Feature {
constructor() {
super('hide-app-menu-icon', setting => setting == true)
Override.inject(this, 'layout', 'AppMenuIconClassic')
}
activate() {
AppMenu._iconBox.hide()
}
destroy() {
AppMenu._iconBox.show()
}
}
var DropdownArrows = class DropdownArrows extends Handlers.Feature {
constructor() {
super('hide-dropdown-arrows', setting => setting == true)
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))
}
this._onActorAdded()
}
get arrows() {
const items = Main.panel.statusArea
const names = Object.keys(items).filter(this._handleWidget.bind(this))
return names.map(name => new WidgetArrow(items[name]))
}
_handleWidget(name) {
return !name.startsWith('unite')
}
_onActorAdded() {
this.arrows.forEach(arrow => arrow.hide())
}
destroy() {
this.arrows.forEach(arrow => arrow.show())
this.signals.disconnectAll()
}
}
var PanelSpacing = class PanelSpacing extends Handlers.Feature {
constructor() {
super('reduce-panel-spacing', setting => setting == true)
Override.inject(this, 'layout', 'PanelSpacing')
Override.inject(this, 'layout', 'PanelSpacingClassic')
}
activate() {
this.styles = new Handlers.Styles()
this._injectStyles()
Main.panel._addStyleClassName('reduce-spacing')
this._syncLayout()
}
_injectStyles() {
this.styles.addShellStyle('spacing', '@/styles/shell/spacing.css')
}
_syncLayout() {
// Fix dateMenu paddings when reduce spacing enabled
// when returning from lock screen
const dateMenu = Main.panel.statusArea.dateMenu
const paddings = this._dateMenuPadding
if (!paddings) {
this._dateMenuPadding = [dateMenu._minHPadding, dateMenu._natHPadding]
dateMenu._minHPadding = 0
dateMenu._natHPadding = 0
} else {
dateMenu._minHPadding = paddings[0]
dateMenu._natHPadding = paddings[1]
this._dateMenuPadding = null
}
dateMenu.queue_relayout()
}
destroy() {
Main.panel._removeStyleClassName('reduce-spacing')
this.styles.removeAll()
this._syncLayout()
}
}
var LayoutManager = GObject.registerClass(
class UniteLayoutManager extends GObject.Object {
_init() {
this.features = new Handlers.Features()
this.features.add(Messages)
this.features.add(AppMenuIcon)
this.features.add(DropdownArrows)
this.features.add(PanelSpacing)
Override.inject(this, 'layout', 'LayoutManager')
}
activate() {
this.features.activate()
}
destroy() {
this.features.destroy()
}
}
)