diff --git a/js/js-resources.gresource.xml b/js/js-resources.gresource.xml index 93d612cc5..1e36ed4a1 100644 --- a/js/js-resources.gresource.xml +++ b/js/js-resources.gresource.xml @@ -138,6 +138,7 @@ ui/status/autoRotate.js ui/status/backgroundApps.js ui/status/brightness.js + ui/status/camera.js ui/status/darkMode.js ui/status/dwellClick.js ui/status/location.js diff --git a/js/ui/panel.js b/js/ui/panel.js index 073d78b16..b44635f56 100644 --- a/js/ui/panel.js +++ b/js/ui/panel.js @@ -23,6 +23,7 @@ const Main = imports.ui.main; const RemoteAccessStatus = imports.ui.status.remoteAccess; const PowerProfileStatus = imports.ui.status.powerProfiles; const RFKillStatus = imports.ui.status.rfkill; +const CameraStatus = imports.ui.status.camera; const VolumeStatus = imports.ui.status.volume; const BrightnessStatus = imports.ui.status.brightness; const SystemStatus = imports.ui.status.system; @@ -388,6 +389,7 @@ class QuickSettings extends PanelMenu.Button { } this._system = new SystemStatus.Indicator(); + this._camera = new CameraStatus.Indicator(); this._volumeOutput = new VolumeStatus.OutputIndicator(); this._volumeInput = new VolumeStatus.InputIndicator(); this._brightness = new BrightnessStatus.Indicator(); @@ -403,6 +405,7 @@ class QuickSettings extends PanelMenu.Button { this._backgroundApps = new BackgroundAppsStatus.Indicator(); this._indicators.add_child(this._remoteAccess); + this._indicators.add_child(this._camera); this._indicators.add_child(this._volumeInput); this._indicators.add_child(this._location); this._indicators.add_child(this._brightness); @@ -421,6 +424,7 @@ class QuickSettings extends PanelMenu.Button { this._indicators.add_child(this._system); this._addItems(this._system.quickSettingsItems, N_QUICK_SETTINGS_COLUMNS); + this._addItems(this._camera.quickSettingsItems, N_QUICK_SETTINGS_COLUMNS); this._addItems(this._volumeOutput.quickSettingsItems, N_QUICK_SETTINGS_COLUMNS); this._addItems(this._volumeInput.quickSettingsItems, N_QUICK_SETTINGS_COLUMNS); this._addItems(this._brightness.quickSettingsItems, N_QUICK_SETTINGS_COLUMNS); diff --git a/js/ui/status/camera.js b/js/ui/status/camera.js new file mode 100644 index 000000000..b5ff2ee0a --- /dev/null +++ b/js/ui/status/camera.js @@ -0,0 +1,22 @@ +// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- +/* exported Indicator */ + +const GObject = imports.gi.GObject; +const Shell = imports.gi.Shell; + +const {SystemIndicator} = imports.ui.quickSettings; + +var Indicator = GObject.registerClass( +class Indicator extends SystemIndicator { + constructor() { + super(); + + this._indicator = this._addIndicator(); + this._indicator.icon_name = 'camera-web-symbolic'; + this._indicator.add_style_class_name('privacy-indicator'); + + this._cameraMonitor = new Shell.CameraMonitor(); + this._cameraMonitor.bind_property('cameras-in-use', this._indicator, + 'visible', GObject.BindingFlags.SYNC_CREATE); + } +});