| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // 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});
- }
|