From 89067a8dd932e58671ff36df6a41b3942cde42a6 Mon Sep 17 00:00:00 2001 From: abakkk Date: Mon, 31 Aug 2020 13:05:41 +0200 Subject: [PATCH] use an Extension class --- area.js | 3 +-- extension.js | 61 ++++++++++++++++++++++++++++------------------------ menu.js | 7 +++--- 3 files changed, 37 insertions(+), 34 deletions(-) diff --git a/area.js b/area.js index ff12849..5bbeb5c 100644 --- a/area.js +++ b/area.js @@ -37,7 +37,6 @@ const Main = imports.ui.main; const Screenshot = imports.ui.screenshot; const Me = ExtensionUtils.getCurrentExtension(); -const Extension = Me.imports.extension; const Elements = Me.imports.elements; const Files = Me.imports.files; const Menu = Me.imports.menu; @@ -759,7 +758,7 @@ var DrawingArea = new Lang.Class({ setPointerCursor: function(pointerCursorName) { if (!this.currentPointerCursorName || this.currentPointerCursorName != pointerCursorName) { this.currentPointerCursorName = pointerCursorName; - Extension.setCursor(pointerCursorName); + Me.stateObj.areaManager.setCursor(pointerCursorName); } }, diff --git a/extension.js b/extension.js index 9ce4894..2f2e52b 100644 --- a/extension.js +++ b/extension.js @@ -1,5 +1,5 @@ /* jslint esversion: 6 */ -/* exported manager, init, enable, disable, setCursor */ +/* exported init */ /* * Copyright 2019 Abakkk @@ -48,28 +48,34 @@ const WRITING_ACTION_MODE = Math.pow(2,15); // use 'login-dialog-message-warning' class in order to get GS theme warning color (default: #f57900) const WARNING_COLOR_STYLE_CLASS_NAME = 'login-dialog-message-warning'; -var manager; - function init() { - Convenience.initTranslations(); + return new Extension(); } -function enable() { - if (ExtensionUtils.isOutOfDate(Me)) - log(`${Me.metadata.uuid}: GNOME Shell ${Number.parseFloat(GS_VERSION)} is not supported.`); +const Extension = new Lang.Class({ + Name: 'DrawOnYourScreenExtension', - Me.settings = Convenience.getSettings(); - Me.internalShortcutSettings = Convenience.getSettings(Me.metadata['settings-schema'] + '.internal-shortcuts'); - Me.drawingSettings = Convenience.getSettings(Me.metadata['settings-schema'] + '.drawing'); - manager = new AreaManager(); -} + _init: function() { + Convenience.initTranslations(); + }, -function disable() { - manager.disable(); - manager = null; - delete Me.settings; - delete Me.internalShortcutSettings; -} + enable() { + if (ExtensionUtils.isOutOfDate(Me)) + log(`${Me.metadata.uuid}: GNOME Shell ${Number.parseFloat(GS_VERSION)} is not supported.`); + + Me.settings = Convenience.getSettings(); + Me.internalShortcutSettings = Convenience.getSettings(Me.metadata['settings-schema'] + '.internal-shortcuts'); + Me.drawingSettings = Convenience.getSettings(Me.metadata['settings-schema'] + '.drawing'); + this.areaManager = new AreaManager(); + }, + + disable() { + this.areaManager.disable(); + delete this.areaManager; + delete Me.settings; + delete Me.internalShortcutSettings; + } +}); // AreaManager assigns one DrawingArea per monitor (updateAreas()), // distributes keybinding callbacks to the active area @@ -337,7 +343,7 @@ const AreaManager = new Lang.Class({ Main.popModal(this.activeArea); if (source && source == global.display) this.showOsd(null, 'touchpad-disabled-symbolic', _("Keyboard and pointer released"), null, null, false); - setCursor('DEFAULT'); + this.setCursor('DEFAULT'); this.activeArea.reactive = false; this.removeInternalKeybindings(); } else { @@ -474,6 +480,14 @@ const AreaManager = new Lang.Class({ OsdWindow.HIDE_TIMEOUT = hideTimeoutSave; }, + setCursor: function(cursorName) { + // check display or screen (API changes) + if (global.display.set_cursor) + global.display.set_cursor(Meta.Cursor[cursorName]); + else if (global.screen && global.screen.set_cursor) + global.screen.set_cursor(Meta.Cursor[cursorName]); + }, + removeAreas: function() { for (let i = 0; i < this.areas.length; i++) { let area = this.areas[i]; @@ -564,12 +578,3 @@ const DrawingIndicator = new Lang.Class({ } }); -function setCursor(cursorName) { - // check display or screen (API changes) - if (global.display.set_cursor) - global.display.set_cursor(Meta.Cursor[cursorName]); - else if (global.screen && global.screen.set_cursor) - global.screen.set_cursor(Meta.Cursor[cursorName]); -} - - diff --git a/menu.js b/menu.js index b70ce5c..0fe7b6f 100644 --- a/menu.js +++ b/menu.js @@ -39,7 +39,6 @@ const ExtensionUtils = imports.misc.extensionUtils; const Me = ExtensionUtils.getCurrentExtension(); const Area = Me.imports.area; const Elements = Me.imports.elements; -const Extension = Me.imports.extension; const Files = Me.imports.files; const _ = imports.gettext.domain(Me.metadata['gettext-domain']).gettext; @@ -210,8 +209,8 @@ var DrawingMenu = new Lang.Class({ imageSection.itemActivated = () => {}; this.imageSection = imageSection; - let manager = Extension.manager; - this._addSimpleSwitchItem(this.menu, _("Hide panel and dock"), manager.hiddenList ? true : false, manager.togglePanelAndDockOpacity.bind(manager)); + let areaManager = Me.stateObj.areaManager; + this._addSimpleSwitchItem(this.menu, _("Hide panel and dock"), areaManager.hiddenList ? true : false, areaManager.togglePanelAndDockOpacity.bind(areaManager)); this._addSimpleSwitchItem(this.menu, _("Add a drawing background"), this.area.hasBackground, this.area.toggleBackground.bind(this.area)); this._addSimpleSwitchItem(this.menu, _("Add a grid overlay"), this.area.hasGrid, this.area.toggleGrid.bind(this.area)); this._addSimpleSwitchItem(this.menu, _("Square drawing area"), this.area.isSquareArea, this.area.toggleSquareArea.bind(this.area)); @@ -222,7 +221,7 @@ var DrawingMenu = new Lang.Class({ this._addSaveDrawingSubMenuItem(this.menu); this.menu.addAction(_("Save drawing as a SVG file"), this.area.saveAsSvg.bind(this.area), 'image-x-generic-symbolic'); - this.menu.addAction(_("Open preferences"), manager.openPreferences.bind(manager), 'document-page-setup-symbolic'); + this.menu.addAction(_("Open preferences"), areaManager.openPreferences.bind(areaManager), 'document-page-setup-symbolic'); this.menu.addAction(_("Show help"), () => { this.close(); this.area.toggleHelp(); }, 'preferences-desktop-keyboard-shortcuts-symbolic'); this._updateActionSensitivity();