102 lines
2.6 KiB
JavaScript
102 lines
2.6 KiB
JavaScript
const Gio = imports.gi.Gio
|
|
const GLib = imports.gi.GLib
|
|
const St = imports.gi.St
|
|
const Meta = imports.gi.Meta
|
|
const Config = imports.misc.config
|
|
const Unite = imports.misc.extensionUtils.getCurrentExtension()
|
|
const Settings = Unite.imports.convenience.getSettings()
|
|
|
|
const USER_CONFIG = GLib.get_user_config_dir()
|
|
const USER_STYLES = `${USER_CONFIG}/gtk-3.0/gtk.css`
|
|
|
|
var minorVersion = parseInt(Config.PACKAGE_VERSION.split('.')[1])
|
|
|
|
function fileExists(path) {
|
|
return GLib.file_test(path, GLib.FileTest.EXISTS)
|
|
}
|
|
|
|
function getUserStyles() {
|
|
if (!fileExists(USER_STYLES)) return ''
|
|
|
|
let file = GLib.file_get_contents(USER_STYLES)
|
|
let style = String.fromCharCode.apply(null, file[1])
|
|
|
|
return style.replace(/@import.*unite@hardpixel\.eu.*css['"]\);\n/g, '')
|
|
}
|
|
|
|
function loadUserStyles(styles) {
|
|
let existing = getUserStyles()
|
|
GLib.file_set_contents(USER_STYLES, styles + existing)
|
|
}
|
|
|
|
function getThemeContext() {
|
|
return St.ThemeContext.get_for_stage(global.stage)
|
|
}
|
|
|
|
function getTheme() {
|
|
let context = getThemeContext()
|
|
return context.get_theme()
|
|
}
|
|
|
|
function getGioFile(filePath) {
|
|
let absPath = GLib.build_filenamev([Unite.path, filePath])
|
|
|
|
if (fileExists(absPath))
|
|
return Gio.file_new_for_path(absPath)
|
|
}
|
|
|
|
function loadStyles(filePath) {
|
|
let gioFile = getGioFile(filePath)
|
|
if (!gioFile) return
|
|
|
|
let theme = getTheme()
|
|
theme.load_stylesheet(gioFile)
|
|
|
|
return gioFile
|
|
}
|
|
|
|
function unloadStyles(gioFile) {
|
|
let theme = getTheme()
|
|
theme.unload_stylesheet(gioFile)
|
|
|
|
return null
|
|
}
|
|
|
|
function scaleSize(initialSize) {
|
|
let context = getThemeContext()
|
|
return initialSize * context.scale_factor
|
|
}
|
|
|
|
function getWindowXID(win) {
|
|
let desc = win.get_description() || ''
|
|
let match = desc.match(/0x[0-9a-f]+/) || [null]
|
|
|
|
return match[0]
|
|
}
|
|
|
|
function isWindow(win) {
|
|
if (!win) return
|
|
|
|
let meta = Meta.WindowType
|
|
let types = [meta.NORMAL, meta.DIALOG, meta.MODAL_DIALOG, meta.UTILITY]
|
|
|
|
return types.includes(win.window_type)
|
|
}
|
|
|
|
function isMaximized(win, matchState) {
|
|
if (!win) return
|
|
|
|
let flags = Meta.MaximizeFlags
|
|
let maximized = win.get_maximized()
|
|
let primaryScreen = win.is_on_primary_monitor() || !(Settings.getSetting('restrict-to-primary-screen'))
|
|
let tileMaximized = maximized == flags.HORIZONTAL || maximized == flags.VERTICAL
|
|
let fullMaximized = maximized == flags.BOTH
|
|
let bothMaximized = fullMaximized || tileMaximized
|
|
|
|
switch (matchState) {
|
|
case 'both': return primaryScreen && bothMaximized
|
|
case 'maximized': return primaryScreen && fullMaximized
|
|
case 'tiled': return primaryScreen && tileMaximized
|
|
}
|
|
}
|