ADD: working button to control boolean float
This commit is contained in:
11
Makefile
11
Makefile
@@ -1,4 +1,4 @@
|
|||||||
NAME=floarbar
|
NAME=floatbar
|
||||||
DOMAIN=tomtroeger.de
|
DOMAIN=tomtroeger.de
|
||||||
|
|
||||||
.PHONY: all pack install clean
|
.PHONY: all pack install clean
|
||||||
@@ -27,4 +27,11 @@ install: $(NAME).zip
|
|||||||
@mv dist ~/.local/share/gnome-shell/extensions/$(NAME)@$(DOMAIN)
|
@mv dist ~/.local/share/gnome-shell/extensions/$(NAME)@$(DOMAIN)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@rm -rf dist node_modules $(NAME).zip
|
@rm -rf dist node_modules $(NAME).zip
|
||||||
|
|
||||||
|
test:
|
||||||
|
@dbus-run-session -- gnome-shell --nested --wayland
|
||||||
|
|
||||||
|
full:
|
||||||
|
@make install
|
||||||
|
@make test
|
||||||
1
ambient.d.ts
vendored
1
ambient.d.ts
vendored
@@ -2,3 +2,4 @@ import "@girs/gjs";
|
|||||||
import "@girs/gjs/dom";
|
import "@girs/gjs/dom";
|
||||||
import "@girs/gnome-shell/ambient";
|
import "@girs/gnome-shell/ambient";
|
||||||
import "@girs/gnome-shell/extensions/global";
|
import "@girs/gnome-shell/extensions/global";
|
||||||
|
import "@girs/gnome-shell/ui/";
|
||||||
|
|||||||
76
extension.ts
76
extension.ts
@@ -1,20 +1,86 @@
|
|||||||
import GLib from "gi://GLib";
|
import GLib from "gi://GLib";
|
||||||
import Gio from "gi://Gio";
|
import Gio from "gi://Gio";
|
||||||
import Meta from "gi://Meta";
|
import Meta from "gi://Meta";
|
||||||
|
import St from "gi://St";
|
||||||
import Shell from "gi://Shell";
|
import Shell from "gi://Shell";
|
||||||
import * as Main from "resource:///org/gnome/shell/ui/main.js";
|
import * as Main from "resource:///org/gnome/shell/ui/main.js";
|
||||||
import { Extension } from "resource:///org/gnome/shell/extensions/extension.js";
|
import { Extension } from "resource:///org/gnome/shell/extensions/extension.js";
|
||||||
|
import { SystemIndicator, QuickMenuToggle } from "resource:///org/gnome/shell/ui/quickSettings.js";
|
||||||
|
import GObject from "gi://GObject";
|
||||||
|
import { Button as PanelMenuButton } from "resource:///org/gnome/shell/ui/panelMenu.js";
|
||||||
|
|
||||||
|
const MyIndicator = GObject.registerClass(
|
||||||
|
class MyIndicator extends SystemIndicator {
|
||||||
|
_indicator: any;
|
||||||
|
_settings?: Gio.Settings;
|
||||||
|
constructor(extensioObject: Extension) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this._indicator = this._addIndicator();
|
||||||
|
this._indicator.icon_name = "selection-mode-symbolic";
|
||||||
|
|
||||||
|
this._settings = extensioObject.getSettings();
|
||||||
|
this._settings!.bind("float", this._indicator, "active", Gio.SettingsBindFlags.DEFAULT);
|
||||||
|
|
||||||
|
this.quickSettingsItems.push(this._indicator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const ExampleToggle = GObject.registerClass(
|
||||||
|
class ExampleToggle extends QuickMenuToggle {
|
||||||
|
_settings: Gio.Settings;
|
||||||
|
constructor(extensionObject: Extension) {
|
||||||
|
super({
|
||||||
|
title: "Float",
|
||||||
|
subtitle: "Floating Window",
|
||||||
|
iconName: "selection-mode-symbolic",
|
||||||
|
toggleMode: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
this._settings = extensionObject.getSettings();
|
||||||
|
this._settings.bind("float", this, "checked", Gio.SettingsBindFlags.DEFAULT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
export default class MyExtension extends Extension {
|
export default class MyExtension extends Extension {
|
||||||
gsettings?: Gio.Settings;
|
_button?: PanelMenuButton;
|
||||||
animationsEnabled: boolean = true;
|
indicator?: SystemIndicator;
|
||||||
|
settings?: Gio.Settings;
|
||||||
|
|
||||||
enable() {
|
enable() {
|
||||||
this.gsettings = this.getSettings();
|
const icon = new St.Icon({
|
||||||
this.animationsEnabled = this.gsettings!.get_value("padding-inner").deepUnpack() ?? 8;
|
icon_name: "face-laugh-symbolic",
|
||||||
|
style_class: "system-status-icon",
|
||||||
|
});
|
||||||
|
|
||||||
|
this._button = new PanelMenuButton(0.0, this.metadata.name, false);
|
||||||
|
this._button.add_child(icon);
|
||||||
|
this.settings = this.getSettings();
|
||||||
|
|
||||||
|
this._button.connect("button-press-event", () => this.toggleFloat());
|
||||||
|
this._button.connect("touch-event", () => this.toggleFloat());
|
||||||
|
|
||||||
|
// this._button.addChild();
|
||||||
|
// this.indicator = new MyIndicator(this);
|
||||||
|
// this.indicator.quickSettingsItems.push(new ExampleToggle(this));
|
||||||
|
|
||||||
|
// Main.panel.statusArea.quickSettings.addExternalIndicator(this.indicator);
|
||||||
|
Main.panel.addToStatusArea(this.uuid, this._button);
|
||||||
|
}
|
||||||
|
|
||||||
|
toggleFloat() {
|
||||||
|
let bool = this.getSettings().get_boolean("float");
|
||||||
|
console.log(bool);
|
||||||
|
this.getSettings().set_boolean("float", !bool);
|
||||||
}
|
}
|
||||||
|
|
||||||
disable() {
|
disable() {
|
||||||
this.gsettings = undefined;
|
this._button?.destroy();
|
||||||
|
this._button = undefined;
|
||||||
|
// this.indicator?.quickSettingsItems.forEach((item) => item.destroy());
|
||||||
|
// this.indicator?.destroy();
|
||||||
|
// this.indicator = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
floatbar.zip
Normal file
BIN
floatbar.zip
Normal file
Binary file not shown.
4
prefs.ts
4
prefs.ts
@@ -22,7 +22,7 @@ export default class GnomeRectanglePreferences extends ExtensionPreferences {
|
|||||||
|
|
||||||
const animationEnabled = new Adw.SwitchRow({
|
const animationEnabled = new Adw.SwitchRow({
|
||||||
title: _("Enabled"),
|
title: _("Enabled"),
|
||||||
subtitle: _("Wether to animate windows"),
|
subtitle: _("Floating Window"),
|
||||||
});
|
});
|
||||||
animationGroup.add(animationEnabled);
|
animationGroup.add(animationEnabled);
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ export default class GnomeRectanglePreferences extends ExtensionPreferences {
|
|||||||
|
|
||||||
window.add(page);
|
window.add(page);
|
||||||
|
|
||||||
this._settings!.bind("animate", animationEnabled, "active", Gio.SettingsBindFlags.DEFAULT);
|
this._settings!.bind("float", animationEnabled, "active", Gio.SettingsBindFlags.DEFAULT);
|
||||||
this._settings!.bind("padding-inner", paddingInner, "value", Gio.SettingsBindFlags.DEFAULT);
|
this._settings!.bind("padding-inner", paddingInner, "value", Gio.SettingsBindFlags.DEFAULT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
schemas/gschemas.compiled
Normal file
BIN
schemas/gschemas.compiled
Normal file
Binary file not shown.
15
schemas/org.gnome.shell.extensions.floatbar.gschema.xml
Normal file
15
schemas/org.gnome.shell.extensions.floatbar.gschema.xml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<schemalist>
|
||||||
|
<schema id="org.gnome.shell.extensions.my-extension" path="/org/gnome/shell/extensions/my-extension/">
|
||||||
|
<key name="padding-inner" type="i">
|
||||||
|
<default>8</default>
|
||||||
|
<summary>Inner padding</summary>
|
||||||
|
<description>Padding between windows</description>
|
||||||
|
</key>
|
||||||
|
<key name="float" type="b">
|
||||||
|
<default>true</default>
|
||||||
|
<summary>Floating</summary>
|
||||||
|
<description>Whether the topbar floats or not</description>
|
||||||
|
</key>
|
||||||
|
</schema>
|
||||||
|
</schemalist>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"module": "NodeNext",
|
"module": "ES2022",
|
||||||
"moduleResolution": "NodeNext",
|
"moduleResolution": "Bundler",
|
||||||
"outDir": "./dist",
|
"outDir": "./dist",
|
||||||
"sourceMap": false,
|
"sourceMap": false,
|
||||||
"strict": true,
|
"strict": true,
|
||||||
|
|||||||
Reference in New Issue
Block a user