diff --git a/area.js b/area.js index 2684308..f2d9c34 100644 --- a/area.js +++ b/area.js @@ -36,7 +36,6 @@ const Main = imports.ui.main; const Screenshot = imports.ui.screenshot; const Me = ExtensionUtils.getCurrentExtension(); -const Convenience = ExtensionUtils.getSettings ? ExtensionUtils : Me.imports.convenience; const Extension = Me.imports.extension; const Elements = Me.imports.elements; const Files = Me.imports.files; @@ -73,7 +72,6 @@ var DrawingArea = new Lang.Class({ this.connect('destroy', this._onDestroy.bind(this)); this.reactiveHandler = this.connect('notify::reactive', this._onReactiveChanged.bind(this)); - this.settings = Convenience.getSettings(); this.monitor = monitor; this.helper = helper; diff --git a/extension.js b/extension.js index a253683..632cb8e 100644 --- a/extension.js +++ b/extension.js @@ -28,11 +28,11 @@ const Shell = imports.gi.Shell; const St = imports.gi.St; const Config = imports.misc.config; +const ExtensionUtils = imports.misc.extensionUtils; const Main = imports.ui.main; const OsdWindow = imports.ui.osdWindow; const PanelMenu = imports.ui.panelMenu; -const ExtensionUtils = imports.misc.extensionUtils; const Me = ExtensionUtils.getCurrentExtension(); const Convenience = ExtensionUtils.getSettings && ExtensionUtils.initTranslations ? ExtensionUtils : Me.imports.convenience; const Area = Me.imports.area; @@ -55,12 +55,16 @@ function init() { } function enable() { + Me.settings = Convenience.getSettings(); + Me.internalShortcutSettings = Convenience.getSettings(Me.metadata['settings-schema'] + '.internal-shortcuts'); manager = new AreaManager(); } function disable() { manager.disable(); manager = null; + delete Me.settings; + delete Me.internalShortcutSettings; } // AreaManager assigns one DrawingArea per monitor (updateAreas()), @@ -70,26 +74,25 @@ var AreaManager = new Lang.Class({ Name: 'DrawOnYourScreenAreaManager', _init: function() { - this.settings = Convenience.getSettings(); this.areas = []; this.activeArea = null; this.enterGicon = new Gio.ThemedIcon({ name: 'applications-graphics-symbolic' }); this.leaveGicon = new Gio.ThemedIcon({ name: 'application-exit-symbolic' }); Main.wm.addKeybinding('toggle-drawing', - this.settings, + Me.settings, Meta.KeyBindingFlags.NONE, Shell.ActionMode.ALL, this.toggleDrawing.bind(this)); Main.wm.addKeybinding('toggle-modal', - this.settings, + Me.settings, Meta.KeyBindingFlags.NONE, Shell.ActionMode.ALL, this.toggleModal.bind(this)); Main.wm.addKeybinding('erase-drawing', - this.settings, + Me.settings, Meta.KeyBindingFlags.NONE, Shell.ActionMode.ALL, this.eraseDrawing.bind(this)); @@ -98,10 +101,10 @@ var AreaManager = new Lang.Class({ this.monitorChangedHandler = Main.layoutManager.connect('monitors-changed', this.updateAreas.bind(this)); this.updateIndicator(); - this.indicatorSettingHandler = this.settings.connect('changed::indicator-disabled', this.updateIndicator.bind(this)); + this.indicatorSettingHandler = Me.settings.connect('changed::indicator-disabled', this.updateIndicator.bind(this)); - this.desktopSettingHandler = this.settings.connect('changed::drawing-on-desktop', this.onDesktopSettingChanged.bind(this)); - this.persistentSettingHandler = this.settings.connect('changed::persistent-drawing', this.onPersistentSettingChanged.bind(this)); + this.desktopSettingHandler = Me.settings.connect('changed::drawing-on-desktop', this.onDesktopSettingChanged.bind(this)); + this.persistentSettingHandler = Me.settings.connect('changed::persistent-drawing', this.onPersistentSettingChanged.bind(this)); this.userStyleFile = Gio.File.new_for_path(GLib.build_filenamev([GLib.get_user_data_dir(), Me.metadata['data-dir'], 'user.css'])); @@ -125,14 +128,14 @@ var AreaManager = new Lang.Class({ }, onDesktopSettingChanged: function() { - if (this.settings.get_boolean("drawing-on-desktop")) + if (Me.settings.get_boolean("drawing-on-desktop")) this.areas.forEach(area => area.get_parent().show()); else this.areas.forEach(area => area.get_parent().hide()); }, onPersistentSettingChanged: function() { - if (this.settings.get_boolean('persistent-drawing')) + if (Me.settings.get_boolean('persistent-drawing')) this.areas[Main.layoutManager.primaryIndex].syncPersistent(); }, @@ -141,7 +144,7 @@ var AreaManager = new Lang.Class({ this.indicator.disable(); this.indicator = null; } - if (!this.settings.get_boolean('indicator-disabled')) + if (!Me.settings.get_boolean('indicator-disabled')) this.indicator = new DrawingIndicator(); }, @@ -156,13 +159,13 @@ var AreaManager = new Lang.Class({ let monitor = this.monitors[i]; let container = new St.Widget({ name: 'drawOnYourSreenContainer' + i }); let helper = new Helper.DrawingHelper({ name: 'drawOnYourSreenHelper' + i }, monitor); - let loadPersistent = i == Main.layoutManager.primaryIndex && this.settings.get_boolean('persistent-drawing'); + let loadPersistent = i == Main.layoutManager.primaryIndex && Me.settings.get_boolean('persistent-drawing'); let area = new Area.DrawingArea({ name: 'drawOnYourSreenArea' + i }, monitor, helper, loadPersistent); container.add_child(area); container.add_child(helper); Main.layoutManager._backgroundGroup.insert_child_above(container, Main.layoutManager._bgManagers[i].backgroundActor); - if (!this.settings.get_boolean("drawing-on-desktop")) + if (!Me.settings.get_boolean("drawing-on-desktop")) container.hide(); container.set_position(monitor.x, monitor.y); @@ -228,7 +231,7 @@ var AreaManager = new Lang.Class({ for (let key in this.internalKeybindings1) { Main.wm.addKeybinding(key, - this.settings, + Me.internalShortcutSettings, Meta.KeyBindingFlags.NONE, DRAWING_ACTION_MODE, this.internalKeybindings1[key]); @@ -236,7 +239,7 @@ var AreaManager = new Lang.Class({ for (let key in this.internalKeybindings2) { Main.wm.addKeybinding(key, - this.settings, + Me.internalShortcutSettings, Meta.KeyBindingFlags.NONE, DRAWING_ACTION_MODE | WRITING_ACTION_MODE, this.internalKeybindings2[key]); @@ -245,7 +248,7 @@ var AreaManager = new Lang.Class({ for (let i = 1; i < 10; i++) { let iCaptured = i; Main.wm.addKeybinding('select-color' + i, - this.settings, + Me.internalShortcutSettings, Meta.KeyBindingFlags.NONE, DRAWING_ACTION_MODE | WRITING_ACTION_MODE, () => this.activeArea.selectColor(iCaptured)); @@ -292,7 +295,7 @@ var AreaManager = new Lang.Class({ eraseDrawing: function() { for (let i = 0; i < this.areas.length; i++) this.areas[i].erase(); - if (this.settings.get_boolean('persistent-drawing')) + if (Me.settings.get_boolean('persistent-drawing')) this.areas[Main.layoutManager.primaryIndex].savePersistent(); }, @@ -345,7 +348,7 @@ var AreaManager = new Lang.Class({ Main.uiGroup.set_child_at_index(Main.layoutManager.keyboardBox, this.oldKeyboardIndex); Main.uiGroup.remove_actor(activeContainer); Main.layoutManager._backgroundGroup.insert_child_above(activeContainer, Main.layoutManager._bgManagers[activeIndex].backgroundActor); - if (!this.settings.get_boolean("drawing-on-desktop")) + if (!Me.settings.get_boolean("drawing-on-desktop")) activeContainer.hide(); } else { Main.layoutManager._backgroundGroup.remove_actor(activeContainer); @@ -387,7 +390,7 @@ var AreaManager = new Lang.Class({ toggleDrawing: function() { if (this.activeArea) { let activeIndex = this.areas.indexOf(this.activeArea); - let save = activeIndex == Main.layoutManager.primaryIndex && this.settings.get_boolean('persistent-drawing'); + let save = activeIndex == Main.layoutManager.primaryIndex && Me.settings.get_boolean('persistent-drawing'); this.showOsd(null, this.leaveGicon, _("Leaving drawing mode")); this.activeArea.leaveDrawingMode(save); @@ -410,7 +413,7 @@ var AreaManager = new Lang.Class({ } this.activeArea.enterDrawingMode(); - this.osdDisabled = this.settings.get_boolean('osd-disabled'); + this.osdDisabled = Me.settings.get_boolean('osd-disabled'); let label = _("Press %s for help").format(this.activeArea.helper.helpKeyLabel) + "\n\n" + _("Entering drawing mode"); this.showOsd(null, this.enterGicon, label, null, null, true); } @@ -531,15 +534,15 @@ var AreaManager = new Lang.Class({ this.monitorChangedHandler = null; } if (this.indicatorSettingHandler) { - this.settings.disconnect(this.indicatorSettingHandler); + Me.settings.disconnect(this.indicatorSettingHandler); this.indicatorSettingHandler = null; } if (this.desktopSettingHandler) { - this.settings.disconnect(this.desktopSettingHandler); + Me.settings.disconnect(this.desktopSettingHandler); this.desktopSettingHandler = null; } if (this.persistentSettingHandler) { - this.settings.disconnect(this.persistentSettingHandler); + Me.settings.disconnect(this.persistentSettingHandler); this.persistentSettingHandler = null; } diff --git a/helper.js b/helper.js index e3bfe2e..d6704e9 100644 --- a/helper.js +++ b/helper.js @@ -25,9 +25,9 @@ const Lang = imports.lang; const St = imports.gi.St; const Config = imports.misc.config; +const ExtensionUtils = imports.misc.extensionUtils; const Tweener = imports.ui.tweener; -const ExtensionUtils = imports.misc.extensionUtils; const Me = ExtensionUtils.getCurrentExtension(); const Convenience = ExtensionUtils.getSettings ? ExtensionUtils : Me.imports.convenience; const Prefs = Me.imports.prefs; @@ -55,24 +55,27 @@ var DrawingHelper = new Lang.Class({ this.parent(params); this.monitor = monitor; this.hide(); - this.settings = Convenience.getSettings(); - this.settingHandler = this.settings.connect('changed', this._onSettingChanged.bind(this)); - this.connect('destroy', () => this.settings.disconnect(this.settingHandler)); + this.settingsHandler = Me.settings.connect('changed', this._onSettingsChanged.bind(this)); + this.internalShortcutsettingsHandler = Me.internalShortcutSettings.connect('changed', this._onSettingsChanged.bind(this)); + this.connect('destroy', () => { + Me.settings.disconnect(this.settingsHandler); + Me.internalShortcutSettings.disconnect(this.internalShortcutsettingsHandler); + }); }, - _onSettingChanged: function(settings, key) { + _onSettingsChanged: function(settings, key) { if (key == 'toggle-help') this._updateHelpKeyLabel(); if (this.vbox) { this.vbox.destroy(); - this.vbox = null; + delete this.vbox; } }, _updateHelpKeyLabel: function() { - let [keyval, mods] = Gtk.accelerator_parse(this.settings.get_strv('toggle-help')[0]); + let [keyval, mods] = Gtk.accelerator_parse(Me.internalShortcutSettings.get_strv('toggle-help')[0]); this._helpKeyLabel = Gtk.accelerator_get_label(keyval, mods); }, @@ -94,9 +97,9 @@ var DrawingHelper = new Lang.Class({ this.vbox.add_child(hbox); continue; } - if (!this.settings.get_strv(settingKey)[0]) + if (!Me.settings.get_strv(settingKey)[0]) continue; - let [keyval, mods] = Gtk.accelerator_parse(this.settings.get_strv(settingKey)[0]); + let [keyval, mods] = Gtk.accelerator_parse(Me.settings.get_strv(settingKey)[0]); hbox.add_child(new St.Label({ text: _(Prefs.GLOBAL_KEYBINDINGS[settingKey]) })); hbox.add_child(new St.Label({ text: Gtk.accelerator_get_label(keyval, mods), x_expand: true })); this.vbox.add_child(hbox); @@ -124,9 +127,9 @@ var DrawingHelper = new Lang.Class({ continue; } let hbox = new St.BoxLayout({ vertical: false }); - if (!this.settings.get_strv(settingKey)[0]) + if (!Me.internalShortcutSettings.get_strv(settingKey)[0]) continue; - let [keyval, mods] = Gtk.accelerator_parse(this.settings.get_strv(settingKey)[0]); + let [keyval, mods] = Gtk.accelerator_parse(Me.internalShortcutSettings.get_strv(settingKey)[0]); hbox.add_child(new St.Label({ text: _(Prefs.INTERNAL_KEYBINDINGS[settingKey]) })); hbox.add_child(new St.Label({ text: Gtk.accelerator_get_label(keyval, mods), x_expand: true })); this.vbox.add_child(hbox); diff --git a/prefs.js b/prefs.js index 8ff013d..3706a50 100644 --- a/prefs.js +++ b/prefs.js @@ -207,7 +207,8 @@ const PrefsPage = new GObject.Class({ _init: function(params) { this.parent(); - this.settings = Convenience.getSettings(); + let settings = Convenience.getSettings(); + let internalShortcutSettings = Convenience.getSettings(Me.metadata['settings-schema'] + '.internal-shortcuts'); let box = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL, margin: MARGIN*3 }); this.add(box); @@ -222,7 +223,7 @@ const PrefsPage = new GObject.Class({ let styleContext = listBox.get_style_context(); styleContext.add_class('background'); - let globalKeybindingsWidget = new KeybindingsWidget(GLOBAL_KEYBINDINGS, this.settings); + let globalKeybindingsWidget = new KeybindingsWidget(GLOBAL_KEYBINDINGS, settings); globalKeybindingsWidget.margin = MARGIN; listBox.add(globalKeybindingsWidget); @@ -235,7 +236,7 @@ const PrefsPage = new GObject.Class({ persistentLabelBox.pack_start(persistentLabel1, true, true, 0); persistentLabelBox.pack_start(persistentLabel2, true, true, 0); let persistentSwitch = new Gtk.Switch({valign: 3}); - this.settings.bind('persistent-drawing', persistentSwitch, 'active', 0); + settings.bind('persistent-drawing', persistentSwitch, 'active', 0); persistentBox.pack_start(persistentLabelBox, true, true, 4); persistentBox.pack_start(persistentSwitch, false, false, 4); listBox.add(persistentBox); @@ -249,7 +250,7 @@ const PrefsPage = new GObject.Class({ desktopLabelBox.pack_start(desktopLabel1, true, true, 0); desktopLabelBox.pack_start(desktopLabel2, true, true, 0); let desktopSwitch = new Gtk.Switch({valign: 3}); - this.settings.bind('drawing-on-desktop', desktopSwitch, 'active', 0); + settings.bind('drawing-on-desktop', desktopSwitch, 'active', 0); desktopBox.pack_start(desktopLabelBox, true, true, 4); desktopBox.pack_start(desktopSwitch, false, false, 4); listBox.add(desktopBox); @@ -260,7 +261,7 @@ const PrefsPage = new GObject.Class({ osdLabel1.set_halign(1); osdLabelBox.pack_start(osdLabel1, true, true, 0); let osdSwitch = new Gtk.Switch({valign: 3}); - this.settings.bind('osd-disabled', osdSwitch, 'active', 0); + settings.bind('osd-disabled', osdSwitch, 'active', 0); osdBox.pack_start(osdLabelBox, true, true, 4); osdBox.pack_start(osdSwitch, false, false, 4); listBox.add(osdBox); @@ -271,7 +272,7 @@ const PrefsPage = new GObject.Class({ indicatorLabel1.set_halign(1); indicatorLabelBox.pack_start(indicatorLabel1, true, true, 0); let indicatorSwitch = new Gtk.Switch({valign: 3}); - this.settings.bind('indicator-disabled', indicatorSwitch, 'active', 0); + settings.bind('indicator-disabled', indicatorSwitch, 'active', 0); indicatorBox.pack_start(indicatorLabelBox, true, true, 4); indicatorBox.pack_start(indicatorSwitch, false, false, 4); listBox.add(indicatorBox); @@ -306,7 +307,7 @@ const PrefsPage = new GObject.Class({ listBox.add(otherBox); } - let internalKeybindingsWidget = new KeybindingsWidget(INTERNAL_KEYBINDINGS, this.settings); + let internalKeybindingsWidget = new KeybindingsWidget(INTERNAL_KEYBINDINGS, internalShortcutSettings); internalKeybindingsWidget.margin = MARGIN; listBox.add(internalKeybindingsWidget); diff --git a/schemas/gschemas.compiled b/schemas/gschemas.compiled index 92584ee..269a8e8 100644 Binary files a/schemas/gschemas.compiled and b/schemas/gschemas.compiled differ diff --git a/schemas/org.gnome.shell.extensions.draw-on-your-screen.gschema.xml b/schemas/org.gnome.shell.extensions.draw-on-your-screen.gschema.xml index 4fe2746..6211353 100644 --- a/schemas/org.gnome.shell.extensions.draw-on-your-screen.gschema.xml +++ b/schemas/org.gnome.shell.extensions.draw-on-your-screen.gschema.xml @@ -36,6 +36,9 @@ erase drawing erase drawing + + + ["<Primary>z"] undo