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

231 lines
4.6 KiB
JavaScript

const Bytes = imports.byteArray
const Gio = imports.gi.Gio
const GLib = imports.gi.GLib
const St = imports.gi.St
const Unite = imports.misc.extensionUtils.getCurrentExtension()
const Convenience = Unite.imports.convenience
const SETTINGS = Convenience.getSettings()
const WM_PREFS = Convenience.getPreferences()
const USER_CONFIG = GLib.get_user_config_dir()
const USER_STYLES = `${USER_CONFIG}/gtk-3.0/gtk.css`
function fileExists(path) {
return GLib.file_test(path, GLib.FileTest.EXISTS)
}
function getGioFile(path) {
const absPath = GLib.build_filenamev([Unite.path, path])
if (fileExists(absPath)) {
return Gio.file_new_for_path(absPath)
}
}
function getFileContents(path) {
if (fileExists(path)) {
const contents = GLib.file_get_contents(path)
return Bytes.toString(contents[1])
} else {
return ''
}
}
function setFileContents(path, contents) {
GLib.file_set_contents(path, contents)
}
function resetGtkStyles() {
let style = getFileContents(USER_STYLES)
style = style.replace(/\/\* UNITE ([\s\S]*?) UNITE \*\/\n/g, '')
style = style.replace(/@import.*unite@hardpixel\.eu.*css['"]\);\n/g, '')
setFileContents(USER_STYLES, style)
}
var Signals = class Signals {
constructor() {
this.signals = new Map()
}
registerHandler(object, name, callback) {
const key = `${object}[${name}]`
if (!this.hasSignal(key)) {
this.signals.set(key, {
object: object,
signalId: object.connect(name, callback)
})
}
return key
}
hasSignal(key) {
return this.signals.has(key)
}
connect(object, name, callback) {
return this.registerHandler(object, name, callback)
}
disconnect(key) {
if (this.hasSignal(key)) {
const data = this.signals.get(key)
data.object.disconnect(data.signalId)
this.signals.delete(key)
}
}
disconnectMany(keys) {
keys.forEach(this.disconnect.bind(this))
}
disconnectAll() {
for (const key of this.signals.keys()) {
this.disconnect(key)
}
}
}
var Settings = class Settings extends Signals {
getSettingObject(key) {
if (SETTINGS.exists(key)) {
return SETTINGS
} else {
return WM_PREFS
}
}
connect(name, callback) {
const object = this.getSettingObject(name)
return this.registerHandler(object, `changed::${name}`, callback)
}
get(key) {
const object = this.getSettingObject(key)
return object.getSetting(key)
}
}
var ShellStyle = class ShellStyle {
constructor(path) {
this.file = getGioFile(path)
}
get context() {
return St.ThemeContext.get_for_stage(global.stage)
}
get theme() {
return this.context.get_theme()
}
load() {
this.theme.load_stylesheet(this.file)
}
unload() {
this.theme.unload_stylesheet(this.file)
}
}
var WidgetStyle = class WidgetStyle {
constructor(widget, style) {
this.widget = widget
this.style = style
}
get existing() {
return this.widget.get_style() || ''
}
load() {
const style = this.existing + this.style
this.widget.set_style(style)
}
unload() {
const style = this.existing.replace(this.style, '')
this.widget.set_style(style)
}
}
var GtkStyle = class GtkStyle {
constructor(name, contents) {
this.contents = `/* UNITE ${name} */\n${contents}\n/* ${name} UNITE */\n`
}
get existing() {
return getFileContents(USER_STYLES)
}
load() {
const style = this.contents + this.existing
setFileContents(USER_STYLES, style)
}
unload() {
const style = this.existing.replace(this.contents, '')
setFileContents(USER_STYLES, style)
}
}
var Styles = class Styles {
constructor() {
this.styles = new Map()
}
hasStyle(name) {
return name && this.styles.has(name)
}
getStyle(name) {
return name && this.styles.get(name)
}
setStyle(name, object, ...args) {
if (!this.hasStyle(name)) {
const style = new object(...args)
style.load()
this.styles.set(name, style)
}
}
deleteStyle(name) {
if (this.hasStyle(name)) {
const style = this.getStyle(name)
style.unload()
this.styles.delete(name)
}
}
addShellStyle(name, path) {
this.deleteStyle(name)
this.setStyle(name, ShellStyle, path)
}
addWidgetStyle(name, widget, styles) {
this.deleteStyle(name)
this.setStyle(name, WidgetStyle, widget, styles)
}
addGtkStyle(name, contents) {
this.deleteStyle(name)
this.setStyle(name, GtkStyle, name, contents)
}
removeAll() {
for (const key of this.styles.keys()) {
this.deleteStyle(key)
}
}
}
resetGtkStyles()