diff options
| author | AlexanderCurl <alexc@alexc.hu> | 2026-04-18 17:46:06 +0100 |
|---|---|---|
| committer | AlexanderCurl <alexc@alexc.hu> | 2026-04-18 17:46:06 +0100 |
| commit | 70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69 (patch) | |
| tree | ab1123d4067c1b086dd6faa7ee4ea643236b565a /raveos-gnome-theme/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/trayIconsManager.js | |
| parent | 5d94c0a7d44a2255b81815a52a7056a94a39842d (diff) | |
| download | RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.tar.gz RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.zip | |
Replaced file structures for themes in the correct format
Diffstat (limited to 'raveos-gnome-theme/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/trayIconsManager.js')
| -rw-r--r-- | raveos-gnome-theme/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/trayIconsManager.js | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/raveos-gnome-theme/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/trayIconsManager.js b/raveos-gnome-theme/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/trayIconsManager.js new file mode 100644 index 0000000..6ec7ccd --- /dev/null +++ b/raveos-gnome-theme/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/trayIconsManager.js @@ -0,0 +1,103 @@ +// This file is part of the AppIndicator/KStatusNotifierItem GNOME Shell extension +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +import Shell from 'gi://Shell'; + +import * as Main from 'resource:///org/gnome/shell/ui/main.js'; +import * as Signals from 'resource:///org/gnome/shell/misc/signals.js'; + +import * as IndicatorStatusIcon from './indicatorStatusIcon.js'; +import * as Util from './util.js'; +import * as SettingsManager from './settingsManager.js'; + +let trayIconsManager; + +export class TrayIconsManager extends Signals.EventEmitter { + static initialize() { + if (!trayIconsManager) + trayIconsManager = new TrayIconsManager(); + return trayIconsManager; + } + + static destroy() { + trayIconsManager.destroy(); + } + + constructor() { + super(); + + if (trayIconsManager) + throw new Error('TrayIconsManager is already constructed'); + + this._changedId = SettingsManager.getDefaultGSettings().connect( + 'changed::legacy-tray-enabled', () => this._toggle()); + + this._toggle(); + } + + _toggle() { + if (SettingsManager.getDefaultGSettings().get_boolean('legacy-tray-enabled')) + this._enable(); + else + this._disable(); + } + + _getPanelBgColor() { + return Main.panel?.get_parent() + ? Main.panel.get_theme_node()?.get_background_color() : null; + } + + _enable() { + if (this._tray) + return; + + this._tray = new Shell.TrayManager({bgColor: this._getPanelBgColor()}); + Util.connectSmart(this._tray, 'tray-icon-added', this, this.onTrayIconAdded); + Util.connectSmart(this._tray, 'tray-icon-removed', this, this.onTrayIconRemoved); + + this._tray.manage_screen(Main.panel); + } + + _disable() { + if (!this._tray) + return; + + IndicatorStatusIcon.getTrayIcons().forEach(i => i.destroy()); + this._tray.unmanage_screen(); + this._tray = null; + } + + onTrayIconAdded(_tray, icon) { + const trayIcon = new IndicatorStatusIcon.IndicatorStatusTrayIcon(icon); + IndicatorStatusIcon.addIconToPanel(trayIcon); + } + + onTrayIconRemoved(_tray, icon) { + try { + const [trayIcon] = IndicatorStatusIcon.getTrayIcons().filter(i => i.icon === icon); + trayIcon.destroy(); + } catch (e) { + Util.Logger.warning(`No icon container found for ${icon.title} (${icon})`); + } + } + + destroy() { + this.emit('destroy'); + SettingsManager.getDefaultGSettings().disconnect(this._changedId); + this._disable(); + trayIconsManager = null; + } +} |