diff --git a/draw.js b/draw.js
index f9c20b7..28669f6 100644
--- a/draw.js
+++ b/draw.js
@@ -171,7 +171,7 @@ var DrawingArea = new Lang.Class({
_onKeyPressed: function(actor, event) {
if (event.get_key_symbol() == Clutter.Escape) {
- this.emitter.emit('stop-drawing', true);
+ this.emitter.emit('stop-drawing');
return Clutter.EVENT_STOP;
} else if (this.currentElement && this.currentElement.shape == Shapes.TEXT) {
@@ -464,10 +464,6 @@ var DrawingArea = new Lang.Class({
this.helper.showHelp();
},
- get isEmpty() {
- return this.elements.length == 0;
- },
-
enterDrawingMode: function() {
this.keyPressedHandler = this.connect('key-press-event', this._onKeyPressed.bind(this));
this.buttonPressedHandler = this.connect('button-press-event', this._onButtonPressed.bind(this));
@@ -507,7 +503,7 @@ var DrawingArea = new Lang.Class({
this._redisplay();
this.get_parent().set_background_color(null);
if (save)
- this._saveAsJson();
+ this.saveAsJson();
},
saveAsSvg: function() {
@@ -544,7 +540,7 @@ var DrawingArea = new Lang.Class({
}
},
- _saveAsJson: function() {
+ saveAsJson: function() {
let filename = `DrawOnYourScreen.json`;
let dir = GLib.get_user_data_dir();
let path = GLib.build_filenamev([dir, filename]);
@@ -556,6 +552,10 @@ var DrawingArea = new Lang.Class({
oldContents = imports.byteArray.toString(oldContents);
}
+ // do not create a file to write just an empty array
+ if (!oldContents && this.elements.length == 0)
+ return;
+
// do not use "content = JSON.stringify(this.elements, null, 2);", neither "content = JSON.stringify(this.elements);"
// because of compromise between disk usage and human readability
let contents = `[\n ` + new Array(...this.elements.map(element => JSON.stringify(element))).join(`,\n\n `) + `\n]`;
diff --git a/extension.js b/extension.js
index db9fcab..552864c 100644
--- a/extension.js
+++ b/extension.js
@@ -75,6 +75,9 @@ var AreaManager = new Lang.Class({
this.updateAreas();
this.monitorChangedHandler = Main.layoutManager.connect('monitors-changed', this.updateAreas.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));
+
if (Extension.stylesheet) {
this.stylesheetMonitor = Extension.stylesheet.monitor(Gio.FileMonitorFlags.NONE, null);
this.stylesheetChangedHandler = this.stylesheetMonitor.connect('changed', (monitor, file, otherFile, eventType) => {
@@ -87,6 +90,18 @@ var AreaManager = new Lang.Class({
}
},
+ onDesktopSettingChanged: function() {
+ if (this.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'))
+ this.areas[Main.layoutManager.primaryIndex].saveAsJson();
+ },
+
updateAreas: function() {
if (this.activeArea)
this.toggleDrawing();
@@ -103,16 +118,13 @@ var AreaManager = new Lang.Class({
container.add_child(area);
container.add_child(helper);
- if (this.settings.get_boolean("move-drawing-on-desktop"))
- Main.layoutManager._backgroundGroup.insert_child_above(container, Main.layoutManager._bgManagers[i].backgroundActor);
- else
- Main.uiGroup.insert_child_above(container, global.window_group);
+ Main.layoutManager._backgroundGroup.insert_child_above(container, Main.layoutManager._bgManagers[i].backgroundActor);
+ if (!this.settings.get_boolean("drawing-on-desktop"))
+ container.hide();
container.set_position(monitor.x, monitor.y);
container.set_size(monitor.width, monitor.height);
area.set_size(monitor.width, monitor.height);
- if (area.isEmpty)
- container.hide();
area.emitter.stopDrawingHandler = area.emitter.connect('stop-drawing', this.toggleDrawing.bind(this));
area.emitter.showOsdHandler = area.emitter.connect('show-osd', this.showOsd.bind(this));
this.areas.push(area);
@@ -183,10 +195,8 @@ var AreaManager = new Lang.Class({
},
eraseDrawing: function() {
- for (let i = 0; i < this.areas.length; i++) {
+ for (let i = 0; i < this.areas.length; i++)
this.areas[i].erase();
- this.areas[i].get_parent().hide();
- }
},
togglePanelAndDockOpacity: function() {
@@ -223,12 +233,11 @@ var AreaManager = new Lang.Class({
}
},
- toggleDrawing: function(emitter, hide) {
+ toggleDrawing: function() {
if (this.activeArea) {
let activeIndex = this.areas.indexOf(this.activeArea);
let activeContainer = this.activeArea.get_parent();
let save = activeIndex == Main.layoutManager.primaryIndex && this.settings.get_boolean('persistent-drawing');
- hide = hide || this.activeArea.isEmpty;
if (this.hiddenList)
this.togglePanelAndDockOpacity();
@@ -240,12 +249,8 @@ var AreaManager = new Lang.Class({
this.activeArea = null;
activeContainer.get_parent().remove_actor(activeContainer);
- if (this.settings.get_boolean("move-drawing-on-desktop"))
- Main.layoutManager._backgroundGroup.insert_child_above(activeContainer, Main.layoutManager._bgManagers[activeIndex].backgroundActor);
- else
- Main.uiGroup.insert_child_above(activeContainer, global.window_group);
-
- if (hide)
+ Main.layoutManager._backgroundGroup.insert_child_above(activeContainer, Main.layoutManager._bgManagers[activeIndex].backgroundActor);
+ if (!this.settings.get_boolean("drawing-on-desktop"))
activeContainer.hide();
// check display or screen (API changes)
@@ -313,6 +318,14 @@ var AreaManager = new Lang.Class({
Main.layoutManager.disconnect(this.monitorChangedHandler);
this.monitorChangedHandler = null;
}
+ if (this.desktopSettingHandler) {
+ this.settings.disconnect(this.desktopSettingHandler);
+ this.desktopSettingHandler = null;
+ }
+ if (this.persistentSettingHandler) {
+ this.settings.disconnect(this.persistentSettingHandler);
+ this.persistentSettingHandler = null;
+ }
if (this.activeArea)
this.toggleDrawing();
diff --git a/locale/draw-on-your-screen.pot b/locale/draw-on-your-screen.pot
index 009c315..a1ab2ec 100644
--- a/locale/draw-on-your-screen.pot
+++ b/locale/draw-on-your-screen.pot
@@ -201,7 +201,7 @@ msgstr ""
msgid "Shift key held"
msgstr ""
-msgid "Leave and hide the drawing"
+msgid "Leave"
msgstr ""
msgid "Escape key"
@@ -217,7 +217,7 @@ msgstr ""
msgid "Global"
msgstr ""
-msgid "Move drawing on the desktop when leaving drawing mode"
+msgid "Drawing on the desktop"
msgstr ""
msgid "Draw On Your Screen becomes Draw On Your Desktop"
@@ -226,7 +226,7 @@ msgstr ""
msgid "Persistent"
msgstr ""
-msgid "Persistent drawing through restart"
+msgid "Persistent drawing through session restart"
msgstr ""
msgid "Internal"
diff --git a/prefs.js b/prefs.js
index 7089bba..adca46c 100644
--- a/prefs.js
+++ b/prefs.js
@@ -78,7 +78,7 @@ var OTHER_SHORTCUTS = [
{ desc: "Increment/decrement line width", shortcut: "Scroll" },
{ desc: "Select color", shortcut: "Ctrl+1...9" },
{ desc: "Select eraser", shortcut: "Shift key held" },
- { desc: "Leave and hide the drawing", shortcut: "Escape key" }
+ { desc: "Leave", shortcut: "Escape key" }
];
function init() {
@@ -128,14 +128,14 @@ const PrefsPage = new GObject.Class({
let desktopBox = new Gtk.Box({ margin: MARGIN });
let desktopLabelBox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL });
- let desktopLabel1 = new Gtk.Label({label: _("Move drawing on the desktop when leaving drawing mode")});
+ let desktopLabel1 = new Gtk.Label({label: _("Drawing on the desktop")});
let desktopLabel2 = new Gtk.Label({ use_markup: true, halign: 1, label: "" + _("Draw On Your Screen becomes Draw On Your Desktop") + "" });
desktopLabel1.set_halign(1);
desktopLabel2.get_style_context().add_class("dim-label");
desktopLabelBox.pack_start(desktopLabel1, true, true, 0);
desktopLabelBox.pack_start(desktopLabel2, true, true, 0);
let desktopSwitch = new Gtk.Switch({valign: 3});
- this.settings.bind("move-drawing-on-desktop", desktopSwitch, "active", 0);
+ this.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);
@@ -143,7 +143,7 @@ const PrefsPage = new GObject.Class({
let persistentBox = new Gtk.Box({ margin: MARGIN });
let persistentLabelBox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL });
let persistentLabel1 = new Gtk.Label({label: _("Persistent")});
- let persistentLabel2 = new Gtk.Label({ use_markup: true, halign: 1, label: "" + _("Persistent drawing through restart") + "" });
+ let persistentLabel2 = new Gtk.Label({ use_markup: true, halign: 1, label: "" + _("Persistent drawing through session restart") + "" });
persistentLabel1.set_halign(1);
persistentLabel2.get_style_context().add_class("dim-label");
persistentLabelBox.pack_start(persistentLabel1, true, true, 0);
diff --git a/schemas/gschemas.compiled b/schemas/gschemas.compiled
index a0f2bb1..dfce124 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 225c21d..57c0d1c 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
@@ -6,7 +6,7 @@
smoothed stroke
smoothed stroke
-
+
false
move drawing on desktop
move drawing on desktop