From 3fcf4e27b6bef86a08a6458c64f01ee567ced412 Mon Sep 17 00:00:00 2001
From: abakkk <33428071+abakkk@users.noreply.github.com>
Date: Tue, 7 Nov 2017 18:46:37 +0100
Subject: [PATCH] Add the feature to move taskbar in center panel, including
user settings Finally there are three choices to dash-to-panel users: -
taskbar in left panel as currently - taskbar in center panel, centered
between the left and the right panel - taskbar in center panel, centered in
monitor without considering left and right panels size Missing the
translation of new pref. And it would be maybe better to use "if" loops
rather than logical operations with booleans "ctb" and "cim" in the
calculation of allocation size in panel.js
---
Settings.ui | 71 +++++++++++++++++++
panel.js | 38 +++++++---
prefs.js | 4 ++
...shell.extensions.dash-to-panel.gschema.xml | 10 +++
4 files changed, 115 insertions(+), 8 deletions(-)
diff --git a/Settings.ui b/Settings.ui
index 8d11049..cd4f188 100644
--- a/Settings.ui
+++ b/Settings.ui
@@ -2166,6 +2166,77 @@
2
+
+
+
+ False
+ True
+ 3
+
+
diff --git a/panel.js b/panel.js
index 6cbfa5b..61f215e 100644
--- a/panel.js
+++ b/panel.js
@@ -55,11 +55,21 @@ var dtpPanel = new Lang.Class({
_init: function(settings) {
this._dtpSettings = settings;
this.panelStyle = new PanelStyle.dtpPanelStyle(settings);
+ //rebuild panel when taskar-position change
+ this._dtpSettings.connect('changed::taskbar-position', Lang.bind(this, function() {
+ this.disable();
+ this.enable();
+ }));
},
enable : function() {
this.panel = Main.panel;
- this.container = this.panel._leftBox;
+ //choose the leftBox or the centerBox to build taskbar
+ if (this._dtpSettings.get_string('taskbar-position') == 'LEFTPANEL') {
+ this.container = this.panel._leftBox;
+ } else {
+ this.container = this.panel._centerBox;
+ }
this.appMenu = this.panel.statusArea.appMenu;
this.panelBox = Main.layoutManager.panelBox;
@@ -328,29 +338,41 @@ var dtpPanel = new Lang.Class({
let [centerMinWidth, centerNaturalWidth] = this.panel._centerBox.get_preferred_width(-1);
let [rightMinWidth, rightNaturalWidth] = this.panel._rightBox.get_preferred_width(-1);
- let sideWidth = allocWidth - rightNaturalWidth - centerNaturalWidth;
+ //I use ctb and cim variables to make diff reading easier. This must be replaced by if loups.
+ let taskbarPosition = this._dtpSettings.get_string('taskbar-position');
+ let ctb = (taskbarPosition != 'LEFTPANEL'); // ctb: centered taskbar
+ let cim = (taskbarPosition == 'CENTEREDMONITOR'); // cim: centered in monitor
+
+ let sideWidth, leftSideWidth, rightSideWidth;
+ if(ctb && !cim) {
+ leftSideWidth = (allocWidth - centerNaturalWidth + leftNaturalWidth - rightNaturalWidth) / 2;
+ rightSideWidth = (allocWidth - centerNaturalWidth - leftNaturalWidth + rightNaturalWidth) / 2;
+ sideWidth = 0;
+ } else {
+ sideWidth = leftSideWidth = rightSideWidth = (!ctb)*(allocWidth - rightNaturalWidth - centerNaturalWidth) + ctb*((allocWidth - centerNaturalWidth) / 2);
+ }
let childBox = new Clutter.ActorBox();
childBox.y1 = 0;
childBox.y2 = allocHeight;
if (this.panel.actor.get_text_direction() == Clutter.TextDirection.RTL) {
- childBox.x1 = allocWidth - Math.min(Math.floor(sideWidth), leftNaturalWidth);
+ childBox.x1 = allocWidth - ctb*leftNaturalWidth - (!ctb)*sideWidth;
childBox.x2 = allocWidth;
} else {
childBox.x1 = 0;
- childBox.x2 = sideWidth;
+ childBox.x2 = ctb*leftNaturalWidth + (!ctb)*sideWidth;
}
this.panel._leftBox.allocate(childBox, flags, true);
childBox.y1 = 0;
childBox.y2 = allocHeight;
if (this.panel.actor.get_text_direction() == Clutter.TextDirection.RTL) {
- childBox.x1 = rightNaturalWidth;
- childBox.x2 = childBox.x1 + centerNaturalWidth;
+ childBox.x1 = allocWidth - ctb*(allocWidth - Math.max(rightNaturalWidth, rightSideWidth)) - (!ctb)*(childBox.x1 + centerNaturalWidth);
+ childBox.x2 = allocWidth - ctb*(Math.max(leftNaturalWidth, leftSideWidth)) - (!ctb)*(allocWidth - centerNaturalWidth - rightNaturalWidth);
} else {
- childBox.x1 = allocWidth - centerNaturalWidth - rightNaturalWidth;
- childBox.x2 = childBox.x1 + centerNaturalWidth;
+ childBox.x1 = ctb*(Math.max(leftNaturalWidth, leftSideWidth)) + (!ctb)*(allocWidth - centerNaturalWidth - rightNaturalWidth);
+ childBox.x2 = ctb*(allocWidth - Math.max(rightNaturalWidth, rightSideWidth)) + (!ctb)*(childBox.x1 + centerNaturalWidth);
}
this.panel._centerBox.allocate(childBox, flags, true);
diff --git a/prefs.js b/prefs.js
index 90aacd3..1015512 100644
--- a/prefs.js
+++ b/prefs.js
@@ -201,6 +201,10 @@ const Settings = new Lang.Class({
this._builder.get_object('location_clock_combo').connect('changed', Lang.bind (this, function(widget) {
this._settings.set_string('location-clock', widget.get_active_id());
}));
+ this._builder.get_object('taskbar_position_combo').set_active_id(this._settings.get_string('taskbar-position'));
+ this._builder.get_object('taskbar_position_combo').connect('changed', Lang.bind (this, function(widget) {
+ this._settings.set_string('taskbar-position', widget.get_active_id());
+ }));
// size options
let panel_size_scale = this._builder.get_object('panel_size_scale');
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 7f8e32f..8605f33 100644
--- a/schemas/org.gnome.shell.extensions.dash-to-panel.gschema.xml
+++ b/schemas/org.gnome.shell.extensions.dash-to-panel.gschema.xml
@@ -22,6 +22,11 @@
+
+
+
+
+
@@ -132,6 +137,11 @@
Location of the clock
Set the location of the clock on the taskbar
+
+ 'LEFTPANEL'
+ Position of the taskbar
+ Set the position of the taskbar on the panel
+
true
Show applications button