summaryrefslogtreecommitdiff
path: root/raveos-theme/gnome/theme-data/extensions/installed/rebootintowindows@nimz.cool/extension.js
diff options
context:
space:
mode:
authorAlexanderCurl <alexc@alexc.hu>2026-04-18 17:46:06 +0100
committerAlexanderCurl <alexc@alexc.hu>2026-04-18 17:46:06 +0100
commit70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69 (patch)
treeab1123d4067c1b086dd6faa7ee4ea643236b565a /raveos-theme/gnome/theme-data/extensions/installed/rebootintowindows@nimz.cool/extension.js
parent5d94c0a7d44a2255b81815a52a7056a94a39842d (diff)
downloadRaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.tar.gz
RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.zip
Replaced file structures for themes in the correct format
Diffstat (limited to 'raveos-theme/gnome/theme-data/extensions/installed/rebootintowindows@nimz.cool/extension.js')
-rw-r--r--raveos-theme/gnome/theme-data/extensions/installed/rebootintowindows@nimz.cool/extension.js180
1 files changed, 0 insertions, 180 deletions
diff --git a/raveos-theme/gnome/theme-data/extensions/installed/rebootintowindows@nimz.cool/extension.js b/raveos-theme/gnome/theme-data/extensions/installed/rebootintowindows@nimz.cool/extension.js
deleted file mode 100644
index cdbdc6a..0000000
--- a/raveos-theme/gnome/theme-data/extensions/installed/rebootintowindows@nimz.cool/extension.js
+++ /dev/null
@@ -1,180 +0,0 @@
-/* extension.js
- *
- * 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, see <http://www.gnu.org/licenses/>.
- *
- * SPDX-License-Identifier: GPL-3.0-only
- */
-/* exported init */
-import GLib from 'gi://GLib';
-import Gio from 'gi://Gio';
-import Clutter from 'gi://Clutter';
-import St from 'gi://St';
-import Pango from 'gi://Pango';
-import { panel } from 'resource:///org/gnome/shell/ui/main.js';
-import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
-import * as ModalDialog from 'resource:///org/gnome/shell/ui/modalDialog.js';
-import { Extension, gettext as _, } from 'resource:///org/gnome/shell/extensions/extension.js';
-const GRUB_CONFIG_PATH = "/boot/grub/grub.cfg";
-export default class RebootToWindowsExtension extends Extension {
- menu;
- proxy;
- rebootToWindowsItem;
- counter;
- seconds;
- counterIntervalId;
- messageIntervalId;
- sourceId;
- manager;
- constructor(metadata) {
- super(metadata);
- }
- modifySystemItem() {
- this.menu =
- panel.statusArea.quickSettings._system?.quickSettingsItems[0].menu;
- // if(this.manager == null){
- // return
- // }
- this.proxy = this.manager(Gio.DBus.system, 'org.freedesktop.login1', '/org/freedesktop/login1');
- this.rebootToWindowsItem = new PopupMenu.PopupMenuItem(`${_('Restart to Windows')}...`);
- this.rebootToWindowsItem.connect('activate', () => {
- this.counter = 60;
- this.seconds = this.counter;
- const dialog = this.buildDialog();
- dialog.open();
- this.counterIntervalId = setInterval(() => {
- if (this.counter > 0) {
- this.counter--;
- if (this.counter % 10 === 0) {
- this.seconds = this.counter;
- }
- }
- else {
- this.clearIntervals();
- this.reboot();
- }
- }, 1000);
- });
- this.menu.addMenuItem(this.rebootToWindowsItem, 2);
- }
- queueModifySystemItem() {
- this.sourceId = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
- if (!panel.statusArea.quickSettings._system)
- return GLib.SOURCE_CONTINUE;
- this.modifySystemItem();
- return GLib.SOURCE_REMOVE;
- });
- }
- enable() {
- const ManagerInterface = `<node>
- <interface name="org.freedesktop.login1.Manager">
- <method name="Reboot">
- <arg type="b" direction="in"/>
- </method>
- </interface>
- </node>`;
- this.manager = Gio.DBusProxy.makeProxyWrapper(ManagerInterface);
- if (!panel.statusArea.quickSettings._system) {
- this.queueModifySystemItem();
- }
- else {
- this.modifySystemItem();
- }
- }
- disable() {
- this.manager = null;
- this.clearIntervals();
- this.rebootToWindowsItem?.destroy();
- this.rebootToWindowsItem = null;
- this.proxy = null;
- if (this.sourceId) {
- GLib.Source.remove(this.sourceId);
- this.sourceId = null;
- }
- }
- get_windows_grub_entry(file_path) {
- const file = Gio.File.new_for_path(file_path);
- let boot_entry = "";
- let content = file.load_contents(null)[1];
- const contentsText = new TextDecoder('utf-8').decode(content);
- const arr = contentsText.split(/\r?\n/);
- let menu_pattern = new RegExp("^\\s*menuentry ['\"]([^'\"]*)['\"]");
- arr.forEach((line) => {
- let matches = menu_pattern.exec(line);
- if (matches != null && !matches[1].toLowerCase().search("windows")) {
- boot_entry = matches[1];
- }
- });
- return boot_entry;
- }
- async reboot() {
- let windows_grub_entry = this.get_windows_grub_entry(GRUB_CONFIG_PATH);
- const [, argv] = GLib.shell_parse_argv(`pkexec grub-reboot "${windows_grub_entry}"`);
- const proc = Gio.Subprocess.new(argv, Gio.SubprocessFlags.NONE);
- await proc.wait_check_async(null);
- this.proxy?.RebootRemote(true);
- }
- buildDialog() {
- const dialog = new ModalDialog.ModalDialog({ styleClass: 'modal-dialog' });
- dialog.setButtons([
- {
- label: _('Cancel'),
- action: () => {
- this.clearIntervals();
- dialog.close();
- },
- key: Clutter.KEY_Escape,
- default: false,
- },
- {
- label: _('Restart'),
- action: () => {
- this.clearIntervals();
- this.reboot();
- },
- default: false,
- },
- ]);
- const dialogTitle = new St.Label({
- text: _('Restart into Windows'),
- // style_class: 'dialog-title' // TODO investigate why css classes are not working
- style: 'font-weight: bold;font-size:18px',
- });
- let dialogMessage = new St.Label({
- text: this.getDialogMessageText(),
- });
- dialogMessage.clutterText.ellipsize = Pango.EllipsizeMode.NONE;
- dialogMessage.clutterText.lineWrap = true;
- const titleBox = new St.BoxLayout({
- xAlign: Clutter.ActorAlign.CENTER,
- });
- titleBox.add_child(new St.Label({ text: ' ' }));
- titleBox.add_child(dialogTitle);
- let box = new St.BoxLayout({ yExpand: true, vertical: true });
- box.add_child(titleBox);
- box.add_child(new St.Label({ text: ' ' }));
- box.add_child(dialogMessage);
- this.messageIntervalId = setInterval(() => {
- dialogMessage?.set_text(this.getDialogMessageText());
- }, 500);
- dialog.contentLayout.add_child(box);
- return dialog;
- }
- getDialogMessageText() {
- return _(`The system will restart automatically in %d seconds.`).replace('%d', String(this.seconds));
- }
- clearIntervals() {
- clearInterval(this.counterIntervalId);
- clearInterval(this.messageIntervalId);
- }
-}