diff --git a/src/panel.js b/src/panel.js
index 264efc6..3aa215b 100644
--- a/src/panel.js
+++ b/src/panel.js
@@ -578,7 +578,10 @@ export const Panel = GObject.registerClass(
'changed::appicon-margin-toscreenborder',
'changed::group-apps',
],
- () => this._resetGeometry(),
+ (settings, settingChanged) => {
+ PanelSettings.clearCache(settingChanged)
+ this._resetGeometry()
+ },
],
[
SETTINGS,
diff --git a/src/panelManager.js b/src/panelManager.js
index 656d947..dd14070 100755
--- a/src/panelManager.js
+++ b/src/panelManager.js
@@ -60,8 +60,9 @@ export const PanelManager = class {
}
enable(reset) {
- let dtpPrimaryIndex =
- PanelSettings.monitorIdToIndex[SETTINGS.get_string('primary-monitor')]
+ let dtpPrimaryIndex = PanelSettings.getPrimaryIndex(
+ SETTINGS.get_string('primary-monitor'),
+ )
this.allPanels = []
this.dtpPrimaryMonitor =
diff --git a/src/panelSettings.js b/src/panelSettings.js
index ccb8573..0c913f4 100644
--- a/src/panelSettings.js
+++ b/src/panelSettings.js
@@ -38,11 +38,11 @@ const displayConfigWrapper = Gio.DBusProxy.makeProxyWrapper(
let prefsOpenedId = null
let useCache = false
let cache = {}
+let monitorIdToIndex = {}
+let monitorIndexToId = {}
export var displayConfigProxy = null
export var availableMonitors = []
-export var monitorIdToIndex = {}
-export var monitorIndexToId = {}
export async function init(settings) {
useCache = true
@@ -100,7 +100,12 @@ function getMonitorSetting(settings, settingName, monitorIndex, fallback) {
settings = getSettingsJson(settings, settingName)
- return settings[monitorId] || settings[monitorIndex] || fallback
+ return (
+ settings[monitorId] ||
+ settings[monitorIndex] ||
+ settings[availableMonitors[monitorIndex]?.id] ||
+ fallback
+ )
}
function setMonitorSetting(settings, settingName, monitorIndex, value) {
@@ -205,6 +210,15 @@ export function setPanelElementPositions(settings, monitorIndex, value) {
setMonitorSetting(settings, 'panel-element-positions', monitorIndex, value)
}
+export function getPrimaryIndex(dtpPrimaryId) {
+ if (dtpPrimaryId in monitorIdToIndex) return monitorIdToIndex[dtpPrimaryId]
+
+ if (dtpPrimaryId.match(/^\d{1,2}$/) && availableMonitors[dtpPrimaryId])
+ return dtpPrimaryId
+
+ return availableMonitors.findIndex((am) => am.primary)
+}
+
export async function setMonitorsInfo(settings) {
return new Promise((resolve, reject) => {
try {
@@ -214,22 +228,32 @@ export async function setMonitorsInfo(settings) {
if (e) return reject(`Error getting display state: ${e}`)
let gsPrimaryIndex = 0
+ let ids = {}
//https://gitlab.gnome.org/GNOME/mutter/-/blob/main/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml#L347
displayInfo[2].forEach((logicalMonitor, i) => {
- let id = logicalMonitor[5][0][3]
+ let [connector, vendor, product, serial] = logicalMonitor[5][0]
+ let id = i
let primary = logicalMonitor[4]
+ // if by any chance 2 monitors have the same id, use the connector string
+ // instead, which should be unique but varies between x11 and wayland :(
+ // worst case scenario, resort to using the dumbass index
+ if (vendor && serial) id = `${vendor}-${serial}`
+
+ if (ids[id]) id = connector && !ids[connector] ? connector : i
+
if (primary) gsPrimaryIndex = i
monitorInfos.push({
id,
- name: logicalMonitor[5][0][2],
+ product,
primary,
})
monitorIdToIndex[id] = i
monitorIndexToId[i] = id
+ ids[id] = 1
})
_saveMonitors(settings, monitorInfos, gsPrimaryIndex)
@@ -261,11 +285,12 @@ function _saveMonitors(settings, monitorInfos, gsPrimaryIndex) {
let dtpPrimaryMonitor = settings.get_string(keyPrimary)
// convert previously saved index to monitor id
- if (dtpPrimaryMonitor.match(/^\d{1,2}$/))
- dtpPrimaryMonitor = monitorInfos[dtpPrimaryMonitor]?.id
+ if (dtpPrimaryMonitor.match(/^\d{1,2}$/) && monitorInfos[dtpPrimaryMonitor])
+ dtpPrimaryMonitor = monitorInfos[dtpPrimaryMonitor].id
// default to gnome-shell primary monitor
- if (!dtpPrimaryMonitor) dtpPrimaryMonitor = monitorInfos[gsPrimaryIndex]?.id
+ if (!dtpPrimaryMonitor)
+ dtpPrimaryMonitor = monitorInfos[gsPrimaryIndex]?.id || 0
settings.set_string(keyPrimary, dtpPrimaryMonitor)
availableMonitors = Object.freeze(monitorInfos)
diff --git a/src/prefs.js b/src/prefs.js
index 3082bba..ace08d1 100644
--- a/src/prefs.js
+++ b/src/prefs.js
@@ -348,7 +348,9 @@ const Preferences = class {
const monitorSync = this._settings.get_boolean(
'panel-element-positions-monitors-sync',
)
- const monitorsToSetFor = monitorSync ? this.monitors : [currentMonitorIndex]
+ const monitorsToSetFor = monitorSync
+ ? Object.keys(this.monitors)
+ : [currentMonitorIndex]
const allVertical = monitorsToSetFor.every((i) => {
const position = PanelSettings.getPanelPosition(this._settings, i)
return position === Pos.LEFT || position === Pos.RIGHT
@@ -780,6 +782,12 @@ const Preferences = class {
return value + ' px'
})
+ this._builder
+ .get_object('panel_length_scale')
+ .set_format_value_func((scale, value) => {
+ return value + ' %'
+ })
+
// style
this._builder
.get_object('appicon_margin_scale')
@@ -889,7 +897,7 @@ const Preferences = class {
)
let dtpPrimaryMonitorId = this._settings.get_string('primary-monitor')
let dtpPrimaryMonitorIndex =
- PanelSettings.monitorIdToIndex[dtpPrimaryMonitorId]
+ PanelSettings.getPrimaryIndex(dtpPrimaryMonitorId)
this._currentMonitorIndex = dtpPrimaryMonitorIndex
@@ -904,7 +912,7 @@ const Preferences = class {
? _('Primary monitor')
: _('Monitor ') + (i + 1)
- label += monitor.name ? ` (${monitor.name})` : ''
+ label += monitor.product ? ` (${monitor.product})` : ''
primaryCombo.append_text(label)
panelOptionsMonitorCombo.append_text(label)
@@ -3539,7 +3547,7 @@ const Preferences = class {
revealDonateTimeout = setTimeout(() => {
donationRevealer.set_reveal_child(true)
donationSpinner.set_spinning(false)
- }, 20000)
+ }, 18000)
})
}
@@ -3674,7 +3682,7 @@ const BuilderScope = GObject.registerClass(
'panel-element-positions-monitors-sync',
)
const monitorsToSetFor = monitorSync
- ? this._preferences.monitors
+ ? Object.keys(this._preferences.monitors)
: [this._preferences._currentMonitorIndex]
monitorsToSetFor.forEach((monitorIndex) => {
PanelSettings.setPanelSize(
diff --git a/src/taskbar.js b/src/taskbar.js
index a791ee4..30ee3d0 100644
--- a/src/taskbar.js
+++ b/src/taskbar.js
@@ -90,10 +90,10 @@ let donateDummyApp = {
},
activate: function () {
SETTINGS.set_string('target-prefs-page', 'donation')
+ DTP_EXTENSION.openPreferences()
if (this.isActive()) return
- DTP_EXTENSION.openPreferences()
this._taskbar._timeoutsHandler.add([T4, 5000, this.forceRefresh.bind(this)])
this.forceRefresh()
},
diff --git a/ui/SettingsPosition.ui b/ui/SettingsPosition.ui
index c084ad4..24c53ee 100644
--- a/ui/SettingsPosition.ui
+++ b/ui/SettingsPosition.ui
@@ -11,8 +11,8 @@