summaryrefslogtreecommitdiff
path: root/raveos-theme/gnome/theme-data/extensions/installed/blur-my-shell@aunetx/components/overview.js
diff options
context:
space:
mode:
authornippy <you@example.com>2026-04-18 13:49:56 +0200
committernippy <you@example.com>2026-04-18 13:49:56 +0200
commit5d94c0a7d44a2255b81815a52a7056a94a39842d (patch)
tree759bdea9645c6a62f9e1e4c001f7d81cccd120d2 /raveos-theme/gnome/theme-data/extensions/installed/blur-my-shell@aunetx/components/overview.js
parente79cdf210b267f21a186255ce1a4d50029439d54 (diff)
downloadRaveOS-PKGBUILD-5d94c0a7d44a2255b81815a52a7056a94a39842d.tar.gz
RaveOS-PKGBUILD-5d94c0a7d44a2255b81815a52a7056a94a39842d.zip
update Raveos themes
Diffstat (limited to 'raveos-theme/gnome/theme-data/extensions/installed/blur-my-shell@aunetx/components/overview.js')
-rw-r--r--raveos-theme/gnome/theme-data/extensions/installed/blur-my-shell@aunetx/components/overview.js226
1 files changed, 226 insertions, 0 deletions
diff --git a/raveos-theme/gnome/theme-data/extensions/installed/blur-my-shell@aunetx/components/overview.js b/raveos-theme/gnome/theme-data/extensions/installed/blur-my-shell@aunetx/components/overview.js
new file mode 100644
index 0000000..50a625e
--- /dev/null
+++ b/raveos-theme/gnome/theme-data/extensions/installed/blur-my-shell@aunetx/components/overview.js
@@ -0,0 +1,226 @@
+import Meta from 'gi://Meta';
+import * as Main from 'resource:///org/gnome/shell/ui/main.js';
+
+import { WorkspaceAnimationController } from 'resource:///org/gnome/shell/ui/workspaceAnimation.js';
+const wac_proto = WorkspaceAnimationController.prototype;
+
+import { Pipeline } from '../conveniences/pipeline.js';
+
+const OVERVIEW_COMPONENTS_STYLE = [
+ "overview-components-light",
+ "overview-components-dark",
+ "overview-components-transparent"
+];
+
+
+export const OverviewBlur = class OverviewBlur {
+ constructor(connections, settings, effects_manager) {
+ this.connections = connections;
+ this.settings = settings;
+ this.effects_manager = effects_manager;
+ this.overview_background_managers = [];
+ this.overview_background_group = new Meta.BackgroundGroup(
+ { name: 'bms-overview-backgroundgroup' }
+ );
+ this.animation_background_managers = [];
+ this.animation_background_group = new Meta.BackgroundGroup(
+ { name: 'bms-animation-backgroundgroup' }
+ );
+ this.enabled = false;
+ this.proto_patched = false;
+ }
+
+ enable() {
+ this._log("blurring overview");
+
+ // add css class name for workspace-switch background
+ Main.uiGroup.add_style_class_name("blurred-overview");
+
+ // add css class name to make components semi-transparent if wanted
+ this.update_components_classname();
+
+ // update backgrounds when the component is enabled
+ this.update_backgrounds();
+
+ // connect to monitors change
+ this.connections.connect(Main.layoutManager, 'monitors-changed',
+ _ => this.update_backgrounds()
+ );
+
+ // part for the workspace animation switch
+
+ // make sure not to do this part if the functions were patched prior, as
+ // the functions would call themselves and cause infinite recursion
+ if (!this.proto_patched) {
+ // store original workspace switching methods for restoring them on
+ // disable()
+ this._original_PrepareSwitch = wac_proto._prepareWorkspaceSwitch;
+ this._original_FinishSwitch = wac_proto._finishWorkspaceSwitch;
+
+ const w_m = global.workspace_manager;
+ const outer_this = this;
+
+ // create a blurred background actor for each monitor during a
+ // workspace switch
+ wac_proto._prepareWorkspaceSwitch = function (...params) {
+ outer_this._log("prepare workspace switch");
+ outer_this._original_PrepareSwitch.apply(this, params);
+
+ // this permits to show the blur behind windows that are on
+ // workspaces on the left and right
+ if (
+ outer_this.settings.applications.BLUR
+ ) {
+ let ws_index = w_m.get_active_workspace_index();
+ [ws_index - 1, ws_index + 1].forEach(
+ i => w_m.get_workspace_by_index(i)?.list_windows().forEach(
+ window => window.get_compositor_private().show()
+ )
+ );
+ }
+
+ Main.uiGroup.insert_child_above(
+ outer_this.animation_background_group,
+ global.window_group
+ );
+
+ outer_this.animation_background_managers.forEach(bg_manager => {
+ if (bg_manager._bms_pipeline.actor)
+ if (
+ Meta.prefs_get_workspaces_only_on_primary() &&
+ bg_manager._monitorIndex !== Main.layoutManager.primaryMonitor.index
+ )
+ bg_manager._bms_pipeline.actor.visible = false;
+ else
+ bg_manager._bms_pipeline.actor.visible = true;
+ });
+ };
+
+ // remove the workspace-switch actors when the switch is done
+ wac_proto._finishWorkspaceSwitch = function (...params) {
+ outer_this._log("finish workspace switch");
+ outer_this._original_FinishSwitch.apply(this, params);
+
+ // this hides windows that are not on the current workspace
+ if (
+ outer_this.settings.applications.BLUR
+ )
+ for (let i = 0; i < w_m.get_n_workspaces(); i++) {
+ if (i != w_m.get_active_workspace_index())
+ w_m.get_workspace_by_index(i)?.list_windows().forEach(
+ window => window.get_compositor_private().hide()
+ );
+ }
+
+ Main.uiGroup.remove_child(outer_this.animation_background_group);
+ };
+
+ this.proto_patched = true;
+ }
+
+ this.enabled = true;
+ }
+
+ update_backgrounds() {
+ // remove every old background
+ this.remove_background_actors();
+ // create new backgrounds for the overview and the animation
+ for (let i = 0; i < Main.layoutManager.monitors.length; i++) {
+ const pipeline_overview = new Pipeline(
+ this.effects_manager,
+ global.blur_my_shell._pipelines_manager,
+ this.settings.overview.PIPELINE
+ );
+ pipeline_overview.create_background_with_effects(
+ i, this.overview_background_managers,
+ this.overview_background_group, 'bms-overview-blurred-widget'
+ );
+
+ const pipeline_animation = new Pipeline(
+ this.effects_manager,
+ global.blur_my_shell._pipelines_manager,
+ this.settings.overview.PIPELINE
+ );
+ pipeline_animation.create_background_with_effects(
+ i, this.animation_background_managers,
+ this.animation_background_group, 'bms-animation-blurred-widget'
+ );
+ }
+ // add the container widget for the overview only to the overview group
+ Main.layoutManager.overviewGroup.insert_child_at_index(this.overview_background_group, 0);
+ // make sure it stays below
+ this.connections.connect(Main.layoutManager.overviewGroup, "child-added", (_, child) => {
+ if (child !== this.overview_background_group) {
+ if (this.overview_background_group.get_parent())
+ Main.layoutManager.overviewGroup.remove_child(this.overview_background_group);
+ Main.layoutManager.overviewGroup.insert_child_at_index(this.overview_background_group, 0);
+ }
+ });
+ }
+
+ /// Updates the classname to style overview components with semi-transparent
+ /// backgrounds.
+ update_components_classname() {
+ OVERVIEW_COMPONENTS_STYLE.forEach(
+ style => Main.uiGroup.remove_style_class_name(style)
+ );
+
+ if (this.settings.overview.STYLE_COMPONENTS > 0)
+ Main.uiGroup.add_style_class_name(
+ OVERVIEW_COMPONENTS_STYLE[this.settings.overview.STYLE_COMPONENTS - 1]
+ );
+ }
+
+ remove_background_actors() {
+ this.overview_background_group.remove_all_children();
+ this.animation_background_group.remove_all_children();
+
+ this.connections.disconnect_all_for(Main.layoutManager.overviewGroup);
+ if (this.overview_background_group.get_parent())
+ Main.layoutManager.overviewGroup.remove_child(this.overview_background_group);
+
+ this.overview_background_managers.forEach(background_manager => {
+ background_manager._bms_pipeline.destroy();
+ background_manager.destroy();
+ });
+ this.animation_background_managers.forEach(background_manager => {
+ background_manager._bms_pipeline.destroy();
+ background_manager.destroy();
+ });
+ this.overview_background_managers = [];
+ this.animation_background_managers = [];
+ }
+
+ disable() {
+ this._log("removing blur from overview");
+
+ this.remove_background_actors();
+ Main.uiGroup.remove_style_class_name("blurred-overview");
+ OVERVIEW_COMPONENTS_STYLE.forEach(
+ style => Main.uiGroup.remove_style_class_name(style)
+ );
+
+ this.connections.disconnect_all();
+ this.enabled = false;
+ }
+
+ restore_patched_proto() {
+ if (this.proto_patched) {
+ if (this._original_PrepareSwitch)
+ wac_proto._prepareWorkspaceSwitch = this._original_PrepareSwitch;
+ if (this._original_FinishSwitch)
+ wac_proto._finishWorkspaceSwitch = this._original_FinishSwitch;
+
+ this.proto_patched = false;
+ }
+ }
+
+ _log(str) {
+ if (this.settings.DEBUG)
+ console.log(`[Blur my Shell > overview] ${str}`);
+ }
+
+ _warn(str) {
+ console.warn(`[Blur my Shell > overview] ${str}`);
+ }
+};