summaryrefslogtreecommitdiff
path: root/raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/modules/quicksettings.js
diff options
context:
space:
mode:
Diffstat (limited to 'raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/modules/quicksettings.js')
-rw-r--r--raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/modules/quicksettings.js77
1 files changed, 77 insertions, 0 deletions
diff --git a/raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/modules/quicksettings.js b/raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/modules/quicksettings.js
new file mode 100644
index 0000000..dd7b161
--- /dev/null
+++ b/raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/modules/quicksettings.js
@@ -0,0 +1,77 @@
+// SPDX-FileCopyrightText: 2023 Deminder <tremminder@gmail.com>
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+import * as Main from 'resource:///org/gnome/shell/ui/main.js';
+
+/**
+ * Add an external indicator after an existing indicator and above an existing indicator item.
+ */
+export function addExternalIndicator(
+ tracker,
+ indicator,
+ after = '_system',
+ above = '_backgroundApps',
+ colSpan
+) {
+ const qs = Main.panel.statusArea.quickSettings;
+ const indicatorItems = indicator.quickSettingsItems;
+ const aboveIndicator = qs[above];
+ if (aboveIndicator === undefined) {
+ if ('_addItems' in qs) {
+ // 45.beta.1: _setupIndicators is not done
+ const injection = tracker.injectProperty(
+ qs,
+ '_addItems',
+ (items, col) => {
+ if (Object.is(items, qs[above].quickSettingsItems)) {
+ injection.clear();
+ // Insert after: insert_child_above(a,b): inserts 'a' after 'b'
+ qs._indicators.insert_child_above(indicator, qs[after]);
+ // Insert above
+ injection.original.call(qs, indicatorItems, colSpan);
+ }
+ injection.previous.call(qs, items, col);
+ }
+ );
+ } else {
+ // 45.rc: _setupIndicators is not done
+ const qsm = qs.menu;
+ const injection = tracker.injectProperty(
+ qsm,
+ '_completeAddItem',
+ (item, col) => {
+ const firstAboveItem = qs[above]?.quickSettingsItems.at(-1);
+ if (Object.is(firstAboveItem, item)) {
+ injection.clear();
+ // Insert after: insert_child_above(a,b): inserts 'a' after 'b'
+ qs._indicators.insert_child_above(indicator, qs[after]);
+ // Insert above
+ indicatorItems.forEach(newItem =>
+ qsm.insertItemBefore(newItem, item, colSpan)
+ );
+ }
+ injection.previous.call(qsm, item, col);
+ }
+ );
+ }
+ } else if ('_addItems' in qs) {
+ // 45.beta.1: _setupIndicators is done
+ // Insert after: insert_child_above(a,b): inserts 'a' after 'b'
+ qs._indicators.insert_child_above(indicator, qs[after]);
+ // Insert above
+ qs._addItems(indicatorItems, colSpan);
+ const firstAboveItem = aboveIndicator.quickSettingsItems.at(-1);
+ indicatorItems.forEach(item => {
+ qs.menu._grid.remove_child(item);
+ qs.menu._grid.insert_child_below(item, firstAboveItem);
+ });
+ } else {
+ // 45.rc: _setupIndicators is done
+ // Insert after
+ qs._indicators.insert_child_above(indicator, qs[after]);
+
+ // Insert above
+ const firstAboveItem = aboveIndicator.quickSettingsItems.at(-1);
+ qs._addItemsBefore(indicatorItems, firstAboveItem, colSpan);
+ }
+}