From c6bedea2c396f04626c4ede8371b410c404195ee Mon Sep 17 00:00:00 2001 From: tom Date: Mon, 1 Jul 2024 10:12:02 +0100 Subject: [PATCH] CHANGE: working window add and remove -> error when removing set is not updated --- .gitignore | 1 + extension.ts | 95 +++++++++++++++----------------------- floatbar.zip | Bin 3665 -> 0 bytes schemas/gschemas.compiled | Bin 357 -> 0 bytes 4 files changed, 37 insertions(+), 59 deletions(-) delete mode 100644 floatbar.zip delete mode 100644 schemas/gschemas.compiled diff --git a/.gitignore b/.gitignore index 8c1d8aa..6eedd59 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ **node_modules package-lock.json +floatbar.zip diff --git a/extension.ts b/extension.ts index 14f1825..441aff5 100644 --- a/extension.ts +++ b/extension.ts @@ -1,14 +1,9 @@ -import GLib from "gi://GLib"; import Gio from "gi://Gio"; import Meta from "gi://Meta"; -import St from "gi://St"; -import Shell from "gi://Shell"; -import * as Main from "resource:///org/gnome/shell/ui/main.js"; import { Extension } from "resource:///org/gnome/shell/extensions/extension.js"; -import { Button as PanelMenuButton } from "resource:///org/gnome/shell/ui/panelMenu.js"; import { EventEmitter } from "resource:///org/gnome/shell/misc/signals.js"; -import { SystemIndicator, QuickMenuToggle } from "resource:///org/gnome/shell/ui/quickSettings.js"; -import GObject from "gi://GObject"; +import * as Main from "resource:///org/gnome/shell/ui/main.js"; +import { Button as PanelMenuButton } from "resource:///org/gnome/shell/ui/panelMenu.js"; export default class MyExtension extends Extension { button?: PanelMenuButton; @@ -16,10 +11,17 @@ export default class MyExtension extends Extension { float: boolean = false; updateFloat: EventEmitter = new EventEmitter(); - _actorSignalIds: Map = new Map(); - _windowSignalIds: Map = new Map(); + _actorSignalIds?: Map; + _windowSignalIds?: Map; + + _workspace?: Meta.Workspace; enable() { + this._workspace = global.workspaceManager.get_active_workspace(); + + this._windowSignalIds = new Map(); + this._actorSignalIds = new Map(); + // this.button = new ToggleButton(this); // Main.panel.addToStatusArea(this.uuid, this.button); @@ -31,45 +33,55 @@ export default class MyExtension extends Extension { this._actorSignalIds.set(Main.sessionMode, [Main.sessionMode.connect("updated", () => this._updateFloating.bind(this))]); for (const window_actor of global.get_window_actors()) { - this._onWindowActorAdded(window_actor); + this._onWindowActorAdded(window_actor.get_parent(), window_actor); } - this._actorSignalIds.set(global.window_group, [ - global.window_group.connect("actor-added", this._onWindowActorAdded.bind(this)), - global.window_group.connect("actor-removed", this._onWindowActorRemoved.bind(this)), - ]); + this._workspace.connect("window-added", (workspace, window) => { + setTimeout(() => { + console.log("window-added ", window.title); + this._onWindowActorAdded.bind(this)(workspace, window.get_compositor_private()); + }, 10); + }); + this._workspace.connect("window-removed", (workspace, window) => { + setTimeout(() => { + console.log("window-removed ", window.title); + this._onWindowActorRemoved.bind(this)(workspace, window.get_compositor_private()); + }, 10); + }); this._actorSignalIds.set(global.window_manager, [global.window_manager.connect("switch-workspace", this._updateFloating.bind(this))]); } disable() { for (const actorSignalIds of [this._actorSignalIds, this._windowSignalIds]) { - for (const [actor, signalIds] of actorSignalIds) { + for (const [actor, signalIds] of actorSignalIds!) { for (const signalId of signalIds) { actor.disconnect(signalId); } } } - this._actorSignalIds.clear(); - this._windowSignalIds.clear(); + this._actorSignalIds?.clear(); + this._windowSignalIds?.clear(); this._setFloat(false); } - _onWindowActorAdded(metaWindowActor: Meta.WindowActor) { - this._windowSignalIds.set(metaWindowActor, [ + _onWindowActorAdded(container: any, metaWindowActor: Meta.WindowActor) { + if (metaWindowActor.metaWindow.skipTaskbar) return; + if (this._windowSignalIds === undefined) return; + this._windowSignalIds.set(metaWindowActor.metaWindow.title, [ metaWindowActor.connect("notify::allocation", this._updateFloating.bind(this)), metaWindowActor.connect("notify::visible", this._updateFloating.bind(this)), - metaWindowActor.connect("destroy", () => this._onWindowActorRemoved.bind(this, metaWindowActor)), ]); } - _onWindowActorRemoved(metaWindowActor: Meta.WindowActor) { - for (const signalId of this._windowSignalIds.get(metaWindowActor)) { + _onWindowActorRemoved(container: any, metaWindowActor: Meta.WindowActor) { + if (this._windowSignalIds === undefined) return; + this._updateFloating(); + for (const signalId of this._windowSignalIds.get(metaWindowActor.metaWindow.title)) { metaWindowActor.disconnect(signalId); } - this._windowSignalIds.delete(metaWindowActor); - this._updateFloating(); + this._windowSignalIds.delete("test"); } _updateFloating() { @@ -78,12 +90,6 @@ export default class MyExtension extends Extension { const windows = active_workspace.list_windows().filter((metaWindow) => { return !metaWindow.skip_taskbar && metaWindow.showing_on_its_workspace() && !metaWindow.is_hidden(); }); - for (let win of windows) { - console.log("================== Window ================"); - console.log(win.title); - console.log(win.maximizedHorizontally); //switch - } - const maximized = windows.some((metaWindow) => { return metaWindow.maximizedHorizontally; }); @@ -97,32 +103,3 @@ export default class MyExtension extends Extension { Main.panel.remove_style_class_name(float ? "solid" : "floating"); } } - -const ToggleButton = GObject.registerClass( - class ToggleButton extends PanelMenuButton { - _extension: MyExtension; - constructor(extension: MyExtension) { - super(0.0, extension.metadata.name, false); - let icon = new St.Icon({ - icon_name: "face-laugh-symbolic", - style_class: "system-status-icon", - }); - - this._extension = extension; - - this.add_child(icon); - - this.connect("button-press-event", () => this.toggleFloat()); - this.connect("touch-event", () => this.toggleFloat()); - } - - toggleFloat() { - this._extension.float = !this._extension.float; - this._extension.updateFloat.emit("update"); - this._extension._updateFloating(); - // for (const window of global.get_window_actors()) { - // console.log(window.get_parent()); - // } - } - } -); diff --git a/floatbar.zip b/floatbar.zip deleted file mode 100644 index 0eda8a0b4df2caaaa99bd6f06c4acd981a6b7414..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3665 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 H1b}}5EWPN3 diff --git a/schemas/gschemas.compiled b/schemas/gschemas.compiled deleted file mode 100644 index 439a133fa0d8e12dc79fe2f90ca00afd6e8461f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmZ<{ODxJv%qwAl0tp};0by$}!32Rct0)7*e;|O!`GD2L0L6t@t>y2A!z1&J&I1i|jL4yTE0s%-LGZY`F zt>XsS2{MnBp^Sk8C}{%3Ft>o%3=BSCF&iLzDeEC&kPwK?3sfHfq$7ZM_QOJckT{49 zGA98@rvkBFL1IY;$Os_N2Rc?C>{xxUWA)+AE7nJLtUd!nG01(OuqjAPNy*Gh*Uik! bODzH!0t6f&LL*Z%Ehj$_6sU|08cCV}TK7s?