diff --git a/draw.js b/draw.js
index de707c5..cca7194 100644
--- a/draw.js
+++ b/draw.js
@@ -506,7 +506,6 @@ var DrawingArea = new Lang.Class({
this.buttonPressedHandler = this.connect('button-press-event', this._onButtonPressed.bind(this));
this._onKeyboardPopupMenuHandler = this.connect('popup-menu', this._onKeyboardPopupMenu.bind(this));
this.scrollHandler = this.connect('scroll-event', this._onScroll.bind(this));
- this.selectShape(Shapes.NONE);
this.get_parent().set_background_color(this.hasBackground ? this.activeBackgroundColor : null);
this._updateStyle();
},
@@ -542,6 +541,7 @@ var DrawingArea = new Lang.Class({
this.currentElement = null;
this._stopCursorTimeout();
+ this.currentShape = Shapes.NONE;
this.dashedLine = false;
this.fill = false;
this._redisplay();
diff --git a/extension.js b/extension.js
index 176c37d..e928394 100644
--- a/extension.js
+++ b/extension.js
@@ -25,8 +25,11 @@ const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
+
const Main = imports.ui.main;
const OsdWindow = imports.ui.osdWindow;
+const PanelMenu = imports.ui.panelMenu;
+
const Extension = imports.misc.extensionUtils.getCurrentExtension();
const Convenience = Extension.imports.convenience;
const Draw = Extension.imports.draw;
@@ -78,6 +81,9 @@ var AreaManager = new Lang.Class({
this.updateAreas();
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.desktopSettingHandler = this.settings.connect('changed::drawing-on-desktop', this.onDesktopSettingChanged.bind(this));
this.persistentSettingHandler = this.settings.connect('changed::persistent-drawing', this.onPersistentSettingChanged.bind(this));
@@ -105,6 +111,15 @@ var AreaManager = new Lang.Class({
this.areas[Main.layoutManager.primaryIndex].saveAsJson();
},
+ updateIndicator: function() {
+ if (this.indicator) {
+ this.indicator.disable();
+ this.indicator = null;
+ }
+ if (!this.settings.get_boolean('indicator-disabled'))
+ this.indicator = new DrawingIndicator();
+ },
+
updateAreas: function() {
if (this.activeArea)
this.toggleDrawing();
@@ -264,8 +279,8 @@ var AreaManager = new Lang.Class({
global.display.set_cursor(Meta.Cursor.DEFAULT);
else if (global.screen && global.screen.set_cursor)
global.screen.set_cursor(Meta.Cursor.DEFAULT);
-
- Main.osdWindowManager.show(activeIndex, this.leaveGicon, _("Leaving drawing mode"), null);
+ if (!this.osdDisabled)
+ Main.osdWindowManager.show(activeIndex, this.leaveGicon, _("Leaving drawing mode"), null);
} else {
// avoid to deal with Meta changes (global.display/global.screen)
let currentIndex = Main.layoutManager.monitors.indexOf(Main.layoutManager.currentMonitor);
@@ -287,16 +302,24 @@ var AreaManager = new Lang.Class({
global.display.set_cursor(Meta.Cursor.POINTING_HAND);
else if (global.screen && global.screen.set_cursor)
global.screen.set_cursor(Meta.Cursor.POINTING_HAND);
-
- // increase OSD display time
- let hideTimeoutSave = OsdWindow.HIDE_TIMEOUT;
- OsdWindow.HIDE_TIMEOUT = 2000;
- Main.osdWindowManager.show(currentIndex, this.enterGicon, _("Press Ctrl + F1 for help") + "\n\n" + _("Entering drawing mode"), null);
- OsdWindow.HIDE_TIMEOUT = hideTimeoutSave;
+
+ this.osdDisabled = this.settings.get_boolean('osd-disabled');
+ if (!this.osdDisabled) {
+ // increase OSD display time
+ let hideTimeoutSave = OsdWindow.HIDE_TIMEOUT;
+ OsdWindow.HIDE_TIMEOUT = 2000;
+ Main.osdWindowManager.show(currentIndex, this.enterGicon, _("Press Ctrl + F1 for help") + "\n\n" + _("Entering drawing mode"), null);
+ OsdWindow.HIDE_TIMEOUT = hideTimeoutSave;
+ }
}
+
+ if (this.indicator)
+ this.indicator.sync(this.activeArea != null);
},
showOsd: function(emitter, label, level, maxLevel) {
+ if (this.osdDisabled)
+ return;
let activeIndex = this.areas.indexOf(this.activeArea);
if (activeIndex != -1) {
Main.osdWindowManager.show(activeIndex, this.enterGicon, label, level, maxLevel);
@@ -326,6 +349,10 @@ var AreaManager = new Lang.Class({
Main.layoutManager.disconnect(this.monitorChangedHandler);
this.monitorChangedHandler = null;
}
+ if (this.indicatorSettingHandler) {
+ this.settings.disconnect(this.indicatorSettingHandler);
+ this.indicatorSettingHandler = null;
+ }
if (this.desktopSettingHandler) {
this.settings.disconnect(this.desktopSettingHandler);
this.desktopSettingHandler = null;
@@ -340,6 +367,31 @@ var AreaManager = new Lang.Class({
Main.wm.removeKeybinding('toggle-drawing');
Main.wm.removeKeybinding('erase-drawing');
this.removeAreas();
+ if (this.indicator)
+ this.indicator.disable();
+ }
+});
+
+var DrawingIndicator = new Lang.Class({
+ Name: 'DrawOnYourScreenIndicator',
+
+ _init: function() {
+ let [menuAlignment, dontCreateMenu] = [0, true];
+ this.button = new PanelMenu.Button(menuAlignment, "Drawing Indicator", dontCreateMenu);
+ Main.panel.addToStatusArea('draw-on-your-screen-indicator', this.button);
+
+ this.icon = new St.Icon({ icon_name: 'applications-graphics-symbolic',
+ style_class: 'system-status-icon screencast-indicator' });
+ this.button.actor.add_child(this.icon);
+ this.button.actor.visible = false;
+ },
+
+ sync: function(visible) {
+ this.button.actor.visible = visible;
+ },
+
+ disable: function() {
+ this.button.destroy();
}
});
diff --git a/locale/draw-on-your-screen.pot b/locale/draw-on-your-screen.pot
index eb1d9ae..eb936e2 100644
--- a/locale/draw-on-your-screen.pot
+++ b/locale/draw-on-your-screen.pot
@@ -277,6 +277,12 @@ msgstr ""
msgid "Persistent drawing through session restart"
msgstr ""
+msgid "Disable on-screen notifications"
+msgstr ""
+
+msgid "Disable panel indicator"
+msgstr ""
+
msgid "Internal"
msgstr ""
diff --git a/prefs.js b/prefs.js
index 890ec9d..ba791e0 100644
--- a/prefs.js
+++ b/prefs.js
@@ -109,7 +109,7 @@ function buildPrefsWidget() {
return topStack;
}
-const TopStack = new GObject.Class({
+var TopStack = new GObject.Class({
Name: 'DrawOnYourScreenTopStack',
GTypeName: 'DrawOnYourScreenTopStack',
Extends: Gtk.Stack,
@@ -123,7 +123,7 @@ const TopStack = new GObject.Class({
}
});
-const AboutPage = new GObject.Class({
+var AboutPage = new GObject.Class({
Name: 'DrawOnYourScreenAboutPage',
GTypeName: 'DrawOnYourScreenAboutPage',
Extends: Gtk.ScrolledWindow,
@@ -170,7 +170,7 @@ const AboutPage = new GObject.Class({
});
-const PrefsPage = new GObject.Class({
+var PrefsPage = new GObject.Class({
Name: 'DrawOnYourScreenPrefsPage',
GTypeName: 'DrawOnYourScreenPrefsPage',
Extends: Gtk.ScrolledWindow,
@@ -226,6 +226,28 @@ const PrefsPage = new GObject.Class({
persistentBox.pack_start(persistentLabelBox, true, true, 4);
persistentBox.pack_start(persistentSwitch, false, false, 4);
listBox.add(persistentBox);
+
+ let osdBox = new Gtk.Box({ margin: MARGIN });
+ let osdLabelBox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL });
+ let osdLabel1 = new Gtk.Label({label: _("Disable on-screen notifications")});
+ 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);
+ osdBox.pack_start(osdLabelBox, true, true, 4);
+ osdBox.pack_start(osdSwitch, false, false, 4);
+ listBox.add(osdBox);
+
+ let indicatorBox = new Gtk.Box({ margin: MARGIN });
+ let indicatorLabelBox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL });
+ let indicatorLabel1 = new Gtk.Label({label: _("Disable panel indicator")});
+ 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);
+ indicatorBox.pack_start(indicatorLabelBox, true, true, 4);
+ indicatorBox.pack_start(indicatorSwitch, false, false, 4);
+ listBox.add(indicatorBox);
this.addSeparator(listBox);
let internalTitleBox = new Gtk.Box({ margin: MARGIN });
@@ -313,7 +335,7 @@ const PrefsPage = new GObject.Class({
});
// this code comes from Sticky Notes View by Sam Bull, https://extensions.gnome.org/extension/568/notes/
-const KeybindingsWidget = new GObject.Class({
+var KeybindingsWidget = new GObject.Class({
Name: 'DrawOnYourScreenKeybindings.Widget',
GTypeName: 'DrawOnYourScreenKeybindingsWidget',
Extends: Gtk.Box,
diff --git a/schemas/gschemas.compiled b/schemas/gschemas.compiled
index 6645b28..329554d 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 770e394..9864222 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
@@ -16,6 +16,16 @@
persistent drawing
persistent drawing
+
+ false
+ disable OSD notifications
+ disable on-screen notifications
+
+
+ false
+ disable panel indicator
+ disable panel indicator
+
["<Alt><Super>d"]
toggle drawing