From 23eea44661285ac116f339464ad8bb627518d31b Mon Sep 17 00:00:00 2001 From: abakkk Date: Thu, 17 Sep 2020 17:30:30 +0200 Subject: [PATCH] add "Persistent over toggles' setting * Rename "Persistent" to "Persistent over restarts". * If disabled, "Persistent over toggles" has priority over "Persistent over restarts" and "Drawing on the desktop". Close issue #42. --- area.js | 7 ++- extension.js | 52 +++++++++++++----- locale/draw-on-your-screen.pot | 12 +++- prefs.js | 21 +++++-- schemas/gschemas.compiled | Bin 7376 -> 7464 bytes ...extensions.draw-on-your-screen.gschema.xml | 11 +++- 6 files changed, 76 insertions(+), 27 deletions(-) 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 53d5dbc4d661ccc3f82e74be45e90f97d3df8a5e..76b17efbbdb4dbb3ddec71fd0a4fff0ce6d9962b 100644 GIT binary patch delta 2402 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 C4#Zpl 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"]