File: quickSettings.js

package info (click to toggle)
gnome-shell-extension-bluetooth-quick-connect 33-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 232 kB
  • sloc: javascript: 801; xml: 37; makefile: 21
file content (46 lines) | stat: -rw-r--r-- 1,633 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// Copyright 2010-2022 GNOME Shell contributors
// Copyright 2022 Simon McVittie
// SPDX-License-Identifier: GPL-2.0-or-later
//
// Adapted from gnome-shell js/ui/status/bluetooth.js

/* exported BluetoothToggleMenu */


const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();

const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
const _ = Gettext.gettext;

const PopupMenu = imports.ui.popupMenu;

const {GObject} = imports.gi;
const {QuickMenuToggle} = imports.ui.quickSettings;

var BluetoothToggleMenu = GObject.registerClass(
class BluetoothToggleMenu extends QuickMenuToggle {
    _init(originalBluetoothToggle) {
        super._init({label: originalBluetoothToggle.label});

        this._original = originalBluetoothToggle;
        this._client = this._original._client;

        this._original.bind_property('visible', this, 'visible',
            GObject.BindingFlags.SYNC_CREATE);
        this._original.bind_property('checked', this, 'checked',
            GObject.BindingFlags.SYNC_CREATE);
        this._original.bind_property('icon-name', this, 'icon-name',
            GObject.BindingFlags.SYNC_CREATE);

        this.connect('clicked', () => this._client.toggleActive());

        this.menu.setHeader('bluetooth-active-symbolic', originalBluetoothToggle.label);

        this.itemsSection = new PopupMenu.PopupMenuSection();
        this.menu.addMenuItem(this.itemsSection);
        this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
        this.menu.addSettingsAction(_("Bluetooth Settings"), 'gnome-bluetooth-panel.desktop');
    }
});