feat: upgrade packages and set parent for windows on add
This commit is contained in:
@@ -3,6 +3,7 @@ import Gio from 'gi://Gio';
|
||||
import Gtk from 'gi://Gtk';
|
||||
import Gdk from 'gi://Gdk';
|
||||
import { ExtensionPreferences, gettext as _ } from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
|
||||
import {Logger} from "../utils/logger.js";
|
||||
|
||||
export default class MyExtensionPreferences extends ExtensionPreferences {
|
||||
async fillPreferencesWindow(window: Adw.PreferencesWindow) {
|
||||
@@ -153,37 +154,7 @@ export default class MyExtensionPreferences extends ExtensionPreferences {
|
||||
dialog.add_controller(controller);
|
||||
|
||||
controller.connect('key-pressed', (_controller, keyval, keycode, state) => {
|
||||
// Get the key name
|
||||
let keyName = Gdk.keyval_name(keyval);
|
||||
|
||||
// Handle special cases
|
||||
if (keyName === 'Escape') {
|
||||
dialog.response(Gtk.ResponseType.CANCEL);
|
||||
return Gdk.EVENT_STOP;
|
||||
} else if (keyName === 'BackSpace') {
|
||||
// Clear the shortcut
|
||||
settings.set_strv(key, []);
|
||||
shortcutButton.set_label(_("Disabled"));
|
||||
dialog.response(Gtk.ResponseType.OK);
|
||||
return Gdk.EVENT_STOP;
|
||||
}
|
||||
|
||||
// Convert modifier state to keybinding modifiers
|
||||
let modifiers = state & Gtk.accelerator_get_default_mod_mask();
|
||||
|
||||
// Ignore standalone modifier keys
|
||||
if (Gdk.ModifierType.SHIFT_MASK <= keyval && keyval <= Gdk.ModifierType.META_MASK)
|
||||
return Gdk.EVENT_STOP;
|
||||
|
||||
// Create accelerator string
|
||||
let accelerator = Gtk.accelerator_name(keyval, modifiers);
|
||||
if (accelerator) {
|
||||
settings.set_strv(key, [accelerator]);
|
||||
shortcutButton.set_label(accelerator);
|
||||
dialog.response(Gtk.ResponseType.OK);
|
||||
}
|
||||
|
||||
return Gdk.EVENT_STOP;
|
||||
});
|
||||
|
||||
dialog.present();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import {WindowWrapper} from "./window.js";
|
||||
import {Logger} from "./utils/logger.js";
|
||||
import {Logger} from "../utils/logger.js";
|
||||
import Meta from "gi://Meta";
|
||||
import queueEvent from "./utils/events.js";
|
||||
import {Rect} from "./utils/rect.js";
|
||||
import queueEvent from "../utils/events.js";
|
||||
import {Rect} from "../utils/rect.js";
|
||||
|
||||
enum Orientation {
|
||||
HORIZONTAL = 0,
|
||||
@@ -34,6 +34,7 @@ export default class WindowContainer {
|
||||
// Add window to managed windows
|
||||
this._tiledItems.push(winWrap);
|
||||
this._tiledWindowLookup.set(winWrap.getWindowId(), winWrap);
|
||||
winWrap.setParent(this);
|
||||
queueEvent({
|
||||
name: "tiling-windows",
|
||||
callback: () => {
|
||||
@@ -1,7 +1,7 @@
|
||||
import {WindowWrapper} from "./window.js";
|
||||
import {Rect} from "./utils/rect.js";
|
||||
import queueEvent from "./utils/events.js";
|
||||
import {Logger} from "./utils/logger.js";
|
||||
import {Rect} from "../utils/rect.js";
|
||||
import queueEvent from "../utils/events.js";
|
||||
import {Logger} from "../utils/logger.js";
|
||||
import Meta from "gi://Meta";
|
||||
import Mtk from "@girs/mtk-16";
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import Meta from 'gi://Meta';
|
||||
import Clutter from "gi://Clutter";
|
||||
import {IWindowManager} from "./windowManager.js";
|
||||
import {Logger} from "./utils/logger.js";
|
||||
import {Rect} from "./utils/rect.js";
|
||||
import {Logger} from "../utils/logger.js";
|
||||
import {Rect} from "../utils/rect.js";
|
||||
import WindowContainer from "./container.js";
|
||||
|
||||
|
||||
@@ -12,15 +12,14 @@ type WindowWorkspaceChangedHandler = (window: WindowWrapper) => void;
|
||||
export class WindowWrapper {
|
||||
readonly _window: Meta.Window;
|
||||
readonly _windowMinimizedHandler: WindowMinimizedHandler;
|
||||
// readonly _windowWorkspaceChangedHandler: WindowWorkspaceChangedHandler;
|
||||
readonly _signals: number[];
|
||||
readonly _signals: number[] = [];
|
||||
_parent: WindowContainer | null = null;
|
||||
|
||||
constructor(
|
||||
window: Meta.Window,
|
||||
winMinimized: WindowMinimizedHandler
|
||||
) {
|
||||
this._window = window;
|
||||
this._signals = [];
|
||||
this._windowMinimizedHandler = winMinimized;
|
||||
}
|
||||
|
||||
@@ -44,6 +43,17 @@ export class WindowWrapper {
|
||||
return this._window.get_frame_rect();
|
||||
}
|
||||
|
||||
setParent(parent: WindowContainer): void {
|
||||
this._parent = parent;
|
||||
}
|
||||
|
||||
getParent(): WindowContainer | null {
|
||||
if (this._parent == null) {
|
||||
Logger.warn(`Attempting to get parent for window without parent ${JSON.stringify(this)}`);
|
||||
}
|
||||
return this._parent
|
||||
}
|
||||
|
||||
connectWindowSignals(
|
||||
windowManager: IWindowManager,
|
||||
): void {
|
||||
@@ -1,14 +1,11 @@
|
||||
import Meta from "gi://Meta";
|
||||
import Gio from "gi://Gio";
|
||||
import GLib from "gi://GLib";
|
||||
// import Gio from "gi://Gio";
|
||||
// import GLib from "gi://GLib";
|
||||
|
||||
import {WindowWrapper} from './window.js';
|
||||
import * as Main from "resource:///org/gnome/shell/ui/main.js";
|
||||
import Mtk from "@girs/mtk-16";
|
||||
import {Logger} from "./utils/logger.js";
|
||||
import WindowContainer from "./container.js";
|
||||
import {MessageTray} from "@girs/gnome-shell/ui/messageTray";
|
||||
import queueEvent, {QueuedEvent} from "./utils/events.js";
|
||||
// import Mtk from "@girs/mtk-16";
|
||||
import {Logger} from "../utils/logger.js";
|
||||
import Monitor from "./monitor.js";
|
||||
|
||||
|
||||
@@ -76,6 +73,7 @@ export default class WindowManager implements IWindowManager {
|
||||
}),
|
||||
global.display.connect("window-entered-monitor", (display, monitor, window) => {
|
||||
Logger.log("WINDOW HAS ENTERED NEW MONITOR!")
|
||||
// this._moveWindowToMonitor(window, monitor);
|
||||
}),
|
||||
global.display.connect('window-created', (display, window) => {
|
||||
this.handleWindowCreated(display, window);
|
||||
@@ -230,15 +228,33 @@ export default class WindowManager implements IWindowManager {
|
||||
Logger.info("monitor_start and monitor_end", this._grabbedWindowMonitor, window.get_monitor());
|
||||
}
|
||||
|
||||
_moveWindowToMonitor(window: Meta.Window, monitorId: number): void {
|
||||
let wrapped = undefined;
|
||||
for (const monitor of this._monitors.values()) {
|
||||
wrapped = monitor.getWindow(window.get_id());
|
||||
if (wrapped !== undefined) {
|
||||
monitor.removeWindow(wrapped);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (wrapped === undefined) {
|
||||
wrapped = new WindowWrapper(window, this.handleWindowMinimized);
|
||||
wrapped.connectWindowSignals(this);
|
||||
}
|
||||
let new_mon = this._monitors.get(monitorId);
|
||||
new_mon?.addWindow(wrapped)
|
||||
this._tileMonitors();
|
||||
}
|
||||
|
||||
public handleWindowPositionChanged(winWrap: WindowWrapper): void {
|
||||
if (winWrap.getWindowId() === this._grabbedWindowId) {
|
||||
const rect = winWrap.getRect();
|
||||
Logger.log("GRABBED WINDOW POSITION CHANGED", rect.x);
|
||||
// Logger.log("GRABBED WINDOW POSITION CHANGED", rect.x);
|
||||
const [mouseX, mouseY, _] = global.get_pointer();
|
||||
this._monitors.get(winWrap.getMonitor())?.itemDragged(winWrap, mouseX, mouseY);
|
||||
|
||||
// Log or use the coordinates
|
||||
console.log(`Mouse position: X=${mouseX}, Y=${mouseY}`);
|
||||
// console.log(`Mouse position: X=${mouseX}, Y=${mouseY}`);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -327,10 +343,14 @@ export default class WindowManager implements IWindowManager {
|
||||
}
|
||||
|
||||
_addWindowWrapperToMonitor(winWrap: WindowWrapper) {
|
||||
Logger.log("Adding window", JSON.stringify(winWrap));
|
||||
Logger.log("Adding window raw", JSON.stringify(winWrap.getWindow()));
|
||||
Logger.log("Adding window raw", JSON.stringify(winWrap.getWindow().minimized));
|
||||
if (winWrap.getWindow().minimized) {
|
||||
this._minimizedItems.set(winWrap.getWindow().get_id(), winWrap);
|
||||
} else {
|
||||
this._monitors.get(winWrap.getWindow().get_monitor())?.addWindow(winWrap)
|
||||
}
|
||||
this._monitors.get(winWrap.getWindow().get_monitor())?.addWindow(winWrap)
|
||||
}
|
||||
|
||||
_tileMonitors(): void {
|
||||
Reference in New Issue
Block a user