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