From 2308549cb3a01abb942c7ba14830ed504d5f7b38 Mon Sep 17 00:00:00 2001 From: Domenico Ferraro Date: Sun, 3 Nov 2024 15:56:29 +0100 Subject: [PATCH] refactor: ensure components shared between extension.js and prefs.js imports only the right libraries --- esbuild.mjs | 28 +++++++++++++------ src/components/editor/editableTilePreview.ts | 2 +- src/components/editor/editorDialog.ts | 2 +- src/components/editor/hoverLine.ts | 2 +- src/components/editor/layoutEditor.ts | 2 +- src/components/editor/slider.ts | 2 +- src/components/layout/LayoutWidget.ts | 2 +- src/components/layout/Tile.ts | 2 +- src/components/layout/TileUtils.ts | 2 +- src/components/snapassist/snapAssist.ts | 2 +- src/components/snapassist/snapAssistLayout.ts | 2 +- src/components/snapassist/snapAssistTile.ts | 2 +- .../snapassist/snapAssistTileButton.ts | 2 +- src/components/tilepreview/blurTilePreview.ts | 2 +- .../tilepreview/selectionTilePreview.ts | 2 +- src/components/tilepreview/tilePreview.ts | 2 +- .../tilingsystem/edgeTilingManager.ts | 2 +- src/components/tilingsystem/extendedWindow.ts | 2 +- src/components/tilingsystem/resizeManager.ts | 2 +- src/components/tilingsystem/tilingLayout.ts | 2 +- src/components/tilingsystem/tilingManager.ts | 2 +- src/components/tilingsystem/touchPointer.ts | 2 +- src/components/windowBorderManager.ts | 6 ++-- .../windowManager/tilingShellWindowManager.ts | 2 +- src/components/window_menu/layoutIcon.ts | 2 +- .../window_menu/layoutTileButtons.ts | 2 +- .../window_menu/overriddenWindowMenu.ts | 2 +- src/dbus.ts | 2 +- src/extension.ts | 2 +- src/{gi.ts => gi.ext.ts} | 4 +-- src/gi.prefs.ts | 6 ++++ src/gi.shared.ts | 9 ++++++ src/indicator/defaultMenu.ts | 2 +- src/indicator/editingMenu.ts | 2 +- src/indicator/indicator.ts | 2 +- src/indicator/layoutButton.ts | 2 +- src/indicator/utils.ts | 2 +- src/keybindings.ts | 2 +- src/prefs.gi.ts | 6 ---- src/prefs.ts | 4 +-- src/settings/settings.ts | 2 +- src/settings/settingsExport.ts | 2 +- src/settings/settingsOverride.ts | 2 +- src/utils/gjs.ts | 2 +- src/utils/globalState.ts | 2 +- src/utils/signalHandling.ts | 8 ++++-- src/utils/ui.ts | 2 +- 47 files changed, 86 insertions(+), 63 deletions(-) rename src/{gi.ts => gi.ext.ts} (69%) create mode 100644 src/gi.prefs.ts create mode 100644 src/gi.shared.ts delete mode 100644 src/prefs.gi.ts diff --git a/esbuild.mjs b/esbuild.mjs index 4bf8c77..f646039 100644 --- a/esbuild.mjs +++ b/esbuild.mjs @@ -124,17 +124,29 @@ build({ target: 'firefox78', platform: 'node', format: 'esm', - external: ['gi://*', 'resource://*', 'system', 'gettext', 'cairo', '@girs*'], - plugins: [sassPlugin()]/*, - banner: { - js: banner, - }, - footer: { - js: footer - }*/ + external: ['gi://*', 'resource://*'], + plugins: [sassPlugin()], }).then(() => { fs.renameSync(path.resolve(distDir, "extension.css"), path.resolve(distDir, "stylesheet.css")); fs.cpSync(resourcesDir, distDir, { recursive: true }); + // warn if you imported GTK libraries in GNOME Shell (Gdk, Gtk or Adw) + const extensionJSContent = fs.readFileSync(`${distDir}/extension.js`).toString().split('\n'); + ['Gdk', 'Gtk', 'Adw'].forEach(moduleName => { + for (let lineNumber = 0; lineNumber < extensionJSContent.length; lineNumber++) { + if (extensionJSContent[lineNumber].indexOf(`import ${moduleName}`) >= 0) { + console.error(`⚠️ Error: "${moduleName}" was imported in extension.js at line ${lineNumber}`); + } + } + }); + // warn if you imported GNOME Shell libraries in Preferences (Clutter, Meta, St or Shell) + const prefsJSContent = fs.readFileSync(`${distDir}/prefs.js`).toString().split('\n'); + ['Clutter', 'Meta', 'Mtk', 'St', 'Shell'].forEach(moduleName => { + for (let lineNumber = 0; lineNumber < prefsJSContent.length; lineNumber++) { + if (prefsJSContent[lineNumber].indexOf(`import ${moduleName}`) >= 0) { + console.error(`⚠️ Error: "${moduleName}" was imported in prefs.js at line ${lineNumber}`); + } + } + }); }).then(async () => { console.log(" 💡", "Generating legacy version..."); // duplicate the build into distLegacyDir diff --git a/src/components/editor/editableTilePreview.ts b/src/components/editor/editableTilePreview.ts index c13a6d1..fa0e7b4 100644 --- a/src/components/editor/editableTilePreview.ts +++ b/src/components/editor/editableTilePreview.ts @@ -1,5 +1,5 @@ import TilePreview from '../tilepreview/tilePreview'; -import { GObject, St, Clutter, Mtk } from '@gi'; +import { GObject, St, Clutter, Mtk } from '@gi.ext'; import Tile from '../layout/Tile'; import Slider from './slider'; import TileUtils from '../layout/TileUtils'; diff --git a/src/components/editor/editorDialog.ts b/src/components/editor/editorDialog.ts index 9b067ae..bfa1e0d 100644 --- a/src/components/editor/editorDialog.ts +++ b/src/components/editor/editorDialog.ts @@ -1,6 +1,6 @@ import Settings from '@settings/settings'; import { registerGObjectClass } from '@/utils/gjs'; -import { St, Clutter, Gio } from '@gi'; +import { St, Clutter, Gio } from '@gi.ext'; import LayoutButton from '../../indicator/layoutButton'; import GlobalState from '@utils/globalState'; import Layout from '@/components/layout/Layout'; diff --git a/src/components/editor/hoverLine.ts b/src/components/editor/hoverLine.ts index db3f8a7..6ff601f 100644 --- a/src/components/editor/hoverLine.ts +++ b/src/components/editor/hoverLine.ts @@ -1,5 +1,5 @@ import { registerGObjectClass } from '@/utils/gjs'; -import { GLib, St, Clutter, Shell } from '@gi'; +import { GLib, St, Clutter, Shell } from '@gi.ext'; import EditableTilePreview from './editableTilePreview'; import { getScalingFactorOf } from '@utils/ui'; diff --git a/src/components/editor/layoutEditor.ts b/src/components/editor/layoutEditor.ts index 30e3e21..df1f63c 100644 --- a/src/components/editor/layoutEditor.ts +++ b/src/components/editor/layoutEditor.ts @@ -1,5 +1,5 @@ import { registerGObjectClass } from '@/utils/gjs'; -import { GObject, St, Clutter, Mtk, Meta, Shell } from '@gi'; +import { GObject, St, Clutter, Mtk, Meta, Shell } from '@gi.ext'; import Settings from '@settings/settings'; import * as Main from 'resource:///org/gnome/shell/ui/main.js'; import { diff --git a/src/components/editor/slider.ts b/src/components/editor/slider.ts index 0c0ead9..de27179 100644 --- a/src/components/editor/slider.ts +++ b/src/components/editor/slider.ts @@ -1,5 +1,5 @@ import { registerGObjectClass } from '@/utils/gjs'; -import { GObject, St, Clutter, Mtk, Meta } from '@gi'; +import { GObject, St, Clutter, Mtk, Meta } from '@gi.ext'; import EditableTilePreview from './editableTilePreview'; import { getEventCoords, getScalingFactorOf } from '@utils/ui'; diff --git a/src/components/layout/LayoutWidget.ts b/src/components/layout/LayoutWidget.ts index db52eaf..9b6eaf9 100644 --- a/src/components/layout/LayoutWidget.ts +++ b/src/components/layout/LayoutWidget.ts @@ -1,4 +1,4 @@ -import { St, Clutter, Mtk } from '@gi'; +import { St, Clutter, Mtk } from '@gi.ext'; import TilePreview from '../tilepreview/tilePreview'; import { buildRectangle, diff --git a/src/components/layout/Tile.ts b/src/components/layout/Tile.ts index a6fa5a7..76264c6 100644 --- a/src/components/layout/Tile.ts +++ b/src/components/layout/Tile.ts @@ -1,4 +1,4 @@ -import { GObject } from '@prefs.gi'; // prefs.gi because for transitivity this is also declared in prefs.js +import { GObject } from '@gi.shared'; // gi.shared because it is imported by Layout which is also imported in prefs.ts export default class Tile { // @ts-expect-error "GObject has TYPE_JSOBJECT" diff --git a/src/components/layout/TileUtils.ts b/src/components/layout/TileUtils.ts index c471225..369ab20 100644 --- a/src/components/layout/TileUtils.ts +++ b/src/components/layout/TileUtils.ts @@ -1,4 +1,4 @@ -import { Mtk } from '@gi'; +import { Mtk } from '@gi.ext'; import Tile from './Tile'; import { buildRectangle } from '@utils/ui'; diff --git a/src/components/snapassist/snapAssist.ts b/src/components/snapassist/snapAssist.ts index 806082d..758352e 100644 --- a/src/components/snapassist/snapAssist.ts +++ b/src/components/snapassist/snapAssist.ts @@ -1,5 +1,5 @@ import { registerGObjectClass } from '@/utils/gjs'; -import { GObject, St, Clutter, Mtk, Meta, Gio } from '@gi'; +import { GObject, St, Clutter, Mtk, Meta, Gio } from '@gi.ext'; import SnapAssistTile from './snapAssistTile'; import SnapAssistLayout from './snapAssistLayout'; import Layout from '../layout/Layout'; diff --git a/src/components/snapassist/snapAssistLayout.ts b/src/components/snapassist/snapAssistLayout.ts index a399d20..886ac05 100644 --- a/src/components/snapassist/snapAssistLayout.ts +++ b/src/components/snapassist/snapAssistLayout.ts @@ -1,6 +1,6 @@ import { registerGObjectClass } from '@/utils/gjs'; import { buildRectangle, getScalingFactorOf } from '@/utils/ui'; -import { Clutter, Mtk } from '@gi'; +import { Clutter, Mtk } from '@gi.ext'; import LayoutWidget from '../layout/LayoutWidget'; import Layout from '../layout/Layout'; import Tile from '../layout/Tile'; diff --git a/src/components/snapassist/snapAssistTile.ts b/src/components/snapassist/snapAssistTile.ts index 94e0a37..b4bde3b 100644 --- a/src/components/snapassist/snapAssistTile.ts +++ b/src/components/snapassist/snapAssistTile.ts @@ -1,7 +1,7 @@ import { registerGObjectClass } from '@/utils/gjs'; import TilePreview from '../tilepreview/tilePreview'; import Tile from '../layout/Tile'; -import { St, Clutter, Mtk } from '@gi'; +import { St, Clutter, Mtk } from '@gi.ext'; import { getScalingFactorOf } from '@utils/ui'; @registerGObjectClass diff --git a/src/components/snapassist/snapAssistTileButton.ts b/src/components/snapassist/snapAssistTileButton.ts index 89b4214..9bde18a 100644 --- a/src/components/snapassist/snapAssistTileButton.ts +++ b/src/components/snapassist/snapAssistTileButton.ts @@ -1,6 +1,6 @@ import Tile from '@components/layout/Tile'; import { registerGObjectClass } from '@utils/gjs'; -import { St, Clutter, Mtk } from '@gi'; +import { St, Clutter, Mtk } from '@gi.ext'; import SnapAssistTile from '@components/snapassist/snapAssistTile'; @registerGObjectClass diff --git a/src/components/tilepreview/blurTilePreview.ts b/src/components/tilepreview/blurTilePreview.ts index 6d5c126..18ba423 100644 --- a/src/components/tilepreview/blurTilePreview.ts +++ b/src/components/tilepreview/blurTilePreview.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ import { registerGObjectClass } from '@/utils/gjs'; -import { Shell } from '@gi'; +import { Shell } from '@gi.ext'; import TilePreview from './tilePreview'; @registerGObjectClass diff --git a/src/components/tilepreview/selectionTilePreview.ts b/src/components/tilepreview/selectionTilePreview.ts index 6b76a96..1539fb9 100644 --- a/src/components/tilepreview/selectionTilePreview.ts +++ b/src/components/tilepreview/selectionTilePreview.ts @@ -1,5 +1,5 @@ import { registerGObjectClass } from '@/utils/gjs'; -import { GObject, St, Clutter, Gio } from '@gi'; +import { GObject, St, Clutter, Gio } from '@gi.ext'; import TilePreview from './tilePreview'; import Settings from '@settings/settings'; import { buildBlurEffect } from '@utils/ui'; diff --git a/src/components/tilepreview/tilePreview.ts b/src/components/tilepreview/tilePreview.ts index f33bf6a..189028e 100644 --- a/src/components/tilepreview/tilePreview.ts +++ b/src/components/tilepreview/tilePreview.ts @@ -1,4 +1,4 @@ -import { St, Clutter, Mtk, Meta } from '@gi'; +import { St, Clutter, Mtk, Meta } from '@gi.ext'; import { registerGObjectClass } from '@/utils/gjs'; import { buildRectangle, getScalingFactorOf } from '@utils/ui'; import GlobalState from '@utils/globalState'; diff --git a/src/components/tilingsystem/edgeTilingManager.ts b/src/components/tilingsystem/edgeTilingManager.ts index 1a854c1..496a4ed 100644 --- a/src/components/tilingsystem/edgeTilingManager.ts +++ b/src/components/tilingsystem/edgeTilingManager.ts @@ -3,7 +3,7 @@ import { isPointInsideRect, clampPointInsideRect, } from '@utils/ui'; -import { GObject, Mtk } from '@gi'; +import { GObject, Mtk } from '@gi.ext'; import Settings from '@settings/settings'; import { registerGObjectClass } from '@utils/gjs'; diff --git a/src/components/tilingsystem/extendedWindow.ts b/src/components/tilingsystem/extendedWindow.ts index 41f0dfd..aa38c3c 100644 --- a/src/components/tilingsystem/extendedWindow.ts +++ b/src/components/tilingsystem/extendedWindow.ts @@ -1,5 +1,5 @@ import Tile from '@components/layout/Tile'; -import { Mtk, Meta } from '@gi'; +import { Mtk, Meta } from '@gi.ext'; interface ExtendedWindow extends Meta.Window { originalSize: Mtk.Rectangle | undefined; diff --git a/src/components/tilingsystem/resizeManager.ts b/src/components/tilingsystem/resizeManager.ts index b6fdb7b..6533b28 100644 --- a/src/components/tilingsystem/resizeManager.ts +++ b/src/components/tilingsystem/resizeManager.ts @@ -1,4 +1,4 @@ -import { St, Mtk, Meta } from '@gi'; +import { St, Mtk, Meta } from '@gi.ext'; import SignalHandling from '@utils/signalHandling'; import Settings from '@settings/settings'; import ExtendedWindow from './extendedWindow'; diff --git a/src/components/tilingsystem/tilingLayout.ts b/src/components/tilingsystem/tilingLayout.ts index af4bfaf..1f3a36a 100644 --- a/src/components/tilingsystem/tilingLayout.ts +++ b/src/components/tilingsystem/tilingLayout.ts @@ -1,5 +1,5 @@ import { registerGObjectClass } from '@/utils/gjs'; -import { Clutter, Mtk, Meta } from '@gi'; +import { Clutter, Mtk, Meta } from '@gi.ext'; import TilePreview, { TilePreviewConstructorProperties, } from '../tilepreview/tilePreview'; diff --git a/src/components/tilingsystem/tilingManager.ts b/src/components/tilingsystem/tilingManager.ts index 7aa2d8f..cc7c7ed 100644 --- a/src/components/tilingsystem/tilingManager.ts +++ b/src/components/tilingsystem/tilingManager.ts @@ -1,4 +1,4 @@ -import { Clutter, Mtk, Meta, GLib } from '@gi'; +import { Clutter, Mtk, Meta, GLib } from '@gi.ext'; import * as Main from 'resource:///org/gnome/shell/ui/main.js'; import { logger } from '@utils/logger'; import { diff --git a/src/components/tilingsystem/touchPointer.ts b/src/components/tilingsystem/touchPointer.ts index ebacde5..756e42b 100644 --- a/src/components/tilingsystem/touchPointer.ts +++ b/src/components/tilingsystem/touchPointer.ts @@ -1,5 +1,5 @@ import { buildRectangle } from '@utils/ui'; -import { Mtk, Meta } from '@gi'; +import { Mtk, Meta } from '@gi.ext'; export default class TouchPointer { private static _instance: TouchPointer | null = null; diff --git a/src/components/windowBorderManager.ts b/src/components/windowBorderManager.ts index 56f4a26..8c88102 100644 --- a/src/components/windowBorderManager.ts +++ b/src/components/windowBorderManager.ts @@ -1,4 +1,4 @@ -import { GObject, Meta, St, Clutter } from '@gi'; +import { GObject, Meta, St, Clutter } from '@gi.ext'; import SignalHandling from '@utils/signalHandling'; import { logger } from '@utils/logger'; import { registerGObjectClass } from '@utils/gjs'; @@ -27,6 +27,8 @@ class WindowBorder extends St.Bin { this.trackWindow(win, true); this.connect('destroy', () => { + this._bindings.forEach((b) => b.unbind()); + this._bindings = []; this._signals.disconnect(); }); } @@ -36,7 +38,7 @@ class WindowBorder extends St.Bin { this._bindings.forEach((b) => b.unbind()); this._bindings = []; - this._signals.disconnect(this._window); + this._signals.disconnect(); this._window = win; this.close(); const winActor = diff --git a/src/components/windowManager/tilingShellWindowManager.ts b/src/components/windowManager/tilingShellWindowManager.ts index f93fe83..753008d 100644 --- a/src/components/windowManager/tilingShellWindowManager.ts +++ b/src/components/windowManager/tilingShellWindowManager.ts @@ -1,7 +1,7 @@ import { registerGObjectClass } from '@utils/gjs'; import { logger } from '@utils/logger'; import SignalHandling from '@utils/signalHandling'; -import { GObject, Meta } from '@gi'; +import { GObject, Meta } from '@gi.ext'; import * as Main from 'resource:///org/gnome/shell/ui/main.js'; const debug = logger('TilingShellWindowManager'); diff --git a/src/components/window_menu/layoutIcon.ts b/src/components/window_menu/layoutIcon.ts index 00c0fb8..16a02ae 100644 --- a/src/components/window_menu/layoutIcon.ts +++ b/src/components/window_menu/layoutIcon.ts @@ -4,7 +4,7 @@ import Tile from '@components/layout/Tile'; import SnapAssistTile from '@components/snapassist/snapAssistTile'; import { registerGObjectClass } from '@utils/gjs'; import { buildRectangle, getScalingFactorOf } from '@utils/ui'; -import { Clutter, Mtk } from '@gi'; +import { Clutter, Mtk } from '@gi.ext'; @registerGObjectClass export default class LayoutIcon extends LayoutWidget { diff --git a/src/components/window_menu/layoutTileButtons.ts b/src/components/window_menu/layoutTileButtons.ts index 424821c..3bc9f60 100644 --- a/src/components/window_menu/layoutTileButtons.ts +++ b/src/components/window_menu/layoutTileButtons.ts @@ -2,7 +2,7 @@ import Layout from '@components/layout/Layout'; import LayoutWidget from '@components/layout/LayoutWidget'; import { registerGObjectClass } from '@utils/gjs'; import { buildMarginOf, buildRectangle, getScalingFactorOf } from '@utils/ui'; -import { Clutter, Mtk } from '@gi'; +import { Clutter, Mtk } from '@gi.ext'; import SnapAssistTileButton from '../snapassist/snapAssistTileButton'; import Tile from '@components/layout/Tile'; diff --git a/src/components/window_menu/overriddenWindowMenu.ts b/src/components/window_menu/overriddenWindowMenu.ts index 3e8cb50..a6b3477 100644 --- a/src/components/window_menu/overriddenWindowMenu.ts +++ b/src/components/window_menu/overriddenWindowMenu.ts @@ -2,7 +2,7 @@ import * as windowMenu from 'resource:///org/gnome/shell/ui/windowMenu.js'; import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js'; import * as Main from 'resource:///org/gnome/shell/ui/main.js'; -import { GObject, St, Clutter, Meta } from '@gi'; +import { GObject, St, Clutter, Meta } from '@gi.ext'; import GlobalState from '@utils/globalState'; import Settings from '@settings/settings'; import { registerGObjectClass } from '@utils/gjs'; diff --git a/src/dbus.ts b/src/dbus.ts index f3dff68..d9e18d3 100644 --- a/src/dbus.ts +++ b/src/dbus.ts @@ -4,7 +4,7 @@ const node = ` `; -import { Gio } from '@gi'; +import { Gio } from '@gi.ext'; export default class DBus { private _dbus: Gio.DBusExportedObject | null; diff --git a/src/extension.ts b/src/extension.ts index 06f0f48..fc2362f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,10 +1,10 @@ import './styles/stylesheet.scss'; +import { Gio, GLib, Meta } from '@gi.ext'; import { logger } from '@utils/logger'; import { getMonitors, squaredEuclideanDistance } from '@/utils/ui'; import * as Main from 'resource:///org/gnome/shell/ui/main.js'; import { TilingManager } from '@/components/tilingsystem/tilingManager'; -import { Gio, GLib, Meta } from '@gi'; import Settings from '@settings/settings'; import SignalHandling from './utils/signalHandling'; import GlobalState from './utils/globalState'; diff --git a/src/gi.ts b/src/gi.ext.ts similarity index 69% rename from src/gi.ts rename to src/gi.ext.ts index 4eaa35f..14bddc6 100644 --- a/src/gi.ts +++ b/src/gi.ext.ts @@ -1,7 +1,5 @@ +import { Gio, GLib, GObject } from '@gi.shared'; import Clutter from 'gi://Clutter'; -import Gio from 'gi://Gio'; -import GLib from 'gi://GLib'; -import GObject from 'gi://GObject'; import Meta from 'gi://Meta'; import Mtk from 'gi://Mtk'; import Shell from 'gi://Shell'; diff --git a/src/gi.prefs.ts b/src/gi.prefs.ts new file mode 100644 index 0000000..2657326 --- /dev/null +++ b/src/gi.prefs.ts @@ -0,0 +1,6 @@ +import { Gio, GLib, GObject } from '@gi.shared'; +import Gdk from 'gi://Gdk'; +import Gtk from 'gi://Gtk'; // Starting from GNOME 40, the preferences dialog uses GTK4 +import Adw from 'gi://Adw'; + +export { Adw, Gio, GLib, GObject, Gdk, Gtk }; diff --git a/src/gi.shared.ts b/src/gi.shared.ts new file mode 100644 index 0000000..ce5990a --- /dev/null +++ b/src/gi.shared.ts @@ -0,0 +1,9 @@ +// import this file from places that are imported by both prefs.js and extension.js +// ensuring you do not import GNOME Shell libraries in Preferences (Clutter, Meta, St or Shell) +// and you do not import GTK libraries in GNOME Shell (Gdk, Gtk or Adw) + +import Gio from 'gi://Gio'; +import GLib from 'gi://GLib'; +import GObject from 'gi://GObject'; + +export { Gio, GLib, GObject }; diff --git a/src/indicator/defaultMenu.ts b/src/indicator/defaultMenu.ts index 9825330..469cdd1 100644 --- a/src/indicator/defaultMenu.ts +++ b/src/indicator/defaultMenu.ts @@ -1,4 +1,4 @@ -import { GObject, St, Clutter, Gio } from '@gi'; +import { GObject, St, Clutter, Gio } from '@gi.ext'; import SignalHandling from '@utils/signalHandling'; import Indicator from './indicator'; import * as Main from 'resource:///org/gnome/shell/ui/main.js'; diff --git a/src/indicator/editingMenu.ts b/src/indicator/editingMenu.ts index 863ab0a..8af18ba 100644 --- a/src/indicator/editingMenu.ts +++ b/src/indicator/editingMenu.ts @@ -1,4 +1,4 @@ -import { St } from '@gi'; +import { St } from '@gi.ext'; import Indicator from './indicator'; import * as IndicatorUtils from './utils'; import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js'; diff --git a/src/indicator/indicator.ts b/src/indicator/indicator.ts index e6fe552..9cfc8c7 100644 --- a/src/indicator/indicator.ts +++ b/src/indicator/indicator.ts @@ -1,4 +1,4 @@ -import { St, Clutter, Shell, Gio } from '@gi'; +import { St, Clutter, Shell, Gio } from '@gi.ext'; import * as Main from 'resource:///org/gnome/shell/ui/main.js'; import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js'; import Settings from '@settings/settings'; diff --git a/src/indicator/layoutButton.ts b/src/indicator/layoutButton.ts index 685508d..e57e2e6 100644 --- a/src/indicator/layoutButton.ts +++ b/src/indicator/layoutButton.ts @@ -1,4 +1,4 @@ -import { St, Clutter, Mtk } from '@gi'; +import { St, Clutter, Mtk } from '@gi.ext'; import LayoutWidget from '@/components/layout/LayoutWidget'; import SnapAssistTile from '@/components/snapassist/snapAssistTile'; import Layout from '@/components/layout/Layout'; diff --git a/src/indicator/utils.ts b/src/indicator/utils.ts index 10649f4..85e50ca 100644 --- a/src/indicator/utils.ts +++ b/src/indicator/utils.ts @@ -1,4 +1,4 @@ -import { St, Clutter, Gio } from '@gi'; +import { St, Clutter, Gio } from '@gi.ext'; export const createButton = ( iconName: string, diff --git a/src/keybindings.ts b/src/keybindings.ts index 55d94e9..152761a 100644 --- a/src/keybindings.ts +++ b/src/keybindings.ts @@ -1,5 +1,5 @@ import * as Main from 'resource:///org/gnome/shell/ui/main.js'; -import { GObject, Meta, Gio, Shell, GLib } from '@gi'; +import { GObject, Meta, Gio, Shell, GLib } from '@gi.ext'; import Settings from '@settings/settings'; import SettingsOverride from '@settings/settingsOverride'; import SignalHandling from '@utils/signalHandling'; diff --git a/src/prefs.gi.ts b/src/prefs.gi.ts deleted file mode 100644 index 23c1625..0000000 --- a/src/prefs.gi.ts +++ /dev/null @@ -1,6 +0,0 @@ -import Gio from 'gi://Gio'; -import GLib from 'gi://GLib'; -import GObject from 'gi://GObject'; -import Gdk from 'gi://Gdk'; - -export { Gio, GLib, GObject, Gdk }; diff --git a/src/prefs.ts b/src/prefs.ts index ff2d4c6..c0dcbf6 100644 --- a/src/prefs.ts +++ b/src/prefs.ts @@ -1,6 +1,4 @@ -import Gtk from 'gi://Gtk'; // Starting from GNOME 40, the preferences dialog uses GTK4 -import Adw from 'gi://Adw'; -import { Gio, GLib, Gdk, GObject } from '@prefs.gi'; +import { Gtk, Adw, Gio, GLib, Gdk, GObject } from '@gi.prefs'; import Settings, { ActivationKey } from './settings/settings'; import { logger } from './utils/logger'; import { ExtensionPreferences } from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'; diff --git a/src/settings/settings.ts b/src/settings/settings.ts index f54a338..07e97d1 100644 --- a/src/settings/settings.ts +++ b/src/settings/settings.ts @@ -1,4 +1,4 @@ -import { Gio, GObject, GLib } from '@prefs.gi'; +import { Gio, GObject, GLib } from '@gi.shared'; import Layout from '../components/layout/Layout'; import Tile from '../components/layout/Tile'; diff --git a/src/settings/settingsExport.ts b/src/settings/settingsExport.ts index 1650fad..6d6fac5 100644 --- a/src/settings/settingsExport.ts +++ b/src/settings/settingsExport.ts @@ -1,4 +1,4 @@ -import { Gio, GLib } from '@prefs.gi'; +import { Gio, GLib } from '@gi.prefs'; import Settings from '@settings/settings'; import SettingsOverride from '@settings/settingsOverride'; diff --git a/src/settings/settingsOverride.ts b/src/settings/settingsOverride.ts index 5067784..edde78b 100644 --- a/src/settings/settingsOverride.ts +++ b/src/settings/settingsOverride.ts @@ -1,5 +1,5 @@ import Settings from '@settings/settings'; -import { Gio, GLib } from '@prefs.gi'; +import { Gio, GLib } from '@gi.shared'; export default class SettingsOverride { // map schema_id with map of keys and old values diff --git a/src/utils/gjs.ts b/src/utils/gjs.ts index 589960e..0472db4 100644 --- a/src/utils/gjs.ts +++ b/src/utils/gjs.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { GObject } from '@gi'; +import { GObject } from '@gi.ext'; // Taken from https://github.com/material-shell/material-shell/blob/main/src/utils/gjs.ts // Decorator function to call `GObject.registerClass` with the given class. diff --git a/src/utils/globalState.ts b/src/utils/globalState.ts index 47b1147..b1fcb88 100644 --- a/src/utils/globalState.ts +++ b/src/utils/globalState.ts @@ -2,7 +2,7 @@ import { registerGObjectClass } from '@utils/gjs'; import Layout from '../components/layout/Layout'; import Settings from '../settings/settings'; import SignalHandling from './signalHandling'; -import { GObject, Meta, Gio } from '@gi'; +import { GObject, Meta, Gio } from '@gi.ext'; import * as Main from 'resource:///org/gnome/shell/ui/main.js'; import { logger } from './logger'; diff --git a/src/utils/signalHandling.ts b/src/utils/signalHandling.ts index b9faa01..9bf415b 100644 --- a/src/utils/signalHandling.ts +++ b/src/utils/signalHandling.ts @@ -22,15 +22,18 @@ export default class SignalHandling { this._signalsIds[key] = { id: signalId, obj }; } - public disconnect(): void; - public disconnect(obj: ObjectWithSignals): void; + public disconnect(): boolean; + public disconnect(obj: ObjectWithSignals): boolean; public disconnect(obj?: ObjectWithSignals) { if (!obj) { const toDelete: string[] = []; Object.keys(this._signalsIds).forEach((key) => { this._signalsIds[key].obj.disconnect(this._signalsIds[key].id); + toDelete.push(key); }); + const result = toDelete.length > 0; toDelete.forEach((key) => delete this._signalsIds[key]); + return result; } else { const keyFound = Object.keys(this._signalsIds).find( (key) => this._signalsIds[key].obj === obj, @@ -39,6 +42,7 @@ export default class SignalHandling { obj.disconnect(this._signalsIds[keyFound].id); delete this._signalsIds[keyFound]; } + return keyFound; } } } diff --git a/src/utils/ui.ts b/src/utils/ui.ts index 2e3f789..4c52a11 100644 --- a/src/utils/ui.ts +++ b/src/utils/ui.ts @@ -1,4 +1,4 @@ -import { St, Meta, Mtk, Clutter, Shell } from '@gi'; +import { St, Meta, Mtk, Clutter, Shell } from '@gi.ext'; import * as Main from 'resource:///org/gnome/shell/ui/main.js'; import { Monitor } from 'resource:///org/gnome/shell/ui/layout.js';