diff --git a/area.js b/area.js index 61dc879..d28a846 100644 --- a/area.js +++ b/area.js @@ -1064,7 +1064,7 @@ var DrawingArea = new Lang.Class({ this.get_parent().set_background_color(this.reactive && this.hasBackground ? this.areaBackgroundColor : null); }, - leaveDrawingMode: function(save) { + leaveDrawingMode: function(save, erase) { if (this.stageKeyPressedHandler) { global.stage.disconnect(this.stageKeyPressedHandler); this.stageKeyPressedHandler = null; @@ -1100,7 +1100,10 @@ var DrawingArea = new Lang.Class({ this.currentElement = null; this._stopTextCursorTimeout(); - this._redisplay(); + if (erase) + this.erase(); + else + this._redisplay(); this.closeMenu(); this.get_parent().set_background_color(null); Files.Images.reset(); diff --git a/extension.js b/extension.js index c7d9b42..1363f17 100644 --- a/extension.js +++ b/extension.js @@ -112,21 +112,42 @@ const AreaManager = new Lang.Class({ this.indicatorSettingHandler = Me.settings.connect('changed::indicator-disabled', this.updateIndicator.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.persistentOverRestartsSettingHandler = Me.settings.connect('changed::persistent-over-restarts', this.onPersistentOverRestartsSettingChanged.bind(this)); + this.persistentOverTogglesSettingHandler = Me.settings.connect('changed::persistent-over-toggles', this.onPersistentOverTogglesSettingChanged.bind(this)); + }, + + get persistentOverToggles() { + return Me.settings.get_boolean('persistent-over-toggles'); + }, + + get persistentOverRestarts() { + return Me.settings.get_boolean('persistent-over-toggles') && Me.settings.get_boolean('persistent-over-restarts'); + }, + + get onDesktop() { + return Me.settings.get_boolean('persistent-over-toggles') && Me.settings.get_boolean('drawing-on-desktop'); }, onDesktopSettingChanged: function() { - if (Me.settings.get_boolean("drawing-on-desktop")) + if (this.onDesktop) this.areas.forEach(area => area.get_parent().show()); else this.areas.forEach(area => area.get_parent().hide()); }, - onPersistentSettingChanged: function() { - if (Me.settings.get_boolean('persistent-drawing')) + onPersistentOverRestartsSettingChanged: function() { + if (this.persistentOverRestarts) this.areas[Main.layoutManager.primaryIndex].syncPersistent(); }, + onPersistentOverTogglesSettingChanged: function() { + if (!this.persistentOverToggles && !this.activeArea) + this.eraseDrawings(); + + this.onPersistentOverRestartsSettingChanged(); + this.onDesktopSettingChanged(); + }, + updateIndicator: function() { if (this.indicator) { this.indicator.disable(); @@ -147,13 +168,13 @@ const 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 && Me.settings.get_boolean('persistent-drawing'); + let loadPersistent = i == Main.layoutManager.primaryIndex && this.persistentOverRestarts; 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 (!Me.settings.get_boolean("drawing-on-desktop")) + if (!this.onDesktop) container.hide(); container.set_position(monitor.x, monitor.y); @@ -268,7 +289,7 @@ const AreaManager = new Lang.Class({ eraseDrawings: function() { for (let i = 0; i < this.areas.length; i++) this.areas[i].erase(); - if (Me.settings.get_boolean('persistent-drawing')) + if (this.persistentOverRestarts) this.areas[Main.layoutManager.primaryIndex].savePersistent(); }, @@ -321,7 +342,7 @@ const 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 (!Me.settings.get_boolean("drawing-on-desktop")) + if (!this.onDesktop) activeContainer.hide(); } else { Main.layoutManager._backgroundGroup.remove_actor(activeContainer); @@ -364,10 +385,11 @@ const AreaManager = new Lang.Class({ toggleDrawing: function() { if (this.activeArea) { let activeIndex = this.areas.indexOf(this.activeArea); - let save = activeIndex == Main.layoutManager.primaryIndex && Me.settings.get_boolean('persistent-drawing'); + let save = activeIndex == Main.layoutManager.primaryIndex && this.persistentOverRestarts; + let erase = !this.persistentOverToggles; this.showOsd(null, Files.Icons.LEAVE, _("Leaving drawing mode")); - this.activeArea.leaveDrawingMode(save); + this.activeArea.leaveDrawingMode(save, erase); if (this.hiddenList) this.togglePanelAndDockOpacity(); @@ -513,9 +535,13 @@ const AreaManager = new Lang.Class({ Me.settings.disconnect(this.desktopSettingHandler); this.desktopSettingHandler = null; } - if (this.persistentSettingHandler) { - Me.settings.disconnect(this.persistentSettingHandler); - this.persistentSettingHandler = null; + if (this.persistentOverTogglesSettingHandler) { + Me.settings.disconnect(this.persistentOverTogglesSettingHandler); + this.persistentOverTogglesSettingHandler = null; + } + if (this.persistentOverRestartsSettingHandler) { + Me.settings.disconnect(this.persistentOverRestartsSettingHandler); + this.persistentOverRestartsSettingHandler = null; } if (this.activeArea) diff --git a/locale/draw-on-your-screen.pot b/locale/draw-on-your-screen.pot index 231ace4..0703d4c 100644 --- a/locale/draw-on-your-screen.pot +++ b/locale/draw-on-your-screen.pot @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Draw On Your Screen\n" "Report-Msgid-Bugs-To: https://framagit.org/abakkk/DrawOnYourScreen/issues\n" -"POT-Creation-Date: 2020-09-16 21:11+0200\n" +"POT-Creation-Date: 2020-09-17 13:38+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -441,10 +441,16 @@ msgstr "" msgid "Disable on-screen notifications" msgstr "" -msgid "Persistent" +msgid "Persistent over toggles" msgstr "" -msgid "Persistent drawing through session restart" +msgid "Drawing remains when toggling drawing mode" +msgstr "" + +msgid "Persistent over restarts" +msgstr "" + +msgid "Drawing is automatically saved to a file" msgstr "" msgid "Enter/leave drawing mode" diff --git a/prefs.js b/prefs.js index c57f1b6..26a6ac9 100644 --- a/prefs.js +++ b/prefs.js @@ -395,18 +395,27 @@ const PrefsPage = new GObject.Class({ listBox.add(globalKeybindingsRow); }); - let persistentKey = schema.get_key('persistent-drawing'); - let persistentRow = new PrefRow({ label: persistentKey.get_summary(), desc: persistentKey.get_description() }); - let persistentSwitch = new Gtk.Switch(); - settings.bind('persistent-drawing', persistentSwitch, 'active', 0); - persistentRow.addWidget(persistentSwitch, true); - listBox.add(persistentRow); + let persistentOverTogglesKey = schema.get_key('persistent-over-toggles'); + let persistentOverTogglesRow = new PrefRow({ label: persistentOverTogglesKey.get_summary(), desc: persistentOverTogglesKey.get_description() }); + let persistentOverTogglesSwitch = new Gtk.Switch(); + settings.bind('persistent-over-toggles', persistentOverTogglesSwitch, 'active', 0); + persistentOverTogglesRow.addWidget(persistentOverTogglesSwitch, true); + listBox.add(persistentOverTogglesRow); + + let persistentOverRestartsKey = schema.get_key('persistent-over-restarts'); + let persistentOverRestartsRow = new PrefRow({ label: persistentOverRestartsKey.get_summary(), desc: persistentOverRestartsKey.get_description() }); + let persistentOverRestartsSwitch = new Gtk.Switch(); + settings.bind('persistent-over-restarts', persistentOverRestartsSwitch, 'active', 0); + persistentOverRestartsRow.addWidget(persistentOverRestartsSwitch, true); + persistentOverTogglesSwitch.bind_property('active', persistentOverRestartsSwitch, 'sensitive', GObject.BindingFlags.SYNC_CREATE); + listBox.add(persistentOverRestartsRow); let desktopKey = schema.get_key('drawing-on-desktop'); let desktopRow = new PrefRow({ label: desktopKey.get_summary(), desc: desktopKey.get_description() }); let desktopSwitch = new Gtk.Switch(); settings.bind('drawing-on-desktop', desktopSwitch, 'active', 0); desktopRow.addWidget(desktopSwitch, true); + persistentOverTogglesSwitch.bind_property('active', desktopSwitch, 'sensitive', GObject.BindingFlags.SYNC_CREATE); listBox.add(desktopRow); let osdKey = schema.get_key('osd-disabled'); diff --git a/schemas/gschemas.compiled b/schemas/gschemas.compiled index 53d5dbc..76b17ef 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 9568ed4..8a656cb 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 @@ -20,10 +20,15 @@ false Disable on-screen notifications - + + true + Persistent over toggles + Drawing remains when toggling drawing mode + + false - Persistent - Persistent drawing through session restart + Persistent over restarts + Drawing is automatically saved to a file ["<Alt><Super>d"]