diff --git a/Settings.ui b/Settings.ui
index 6ef61c8..523235a 100644
--- a/Settings.ui
+++ b/Settings.ui
@@ -7392,31 +7392,6 @@
0
-
-
-
- 0
- 1
-
-
-
-
-
- 1
- 1
-
-
0
- 2
+ 3
@@ -7439,9 +7414,59 @@
1
+ 3
+
+
+
+
+
+ 0
2
+
+
+
+ 1
+ 2
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+
+ 1
+ 1
+
+
diff --git a/intellihide.js b/intellihide.js
index e99e108..c4c9c97 100644
--- a/intellihide.js
+++ b/intellihide.js
@@ -157,7 +157,7 @@ var Intellihide = Utils.defineClass({
_changeEnabledStatus: function() {
let intellihide = Me.settings.get_boolean('intellihide');
let onlySecondary = Me.settings.get_boolean('intellihide-only-secondary');
- let enabled = intellihide && (this._dtpPanel.isSecondary || !onlySecondary);
+ let enabled = intellihide && !(this._dtpPanel.isPrimary && onlySecondary);
if (this.enabled !== enabled) {
this[enabled ? 'enable' : 'disable']();
diff --git a/panel.js b/panel.js
index c126197..98416db 100644
--- a/panel.js
+++ b/panel.js
@@ -117,7 +117,7 @@ var dtpPanel = Utils.defineClass({
Name: 'DashToPanel-Panel',
Extends: St.Widget,
- _init: function(panelManager, monitor, panelBox, isSecondary) {
+ _init: function(panelManager, monitor, panelBox, isStandalone) {
let position = getPosition();
this.callParent('_init', { layout_manager: new Clutter.BinLayout() });
@@ -130,11 +130,18 @@ var dtpPanel = Utils.defineClass({
this.monitor = monitor;
this.panelBox = panelBox;
- this.isSecondary = isSecondary;
+
+ // when the original gnome-shell top panel is kept, all panels are "standalone",
+ // so in this case use isPrimary to get the panel on the primary dtp monitor, which
+ // might be different from the system's primary monitor.
+ this.isStandalone = isStandalone;
+ this.isPrimary = !isStandalone || (Me.settings.get_boolean('stockgs-keep-top-panel') &&
+ monitor == panelManager.dtpPrimaryMonitor);
+
this._sessionStyle = null;
this._unmappedButtons = [];
- if (isSecondary) {
+ if (isStandalone) {
this.panel = new St.Widget({ name: 'panel', reactive: true });
this.statusArea = this.panel.statusArea = {};
@@ -185,7 +192,7 @@ var dtpPanel = Utils.defineClass({
Utils.wrapActor(this.panel._leftCorner);
Utils.wrapActor(this.panel._rightCorner);
- if (isSecondary) {
+ if (isStandalone) {
this.panel.add_child(this.panel._leftCorner.actor);
this.panel.add_child(this.panel._rightCorner.actor);
}
@@ -254,7 +261,7 @@ var dtpPanel = Utils.defineClass({
this._setPanelPosition();
- if (!this.isSecondary) {
+ if (!this.isStandalone) {
if (this.panel.vfunc_allocate) {
this._panelConnectId = 0;
Utils.hookVfunc(this.panel.__proto__, 'allocate', (box, flags) => this._mainPanelAllocate(0, box, flags));
@@ -438,14 +445,13 @@ var dtpPanel = Utils.defineClass({
this._dateMenuIndicatorPadContraints.forEach(c => indicatorPad.add_constraint(c));
}
- if (!this.isSecondary) {
+ this._setVertical(this.panel.actor, false);
+
+ if (!this.isStandalone) {
this.statusArea.dateMenu._clockDisplay.text = this.statusArea.dateMenu._clock.clock;
- this._setVertical(this.panel.actor, false);
-
['vertical', 'horizontal', 'dashtopanelMainPanel'].forEach(c => this.panel.actor.remove_style_class_name(c));
-
if(!Main.sessionMode.isLocked) {
this._setActivitiesButtonVisible(true);
this._setClockLocation("BUTTONSLEFT");
@@ -658,11 +664,16 @@ var dtpPanel = Utils.defineClass({
let lrPadding = panelBoxTheme.get_padding(St.Side.RIGHT) + panelBoxTheme.get_padding(St.Side.LEFT);
let tbPadding = panelBoxTheme.get_padding(St.Side.TOP) + panelBoxTheme.get_padding(St.Side.BOTTOM);
let position = getPosition();
+ let gsTopPanelOffset = 0;
let x = 0, y = 0;
let w = 0, h = 0;
size = Me.settings.get_int('panel-size') * scaleFactor;
+ if (Me.settings.get_boolean('stockgs-keep-top-panel') && Main.layoutManager.primaryMonitor == this.monitor) {
+ gsTopPanelOffset = Main.layoutManager.panelBox.height;
+ }
+
if (checkIfVertical()) {
if (!Me.settings.get_boolean('group-apps')) {
// add window title width and side padding of _dtpIconContainer when vertical
@@ -674,7 +685,7 @@ var dtpPanel = Utils.defineClass({
varCoord = { c1: 'y1', c2: 'y2' };
w = size;
- h = this.monitor.height - tbPadding;
+ h = this.monitor.height - tbPadding - gsTopPanelOffset;
} else {
sizeFunc = 'get_preferred_width';
fixedCoord = { c1: 'y1', c2: 'y2' };
@@ -686,10 +697,10 @@ var dtpPanel = Utils.defineClass({
if (position == St.Side.TOP || position == St.Side.LEFT) {
x = this.monitor.x;
- y = this.monitor.y;
+ y = this.monitor.y + gsTopPanelOffset;
} else if (position == St.Side.RIGHT) {
x = this.monitor.x + this.monitor.width - size - lrPadding;
- y = this.monitor.y;
+ y = this.monitor.y + gsTopPanelOffset;
} else { //BOTTOM
x = this.monitor.x;
y = this.monitor.y + this.monitor.height - size - tbPadding;
@@ -970,41 +981,43 @@ var dtpPanel = Utils.defineClass({
_formatVerticalClock: function() {
// https://github.com/GNOME/gnome-desktop/blob/master/libgnome-desktop/gnome-wall-clock.c#L310
- let datetime = this.statusArea.dateMenu._clock.clock;
- let datetimeParts = datetime.split(' ');
- let time = datetimeParts[1];
- let clockText = this.statusArea.dateMenu._clockDisplay.clutter_text;
- let setClockText = text => {
- let stacks = text instanceof Array;
- let separator = '\n‧‧\n';
-
- clockText.set_text((stacks ? text.join(separator) : text).trim());
- clockText.set_use_markup(stacks);
- clockText.get_allocation_box();
-
- return !clockText.get_layout().is_ellipsized();
- };
+ if (this.statusArea.dateMenu) {
+ let datetime = this.statusArea.dateMenu._clock.clock;
+ let datetimeParts = datetime.split(' ');
+ let time = datetimeParts[1];
+ let clockText = this.statusArea.dateMenu._clockDisplay.clutter_text;
+ let setClockText = text => {
+ let stacks = text instanceof Array;
+ let separator = '\n‧‧\n';
+
+ clockText.set_text((stacks ? text.join(separator) : text).trim());
+ clockText.set_use_markup(stacks);
+ clockText.get_allocation_box();
+
+ return !clockText.get_layout().is_ellipsized();
+ };
- if (!time) {
- datetimeParts = datetime.split(' ');
- time = datetimeParts.pop();
- datetimeParts = [datetimeParts.join(' '), time];
- }
-
- if (!setClockText(datetime) &&
- !setClockText(datetimeParts) &&
- !setClockText(time)) {
- let timeParts = time.split('∶');
-
- if (!this._clockFormat) {
- this._clockFormat = Me.desktopSettings.get_string('clock-format');
+ if (!time) {
+ datetimeParts = datetime.split(' ');
+ time = datetimeParts.pop();
+ datetimeParts = [datetimeParts.join(' '), time];
}
- if (this._clockFormat == '12h') {
- timeParts.push.apply(timeParts, timeParts.pop().split(' '));
- }
+ if (!setClockText(datetime) &&
+ !setClockText(datetimeParts) &&
+ !setClockText(time)) {
+ let timeParts = time.split('∶');
- setClockText(timeParts);
+ if (!this._clockFormat) {
+ this._clockFormat = Me.desktopSettings.get_string('clock-format');
+ }
+
+ if (this._clockFormat == '12h') {
+ timeParts.push.apply(timeParts, timeParts.pop().split(' '));
+ }
+
+ setClockText(timeParts);
+ }
}
},
diff --git a/panelManager.js b/panelManager.js
index 8f97e49..ee8dea8 100755
--- a/panelManager.js
+++ b/panelManager.js
@@ -70,20 +70,19 @@ var dtpPanelManager = Utils.defineClass({
if(dtpPrimaryIndex < 0 || dtpPrimaryIndex >= Main.layoutManager.monitors.length)
dtpPrimaryIndex = Main.layoutManager.primaryIndex;
- let dtpPrimaryMonitor = Main.layoutManager.monitors[dtpPrimaryIndex];
-
+ this.dtpPrimaryMonitor = Main.layoutManager.monitors[dtpPrimaryIndex];
this.proximityManager = new Proximity.ProximityManager();
Utils.wrapActor(Main.panel);
Utils.wrapActor(Main.overview.dash || 0);
- this.primaryPanel = this._createPanel(dtpPrimaryMonitor);
+ this.primaryPanel = this._createPanel(this.dtpPrimaryMonitor, Me.settings.get_boolean('stockgs-keep-top-panel'));
this.allPanels = [ this.primaryPanel ];
this.overview.enable(this.primaryPanel);
if (Me.settings.get_boolean('multi-monitors')) {
- Main.layoutManager.monitors.filter(m => m != dtpPrimaryMonitor).forEach(m => {
+ Main.layoutManager.monitors.filter(m => m != this.dtpPrimaryMonitor).forEach(m => {
this.allPanels.push(this._createPanel(m, true));
});
}
@@ -96,8 +95,8 @@ var dtpPanelManager = Utils.defineClass({
let leftOrRight = (panelPosition == St.Side.LEFT || panelPosition == St.Side.RIGHT);
p.panelBox.set_size(
- leftOrRight ? -1 : p.monitor.width,
- leftOrRight ? p.monitor.height : -1
+ leftOrRight ? -1 : p.geom.w,
+ leftOrRight ? p.geom.h : -1
);
this._findPanelMenuButtons(p.panelBox).forEach(pmb => this._adjustPanelMenuButton(pmb, p.monitor, panelPosition));
@@ -116,7 +115,7 @@ var dtpPanelManager = Utils.defineClass({
});
}
- this.setFocusedMonitor(dtpPrimaryMonitor);
+ this.setFocusedMonitor(this.dtpPrimaryMonitor);
if (Panel.checkIfVertical()) {
Main.wm._getPositionForDirection = newGetPositionForDirection;
@@ -231,7 +230,8 @@ var dtpPanelManager = Utils.defineClass({
'changed::multi-monitors',
'changed::isolate-monitors',
'changed::taskbar-position',
- 'changed::panel-position'
+ 'changed::panel-position',
+ 'changed::stockgs-keep-top-panel'
],
() => this._reset()
],
@@ -282,7 +282,7 @@ var dtpPanelManager = Utils.defineClass({
Main.layoutManager._untrackActor(p.panelBox);
Main.layoutManager.removeChrome(clipContainer);
- if (p.isSecondary) {
+ if (p.isStandalone) {
p.panelBox.destroy();
} else {
p.panelBox.remove_child(p);
@@ -302,17 +302,17 @@ var dtpPanelManager = Utils.defineClass({
delete Main.wm._getPositionForDirection;
+ if (Main.layoutManager.primaryMonitor) {
+ Main.layoutManager.panelBox.set_position(Main.layoutManager.primaryMonitor.x, Main.layoutManager.primaryMonitor.y);
+ Main.layoutManager.panelBox.set_size(Main.layoutManager.primaryMonitor.width, -1);
+ }
+
if (reset) return;
this._setKeyBindings(false);
this._signalsHandler.destroy();
- if (Main.layoutManager.primaryMonitor) {
- Main.layoutManager.panelBox.set_position(Main.layoutManager.primaryMonitor.x, Main.layoutManager.primaryMonitor.y);
- Main.layoutManager.panelBox.set_size(Main.layoutManager.primaryMonitor.width, -1);
- }
-
Main.layoutManager._updateHotCorners = this._oldUpdateHotCorners;
Main.layoutManager._updateHotCorners();
@@ -373,12 +373,12 @@ var dtpPanelManager = Utils.defineClass({
return Main.overview.viewSelector._workspacesDisplay._primaryIndex == monitor.index;
},
- _createPanel: function(monitor, isSecondary) {
+ _createPanel: function(monitor, isStandalone) {
let panelBox;
let panel;
let clipContainer = new Clutter.Actor();
- if (isSecondary) {
+ if (isStandalone) {
panelBox = new St.BoxLayout({ name: 'panelBox' });
} else {
panelBox = Main.layoutManager.panelBox;
@@ -391,7 +391,7 @@ var dtpPanelManager = Utils.defineClass({
clipContainer.add_child(panelBox);
Main.layoutManager.trackChrome(panelBox, { trackFullscreen: true, affectsStruts: true, affectsInputRegion: true });
- panel = new Panel.dtpPanel(this, monitor, panelBox, isSecondary);
+ panel = new Panel.dtpPanel(this, monitor, panelBox, isStandalone);
panelBox.add(panel);
panel.enable();
@@ -454,7 +454,7 @@ var dtpPanelManager = Utils.defineClass({
},
_removePanelBarriers: function(panel) {
- if (panel.isSecondary && panel._rightPanelBarrier) {
+ if (panel.isStandalone && panel._rightPanelBarrier) {
panel._rightPanelBarrier.destroy();
}
@@ -705,7 +705,7 @@ function newUpdateHotCorners() {
function newUpdatePanelBarrier(panel) {
let barriers = {
- _rightPanelBarrier: [(panel.isSecondary ? panel : this)],
+ _rightPanelBarrier: [(panel.isStandalone ? panel : this)],
_leftPanelBarrier: [panel]
};
@@ -776,7 +776,7 @@ function newUpdatePanelBarrier(panel) {
}
function _newLookingGlassResize() {
- let topOffset = Panel.getPosition() == St.Side.TOP ? Panel.size : 0;
+ let topOffset = Panel.getPosition() == St.Side.TOP ? Panel.size : 32;
this._oldResize();
Utils.wrapActor(this);
diff --git a/prefs.js b/prefs.js
index 12ec2f3..b5d37fd 100644
--- a/prefs.js
+++ b/prefs.js
@@ -230,10 +230,7 @@ const Settings = new Lang.Class({
showDesktopWidthLabel.set_text(isVertical ? _('Show Desktop button height (px)') : _('Show Desktop button width (px)'));
},
- _bindSettings: function() {
- // Position and style panel
-
- // Position option
+ _setPositionRadios: function() {
let position = this._settings.get_string('panel-position');
switch (position) {
@@ -251,6 +248,13 @@ const Settings = new Lang.Class({
break;
}
+ },
+
+ _bindSettings: function() {
+ // Position and style panel
+
+ // Position option
+ this._setPositionRadios();
this._settings.connect('changed::panel-position', () => this._updateVerticalRelatedOptions());
this._updateVerticalRelatedOptions();
@@ -1760,6 +1764,27 @@ const Settings = new Lang.Class({
'active',
Gio.SettingsBindFlags.DEFAULT);
+ this._settings.bind('stockgs-keep-top-panel',
+ this._builder.get_object('stockgs_top_panel_switch'),
+ 'active',
+ Gio.SettingsBindFlags.DEFAULT);
+
+ var maybeDisableTopPosition = () => {
+ let keepTopPanel = this._settings.get_boolean('stockgs-keep-top-panel');
+ let topRadio = this._builder.get_object('position_top_button');
+
+ topRadio.set_sensitive(!keepTopPanel);
+ topRadio.set_tooltip_text(keepTopPanel ? _('Unavailable when gnome-shell top panel is present') : '');
+
+ if (keepTopPanel && this._settings.get_string('panel-position') == 'TOP') {
+ this._settings.set_string('panel-position', "BOTTOM");
+ this._setPositionRadios();
+ }
+ };
+
+ this._settings.connect('changed::stockgs-keep-top-panel', () => maybeDisableTopPosition());
+ maybeDisableTopPosition();
+
this._settings.bind('stockgs-panelbtn-click-only',
this._builder.get_object('stockgs_panelbtn_switch'),
'active',
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 dd6b8ab..3418d6b 100644
--- a/schemas/org.gnome.shell.extensions.dash-to-panel.gschema.xml
+++ b/schemas/org.gnome.shell.extensions.dash-to-panel.gschema.xml
@@ -192,6 +192,11 @@
Keep dash
Whether to keep the stock gnome-shell dash while in overview
+
+ false
+ Keep top panel
+ Whether to keep the stock gnome-shell top panel
+
false
Panel menu buttons require click
diff --git a/taskbar.js b/taskbar.js
index 7d37b9e..1f829c3 100644
--- a/taskbar.js
+++ b/taskbar.js
@@ -854,7 +854,7 @@ var taskbar = Utils.defineClass({
this._updateAppIcons();
// This will update the size, and the corresponding number for each icon on the primary panel
- if (!this.dtpPanel.isSecondary) {
+ if (this.dtpPanel.isPrimary) {
this._updateNumberOverlay();
}
@@ -867,7 +867,7 @@ var taskbar = Utils.defineClass({
_checkIfShowingFavorites: function() {
return Me.settings.get_boolean('show-favorites') &&
- (!this.dtpPanel.isSecondary || Me.settings.get_boolean('show-favorites-all-monitors'));
+ (this.dtpPanel.isPrimary || Me.settings.get_boolean('show-favorites-all-monitors'));
},
_getRunningApps: function() {