summaryrefslogtreecommitdiff
path: root/raveos-gnome-theme/theme-data/extensions/installed/burn-my-windows@schneegans.github.com/src/WindowPicker.js
diff options
context:
space:
mode:
Diffstat (limited to 'raveos-gnome-theme/theme-data/extensions/installed/burn-my-windows@schneegans.github.com/src/WindowPicker.js')
-rw-r--r--raveos-gnome-theme/theme-data/extensions/installed/burn-my-windows@schneegans.github.com/src/WindowPicker.js93
1 files changed, 93 insertions, 0 deletions
diff --git a/raveos-gnome-theme/theme-data/extensions/installed/burn-my-windows@schneegans.github.com/src/WindowPicker.js b/raveos-gnome-theme/theme-data/extensions/installed/burn-my-windows@schneegans.github.com/src/WindowPicker.js
new file mode 100644
index 0000000..0f9b8d3
--- /dev/null
+++ b/raveos-gnome-theme/theme-data/extensions/installed/burn-my-windows@schneegans.github.com/src/WindowPicker.js
@@ -0,0 +1,93 @@
+//////////////////////////////////////////////////////////////////////////////////////////
+// ) ( //
+// ( /( ( ( ) ( ( ( ( )\ ) ( ( //
+// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( //
+// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ //
+// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) //
+// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< //
+// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ //
+// |__/ //
+//////////////////////////////////////////////////////////////////////////////////////////
+
+// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
+// SPDX-FileCopyrightText: Aurélien Hamy <aunetx@yandex.com>
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+'use strict';
+
+import Gio from 'gi://Gio';
+import GLib from 'gi://GLib';
+
+import * as Main from 'resource:///org/gnome/shell/ui/main.js';
+import * as LookingGlass from 'resource:///org/gnome/shell/ui/lookingGlass.js';
+
+import * as utils from './utils.js';
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// This is based on the window-picking functionality of the Blur-My-Shell extension. //
+// The PickWindow() method is exposed via the D-Bus and can be called by the //
+// preferences dialog of the Burn-My-Windows extensions in order to initiate the window //
+// picking. //
+//////////////////////////////////////////////////////////////////////////////////////////
+
+export class WindowPicker {
+ // ------------------------------------------------------------------------- constructor
+
+ constructor() {
+ const iFace = utils.getStringResource(
+ '/interfaces/org.gnome.shell.extensions.burn-my-windows.xml');
+ this._dbus = Gio.DBusExportedObject.wrapJSObject(iFace, this);
+ }
+
+ // --------------------------------------------------------------------- D-Bus interface
+
+ // This method is exposed via the D-Bus. It is called by the preferences dialog of the
+ // Burn-My-Windows extensions in order to initiate the window picking.
+ PickWindow() {
+
+ // We use the actor picking from LookingGlass. This seems a bit hacky and also allows
+ // selecting things of the Shell which are not windows, but it does the trick :)
+ const lookingGlass = Main.createLookingGlass();
+ lookingGlass.open();
+ lookingGlass.hide();
+
+ const inspector = new LookingGlass.Inspector(Main.createLookingGlass());
+ inspector.connect('target', (me, target, x, y) => {
+ // Remove border effect when window is picked.
+ target.get_effects()
+ .filter(e => e.toString().includes('lookingGlass_RedBorderEffect'))
+ .forEach(e => target.remove_effect(e));
+
+ if (target.toString().includes('MetaSurfaceActor')) {
+ target = target.get_parent();
+ }
+
+ if (target.toString().includes('ContainerActor')) {
+ target = target.get_parent();
+ }
+
+ let wmClass = 'window-not-found';
+ if (target.toString().includes('WindowActor') &&
+ target.meta_window.get_wm_class() != '') {
+ wmClass = target.meta_window.get_wm_class();
+ }
+
+ this._dbus.emit_signal('WindowPicked', new GLib.Variant('(s)', [wmClass]));
+ });
+
+ // Close LookingGlass when we're done.
+ inspector.connect('closed', _ => lookingGlass.close());
+ }
+
+ // -------------------------------------------------------------------- public interface
+
+ // Call this to make the window-picking API available on the D-Bus.
+ export() {
+ this._dbus.export(Gio.DBus.session, '/org/gnome/shell/extensions/BurnMyWindows');
+ }
+
+ // Call this to stop this D-Bus again.
+ unexport() {
+ this._dbus.unexport();
+ }
+};