Codebase list gnome-shell-extension-appindicator / lintian-fixes/main extension.js
lintian-fixes/main

Tree @lintian-fixes/main (Download .tar.gz)

extension.js @lintian-fixes/main

e2de1b7
ef1c3b8
 
 
 
 
 
 
 
 
 
 
 
 
 
f5fe477
 
 
5248b0b
90c376a
5248b0b
57cbc27
5248b0b
2d2d1f7
 
19b7de3
f7d9118
2d2d1f7
 
96e5e32
f5fe477
5253298
5248b0b
5253298
 
f5fe477
5248b0b
 
5253298
da4c63b
5248b0b
f7d9118
5248b0b
f5fe477
2d2d1f7
 
5248b0b
ef1c3b8
 
19b7de3
f5fe477
19b7de3
96e5e32
d7fa506
2d2d1f7
7443182
4caf328
717188c
e2a62bd
f5fe477
57cbc27
4caf328
 
7443182
19b7de3
57cbc27
19b7de3
 
 
 
7443182
// 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.

/* exported init, enable, disable */

const Extension = imports.misc.extensionUtils.getCurrentExtension();

const StatusNotifierWatcher = Extension.imports.statusNotifierWatcher;
const TrayIconsManager = Extension.imports.trayIconsManager;
const Util = Extension.imports.util;

let statusNotifierWatcher = null;
let isEnabled = false;
let watchDog = null;

function init() {
    watchDog = new Util.NameWatcher(StatusNotifierWatcher.WATCHER_BUS_NAME);
    watchDog.connect('vanished', () => maybeEnableAfterNameAvailable());

    // HACK: we want to leave the watchdog alive when disabling the extension,
    // but if we are being reloaded, we destroy it since it could be considered
    // a leak and spams our log, too.
    /* eslint-disable no-undef */
    if (typeof global['--appindicator-extension-on-reload'] === 'function')
        global['--appindicator-extension-on-reload']();

    global['--appindicator-extension-on-reload'] = () => {
        Util.Logger.debug('Reload detected, destroying old watchdog');
        watchDog.destroy();
    };
    /* eslint-enable no-undef */
}

// FIXME: when entering/leaving the lock screen, the extension might be enabled/disabled rapidly.
// This will create very bad side effects in case we were not done unowning the name while trying
// to own it again. Since g_bus_unown_name doesn't fire any callback when it's done, we need to
// monitor the bus manually to find out when the name vanished so we can reclaim it again.
function maybeEnableAfterNameAvailable() {
    // by the time we get called whe might not be enabled
    if (isEnabled && (!watchDog.nameAcquired || !watchDog.nameOnBus) && statusNotifierWatcher === null)
        statusNotifierWatcher = new StatusNotifierWatcher.StatusNotifierWatcher(watchDog);
}

function enable() {
    isEnabled = true;
    Util.tryCleanupOldIndicators();
    maybeEnableAfterNameAvailable();
    TrayIconsManager.TrayIconsManager.initialize();
}

function disable() {
    isEnabled = false;
    TrayIconsManager.TrayIconsManager.destroy();
    if (statusNotifierWatcher !== null) {
        statusNotifierWatcher.destroy();
        statusNotifierWatcher = null;
    }
}