diff --git a/Settings.ui b/Settings.ui index 707537c..9b36800 100644 --- a/Settings.ui +++ b/Settings.ui @@ -1816,6 +1816,50 @@ + + + True + True + + + True + False + 12 + 12 + 12 + 12 + 12 + 32 + + + True + False + True + Only hide secondary panels (requires multi-monitors option) + True + 0 + + + 0 + 0 + + + + + True + True + end + center + + + 1 + 0 + + + + + + True diff --git a/intellihide.js b/intellihide.js index 1d6859d..f915932 100644 --- a/intellihide.js +++ b/intellihide.js @@ -61,10 +61,10 @@ var Intellihide = new Lang.Class({ this._timeoutsHandler = new Utils.TimeoutsHandler(); this._intellihideChangedId = this._dtpSettings.connect('changed::intellihide', () => this._changeEnabledStatus()); + this._intellihideOnlySecondaryChangedId = this._dtpSettings.connect('changed::intellihide-only-secondary', () => this._changeEnabledStatus()); - if (this._dtpSettings.get_boolean('intellihide')) { - this.enable(); - } + this._enabled = false; + this._changeEnabledStatus(); }, enable: function(reset) { @@ -121,6 +121,7 @@ var Intellihide = new Lang.Class({ destroy: function() { this._dtpSettings.disconnect(this._intellihideChangedId); + this._dtpSettings.disconnect(this._intellihideOnlySecondaryChangedId); this.disable(); }, @@ -150,7 +151,13 @@ var Intellihide = new Lang.Class({ }, _changeEnabledStatus: function() { - this[this._dtpSettings.get_boolean('intellihide') ? 'enable' : 'disable'](); + let intellihide = this._dtpSettings.get_boolean('intellihide'); + let onlySecondary = this._dtpSettings.get_boolean('intellihide-only-secondary'); + let enabled = intellihide && (this._dtpPanel.isSecondary || !onlySecondary); + + if (this._enabled !== enabled) { + this[enabled ? 'enable' : 'disable'](); + } }, _bindGeneralSignals: function() { diff --git a/prefs.js b/prefs.js index 157c972..ae8b37c 100644 --- a/prefs.js +++ b/prefs.js @@ -695,7 +695,22 @@ const Settings = new Lang.Class({ this._settings.bind('intellihide-show-in-fullscreen', this._builder.get_object('intellihide_show_in_fullscreen_switch'), 'active', - Gio.SettingsBindFlags.DEFAULT); + Gio.SettingsBindFlags.DEFAULT); + + this._settings.bind('intellihide-only-secondary', + this._builder.get_object('intellihide_only_secondary_switch'), + 'active', + Gio.SettingsBindFlags.DEFAULT); + + this._settings.bind('multi-monitors', + this._builder.get_object('grid_intellihide_only_secondary'), + 'sensitive', + Gio.SettingsBindFlags.DEFAULT); + + this._builder.get_object('multimon_multi_switch').connect('notify::active', (widget) => { + if (!widget.get_active()) + this._builder.get_object('intellihide_only_secondary_switch').set_active(false); + }); this._builder.get_object('intellihide_pressure_threshold_spinbutton').set_value(this._settings.get_int('intellihide-pressure-threshold')); this._builder.get_object('intellihide_pressure_threshold_spinbutton').connect('value-changed', Lang.bind(this, function (widget) { @@ -743,6 +758,7 @@ const Settings = new Lang.Class({ this._settings.set_value('intellihide-behaviour', this._settings.get_default_value('intellihide-behaviour')); this._settings.set_value('intellihide-use-pressure', this._settings.get_default_value('intellihide-use-pressure')); this._settings.set_value('intellihide-show-in-fullscreen', this._settings.get_default_value('intellihide-show-in-fullscreen')); + this._settings.set_value('intellihide-only-secondary', this._settings.get_default_value('intellihide-only-secondary')); this._settings.set_value('intellihide-pressure-threshold', this._settings.get_default_value('intellihide-pressure-threshold')); this._builder.get_object('intellihide_pressure_threshold_spinbutton').set_value(this._settings.get_int('intellihide-pressure-threshold')); diff --git a/schemas/org.gnome.shell.extensions.dash-to-panel.gschema.xml b/schemas/org.gnome.shell.extensions.dash-to-panel.gschema.xml index 0db63d5..ceccb12 100644 --- a/schemas/org.gnome.shell.extensions.dash-to-panel.gschema.xml +++ b/schemas/org.gnome.shell.extensions.dash-to-panel.gschema.xml @@ -290,6 +290,11 @@ Intellihide pressure Allow the panel to be revealed while an application is in fullscreen mode + + false + Intellihide only secondary + Whether to only hide secondary panels + 200 Intellihide animation time