diff --git a/files/usr/share/cinnamon/applets/a11y@cinnamon.org/applet.js b/files/usr/share/cinnamon/applets/a11y@cinnamon.org/applet.js index 3cc3b1b4f4..13d58e628b 100644 --- a/files/usr/share/cinnamon/applets/a11y@cinnamon.org/applet.js +++ b/files/usr/share/cinnamon/applets/a11y@cinnamon.org/applet.js @@ -39,7 +39,7 @@ class CinnamonA11YApplet extends Applet.TextIconApplet { try { this.metadata = metadata; - Main.systrayManager.registerTrayIconReplacement("a11y", metadata.uuid); + Main.systrayManager.registerTrayIconReplacement("a11y", metadata.uuid, this.instance_id); this.set_applet_icon_symbolic_name("xsi-accessibility"); this.set_applet_tooltip(_("Accessibility")); @@ -247,7 +247,7 @@ class CinnamonA11YApplet extends Applet.TextIconApplet { } on_applet_removed_from_panel() { - Main.systrayManager.unregisterTrayIconReplacement(this.metadata.uuid); + Main.systrayManager.unregisterTrayIconReplacement(this.metadata.uuid, this.instance_id); } } diff --git a/files/usr/share/cinnamon/applets/keyboard@cinnamon.org/applet.js b/files/usr/share/cinnamon/applets/keyboard@cinnamon.org/applet.js index 785febd0dd..57a0b9a92e 100644 --- a/files/usr/share/cinnamon/applets/keyboard@cinnamon.org/applet.js +++ b/files/usr/share/cinnamon/applets/keyboard@cinnamon.org/applet.js @@ -60,8 +60,8 @@ class CinnamonKeyboardApplet extends Applet.Applet { try { this.metadata = metadata; - Main.systrayManager.registerTrayIconReplacement("keyboard", metadata.uuid); - Main.systrayManager.registerTrayIconReplacement("input-method", metadata.uuid); + Main.systrayManager.registerTrayIconReplacement("keyboard", metadata.uuid, this.instance_id); + Main.systrayManager.registerTrayIconReplacement("input-method", metadata.uuid, this.instance_id); this.menuManager = new PopupMenu.PopupMenuManager(this); this.menu = new Applet.AppletPopupMenu(this, orientation); @@ -354,7 +354,7 @@ class CinnamonKeyboardApplet extends Applet.Applet { on_applet_removed_from_panel() { this._signalManager.disconnectAllSignals(); - Main.systrayManager.unregisterTrayIconReplacement(this.metadata.uuid); + Main.systrayManager.unregisterTrayIconReplacement(this.metadata.uuid, this.instance_id); } }; diff --git a/files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js b/files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js index 9f67e1133b..646ff159af 100644 --- a/files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js +++ b/files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js @@ -1803,8 +1803,8 @@ CinnamonNetworkApplet.prototype = { try { this.metadata = metadata; - Main.systrayManager.registerTrayIconReplacement("network", metadata.uuid); - Main.systrayManager.registerTrayIconReplacement("nm-applet", metadata.uuid); + Main.systrayManager.registerTrayIconReplacement("network", metadata.uuid, this.instance_id); + Main.systrayManager.registerTrayIconReplacement("nm-applet", metadata.uuid, this.instance_id); this.menuManager = new PopupMenu.PopupMenuManager(this); this.menu = new Applet.AppletPopupMenu(this, orientation); @@ -2669,7 +2669,7 @@ CinnamonNetworkApplet.prototype = { }, on_applet_removed_from_panel: function() { - Main.systrayManager.unregisterTrayIconReplacement(this.metadata.uuid); + Main.systrayManager.unregisterTrayIconReplacement(this.metadata.uuid, this.instance_id); Main.keybindingManager.removeXletHotKey(this, "network-open"); if (this._periodicTimeoutId){ Mainloop.source_remove(this._periodicTimeoutId); diff --git a/files/usr/share/cinnamon/applets/network@cinnamon.org/metadata.json b/files/usr/share/cinnamon/applets/network@cinnamon.org/metadata.json index 93d1640987..ff32bfefb6 100644 --- a/files/usr/share/cinnamon/applets/network@cinnamon.org/metadata.json +++ b/files/usr/share/cinnamon/applets/network@cinnamon.org/metadata.json @@ -1,5 +1,6 @@ { "uuid": "network@cinnamon.org", + "max-instances": -1, "name": "Network Manager", "description": "Network manager applet", "icon": "cs-network" diff --git a/files/usr/share/cinnamon/applets/on-screen-keyboard@cinnamon.org/metadata.json b/files/usr/share/cinnamon/applets/on-screen-keyboard@cinnamon.org/metadata.json index f1561b0830..e2c76caf73 100644 --- a/files/usr/share/cinnamon/applets/on-screen-keyboard@cinnamon.org/metadata.json +++ b/files/usr/share/cinnamon/applets/on-screen-keyboard@cinnamon.org/metadata.json @@ -1,5 +1,6 @@ { "uuid": "on-screen-keyboard@cinnamon.org", + "max-instances": -1, "name": "On-Screen keyboard", "icon": "cinnamon-virtual-keyboard", "description": "A Cinnamon applet to launch the on-screen keyboard" diff --git a/files/usr/share/cinnamon/applets/power@cinnamon.org/applet.js b/files/usr/share/cinnamon/applets/power@cinnamon.org/applet.js index 9c2fdb858d..f99b6b0181 100644 --- a/files/usr/share/cinnamon/applets/power@cinnamon.org/applet.js +++ b/files/usr/share/cinnamon/applets/power@cinnamon.org/applet.js @@ -244,8 +244,8 @@ class CinnamonPowerApplet extends Applet.TextIconApplet { this.settings = new Settings.AppletSettings(this, metadata.uuid, instanceId); - Main.systrayManager.registerTrayIconReplacement("power", metadata.uuid); - Main.systrayManager.registerTrayIconReplacement("battery", metadata.uuid); + Main.systrayManager.registerTrayIconReplacement("power", metadata.uuid, this.instance_id); + Main.systrayManager.registerTrayIconReplacement("battery", metadata.uuid, this.instance_id); this.menuManager = new PopupMenu.PopupMenuManager(this); this.menu = new Applet.AppletPopupMenu(this, orientation); @@ -732,7 +732,7 @@ class CinnamonPowerApplet extends Applet.TextIconApplet { } on_applet_removed_from_panel() { - Main.systrayManager.unregisterTrayIconReplacement(this.metadata.uuid); + Main.systrayManager.unregisterTrayIconReplacement(this.metadata.uuid, this.instance_id); if (!this._profilesProxy) return; diff --git a/files/usr/share/cinnamon/applets/power@cinnamon.org/metadata.json b/files/usr/share/cinnamon/applets/power@cinnamon.org/metadata.json index c6a1b0c8d2..baaf0d4343 100644 --- a/files/usr/share/cinnamon/applets/power@cinnamon.org/metadata.json +++ b/files/usr/share/cinnamon/applets/power@cinnamon.org/metadata.json @@ -1,5 +1,6 @@ { "uuid": "power@cinnamon.org", + "max-instances": -1, "name": "Power Manager", "description": "Cinnamon power management applet", "icon": "cs-power" diff --git a/files/usr/share/cinnamon/applets/slideshow@cinnamon.org/metadata.json b/files/usr/share/cinnamon/applets/slideshow@cinnamon.org/metadata.json index 3f3add5cbe..09c2e49892 100644 --- a/files/usr/share/cinnamon/applets/slideshow@cinnamon.org/metadata.json +++ b/files/usr/share/cinnamon/applets/slideshow@cinnamon.org/metadata.json @@ -1,5 +1,6 @@ { "uuid":"slideshow@cinnamon.org", +"max-instances": -1, "name":"Slideshow Controls", "description":"Basic controls for the Cinnamon slideshow", "icon":"preferences-desktop-wallpaper" diff --git a/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js b/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js index 26fe4d132f..24fdb6b676 100644 --- a/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js +++ b/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js @@ -1744,15 +1744,15 @@ class CinnamonSoundApplet extends Applet.TextIconApplet { registerSystrayIcons() { for (let i = 0; i < players_with_seek_support.length; i++) { - Main.systrayManager.registerTrayIconReplacement(players_with_seek_support[i], this.metadata.uuid); + Main.systrayManager.registerTrayIconReplacement(players_with_seek_support[i], this.metadata.uuid, this.instance_id); } for (let i = 0; i < players_without_seek_support.length; i++) { - Main.systrayManager.registerTrayIconReplacement(players_without_seek_support[i], this.metadata.uuid); + Main.systrayManager.registerTrayIconReplacement(players_without_seek_support[i], this.metadata.uuid, this.instance_id); } } unregisterSystrayIcons() { - Main.systrayManager.unregisterTrayIconReplacement(this.metadata.uuid); + Main.systrayManager.unregisterTrayIconReplacement(this.metadata.uuid, this.instance_id); } } diff --git a/files/usr/share/cinnamon/applets/sound@cinnamon.org/metadata.json b/files/usr/share/cinnamon/applets/sound@cinnamon.org/metadata.json index aad28ae1b0..ff7ff88d02 100644 --- a/files/usr/share/cinnamon/applets/sound@cinnamon.org/metadata.json +++ b/files/usr/share/cinnamon/applets/sound@cinnamon.org/metadata.json @@ -1,5 +1,6 @@ { "uuid": "sound@cinnamon.org", + "max-instances": -1, "name": "Sound", "description": "A Cinnamon applet to control sound and music", "icon": "cs-sound" diff --git a/files/usr/share/cinnamon/applets/xrandr@cinnamon.org/metadata.json b/files/usr/share/cinnamon/applets/xrandr@cinnamon.org/metadata.json index e9316d131c..9a642387ba 100644 --- a/files/usr/share/cinnamon/applets/xrandr@cinnamon.org/metadata.json +++ b/files/usr/share/cinnamon/applets/xrandr@cinnamon.org/metadata.json @@ -1,5 +1,6 @@ { "uuid": "xrandr@cinnamon.org", + "max-instances": -1, "name": "Display", "description": "XRandR monitor control applet", "icon": "cs-display", diff --git a/files/usr/share/cinnamon/desklets/photoframe@cinnamon.org/metadata.json b/files/usr/share/cinnamon/desklets/photoframe@cinnamon.org/metadata.json index 4227954fed..96ff9e3890 100644 --- a/files/usr/share/cinnamon/desklets/photoframe@cinnamon.org/metadata.json +++ b/files/usr/share/cinnamon/desklets/photoframe@cinnamon.org/metadata.json @@ -1,5 +1,6 @@ { "uuid": "photoframe@cinnamon.org", + "max-instances": -1, "name": "Digital photo frame", "description": "A digital photo frame desklet", "icon": "folder-pictures", diff --git a/js/ui/systray.js b/js/ui/systray.js index 2e284257ed..48ff71e890 100644 --- a/js/ui/systray.js +++ b/js/ui/systray.js @@ -32,24 +32,30 @@ SystrayManager.prototype = { * registerTrayIconReplacement: * @role (string): The systray icon name as reported in the logs. * @uuid (string): The uuid of the applet, desklet, or extension. + * @instanceId (int): Optional instance id for multi-instance support. * - * Registers the uuid to replace a tray icon identified by the role + * Registers the uuid to replace a tray icon identified by the role. */ - registerTrayIconReplacement: function(role, uuid) { - this._roles.push({role: role.toLowerCase(), uuid: uuid}); + registerTrayIconReplacement: function(role, uuid, instanceId) { + this._roles.push({role: role.toLowerCase(), uuid: uuid, instanceId: instanceId}); this.emit("changed"); }, /** * unregisterTrayIconReplacement: * @uuid (string): The uuid of the applet, desklet, or extension. + * @instanceId (int): Optional instance id. If provided, only entries + * matching both uuid and instanceId are removed. If omitted, all + * entries for the uuid are removed. * - * Unregisters the any roles claimed by uuid. + * Unregisters any roles claimed by uuid (and optionally instanceId). */ - unregisterTrayIconReplacement: function(uuid) { + unregisterTrayIconReplacement: function(uuid, instanceId) { for (let i = this._roles.length - 1; i >= 0; i--) { if (this._roles[i].uuid == uuid) { - this._roles.splice(i, 1); + if (instanceId === undefined || this._roles[i].instanceId === instanceId) { + this._roles.splice(i, 1); + } } } this.emit("changed");