67 lines
2.1 KiB
JavaScript
67 lines
2.1 KiB
JavaScript
// SPDX-FileCopyrightText: GSConnect Developers https://github.com/GSConnect
|
|
//
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
import Gio from 'gi://Gio';
|
|
import Gtk from 'gi://Gtk';
|
|
import St from 'gi://St';
|
|
|
|
import {PACKAGE_VERSION} from 'resource:///org/gnome/shell/misc/config.js';
|
|
|
|
|
|
export const SHELL_MAJOR_VERSION = Number(PACKAGE_VERSION.split('.')[0]);
|
|
|
|
export const HAS_ST_ORIENTATION = SHELL_MAJOR_VERSION >= 48;
|
|
export const HAS_MESSAGELIST_NOTIFICATIONMESSAGE = SHELL_MAJOR_VERSION >= 48;
|
|
|
|
/**
|
|
* Get a themed icon, using fallbacks from GSConnect's GResource when necessary.
|
|
*
|
|
* @param {string} name - A themed icon name
|
|
* @returns {Gio.Icon} A themed icon
|
|
*/
|
|
export function getIcon(name) {
|
|
if (getIcon._resource === undefined) {
|
|
// Setup the desktop icons
|
|
const settings = St.Settings.get();
|
|
getIcon._desktop = new Gtk.IconTheme();
|
|
getIcon._desktop.set_theme_name(settings.gtk_icon_theme);
|
|
settings.connect('notify::gtk-icon-theme', (settings_, key_) => {
|
|
getIcon._desktop.set_theme_name(settings_.gtk_icon_theme);
|
|
});
|
|
|
|
// Preload our fallbacks
|
|
const iconPath = 'resource://org/gnome/Shell/Extensions/GSConnect/icons';
|
|
const iconNames = [
|
|
'org.gnome.Shell.Extensions.GSConnect',
|
|
'org.gnome.Shell.Extensions.GSConnect-symbolic',
|
|
'computer-symbolic',
|
|
'laptop-symbolic',
|
|
'smartphone-symbolic',
|
|
'tablet-symbolic',
|
|
'tv-symbolic',
|
|
'phonelink-ring-symbolic',
|
|
'sms-symbolic',
|
|
];
|
|
|
|
getIcon._resource = {};
|
|
|
|
for (const iconName of iconNames) {
|
|
getIcon._resource[iconName] = new Gio.FileIcon({
|
|
file: Gio.File.new_for_uri(`${iconPath}/${iconName}.svg`),
|
|
});
|
|
}
|
|
}
|
|
|
|
// Check the desktop icon theme
|
|
if (getIcon._desktop.has_icon(name))
|
|
return new Gio.ThemedIcon({name: name});
|
|
|
|
// Check our GResource
|
|
if (getIcon._resource[name] !== undefined)
|
|
return getIcon._resource[name];
|
|
|
|
// Fallback to hoping it's in the theme somewhere
|
|
return new Gio.ThemedIcon({name: name});
|
|
}
|