summaryrefslogtreecommitdiff
path: root/raveos-gnome-theme/theme-data/extensions/installed/blur-my-shell@aunetx/conveniences/paint_signals.js
diff options
context:
space:
mode:
authorNippy <nippy@Nippy-Mac-mini.local>2026-10-09 17:23:53 +0200
committerNippy <nippy@Nippy-Mac-mini.local>2026-10-09 17:23:53 +0200
commit9d5be1660d8f74038ebed3d74fdbc809e43787ae (patch)
tree4cb46c3765be87ca4c5219f2f714425d7dfddb56 /raveos-gnome-theme/theme-data/extensions/installed/blur-my-shell@aunetx/conveniences/paint_signals.js
parentdeb4b8a9c407832c35100a643bd7a592589c9679 (diff)
downloadRaveOS-PKGBUILD-9d5be1660d8f74038ebed3d74fdbc809e43787ae.tar.gz
RaveOS-PKGBUILD-9d5be1660d8f74038ebed3d74fdbc809e43787ae.zip
gnome fix
Diffstat (limited to 'raveos-gnome-theme/theme-data/extensions/installed/blur-my-shell@aunetx/conveniences/paint_signals.js')
-rw-r--r--raveos-gnome-theme/theme-data/extensions/installed/blur-my-shell@aunetx/conveniences/paint_signals.js101
1 files changed, 37 insertions, 64 deletions
diff --git a/raveos-gnome-theme/theme-data/extensions/installed/blur-my-shell@aunetx/conveniences/paint_signals.js b/raveos-gnome-theme/theme-data/extensions/installed/blur-my-shell@aunetx/conveniences/paint_signals.js
index 5fbfee4..10a6d26 100644
--- a/raveos-gnome-theme/theme-data/extensions/installed/blur-my-shell@aunetx/conveniences/paint_signals.js
+++ b/raveos-gnome-theme/theme-data/extensions/installed/blur-my-shell@aunetx/conveniences/paint_signals.js
@@ -1,91 +1,64 @@
import GObject from 'gi://GObject';
import Clutter from 'gi://Clutter';
+const PAINTS_BETWEEN_REPAINTS = 2;
export const PaintSignals = class PaintSignals {
constructor(connections) {
- this.buffer = [];
+ this.entries = new Map();
this.connections = connections;
}
connect(actor, blur_effect) {
- let paint_effect = new EmitPaintSignal();
- let infos = {
- actor: actor,
- paint_effect: paint_effect
- };
- let counter = 0;
+ this.disconnect_all_for_actor(actor);
- actor.add_effect(paint_effect);
- this.connections.connect(paint_effect, 'update-blur', () => {
- try {
- // checking if blur_effect.queue_repaint() has been recently called
- if (counter === 0) {
- counter = 2;
- blur_effect.queue_repaint();
- }
- else counter--;
- } catch (e) { }
- });
+ let paints_to_skip = 0;
+ const paint_effect = new PaintCallbackEffect();
+ paint_effect.set_callback(() => {
+ if (paints_to_skip > 0) {
+ paints_to_skip--;
+ return;
+ }
- // remove the actor from buffer when it is destroyed
- if (
- actor.connect &&
- (
- !(actor instanceof GObject.Object) ||
- GObject.signal_lookup('destroy', actor)
- )
- )
- this.connections.connect(actor, 'destroy', () => {
- const immutable_buffer = [...this.buffer];
- immutable_buffer.forEach(infos => {
- if (infos.actor === actor) {
- // remove from buffer
- let index = this.buffer.indexOf(infos);
- this.buffer.splice(index, 1);
- }
- });
- });
+ paints_to_skip = PAINTS_BETWEEN_REPAINTS;
+ blur_effect.queue_repaint();
+ });
- this.buffer.push(infos);
+ actor.add_effect(paint_effect);
+ const destroy_id = this.connections.connect(actor, 'destroy', () => {
+ paint_effect.set_callback(null);
+ this.entries.delete(actor);
+ });
+ this.entries.set(actor, { paint_effect, destroy_id });
}
disconnect_all_for_actor(actor) {
- const immutable_buffer = [...this.buffer];
- immutable_buffer.forEach(infos => {
- if (infos.actor === actor) {
- this.connections.disconnect_all_for(infos.paint_effect);
- infos.actor.remove_effect(infos.paint_effect);
+ const entry = this.entries.get(actor);
+ if (!entry)
+ return;
- // remove from buffer
- let index = this.buffer.indexOf(infos);
- this.buffer.splice(index, 1);
- }
- });
+ this.entries.delete(actor);
+ entry.paint_effect.set_callback(null);
+ this.connections.disconnect(actor, entry.destroy_id);
+ actor.remove_effect(entry.paint_effect);
}
disconnect_all() {
- this.buffer.forEach(infos => {
- this.connections.disconnect_all_for(infos.paint_effect);
- infos.actor.remove_effect(infos.paint_effect);
- });
-
- this.buffer = [];
+ for (const actor of [...this.entries.keys()])
+ this.disconnect_all_for_actor(actor);
}
};
-export const EmitPaintSignal = GObject.registerClass({
- GTypeName: 'EmitPaintSignal',
- Signals: {
- 'update-blur': {
- param_types: []
- },
- }
-},
- class EmitPaintSignal extends Clutter.Effect {
+const PaintCallbackEffect = GObject.registerClass(
+ { GTypeName: 'BmsPaintCallbackEffect' },
+ class PaintCallbackEffect extends Clutter.Effect {
+ set_callback(callback) {
+ this._callback = callback;
+ }
+
vfunc_paint(node, paint_context, paint_flags) {
- this.emit("update-blur");
+ this._callback();
super.vfunc_paint(node, paint_context, paint_flags);
}
}
-); \ No newline at end of file
+);