mirror of
https://gitlab.gnome.org/julianschacher/top-bar-organizer.git
synced 2025-10-27 23:29:08 +00:00
Update: Handle permutations of outdated box orders getting saved better
This commit is contained in:
parent
c2c4237bd3
commit
4faf976155
@ -45,6 +45,17 @@ class Extension {
|
|||||||
const addConfiguredBoxOrderChangeHandler = (box) => {
|
const addConfiguredBoxOrderChangeHandler = (box) => {
|
||||||
let handlerId = this.settings.connect(`changed::${box}-box-order`, () => {
|
let handlerId = this.settings.connect(`changed::${box}-box-order`, () => {
|
||||||
this._orderTopBarItems(box);
|
this._orderTopBarItems(box);
|
||||||
|
|
||||||
|
/// For the case, where the currently saved box order is based
|
||||||
|
/// on a permutation of an outdated box order, get an updated
|
||||||
|
/// box order and save it, if needed.
|
||||||
|
const updatedBoxOrder = this._createUpdatedBoxOrder(box);
|
||||||
|
// Only save the updated box order to settings, if it is
|
||||||
|
// different, to avoid looping.
|
||||||
|
const currentBoxOrder = this.settings.get_strv(`${box}-box-order`);
|
||||||
|
if (JSON.stringify(currentBoxOrder) !== JSON.stringify(updatedBoxOrder)) {
|
||||||
|
this.settings.set_strv(`${box}-box-order`, updatedBoxOrder);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
this._settingsHandlerIds.push(handlerId);
|
this._settingsHandlerIds.push(handlerId);
|
||||||
};
|
};
|
||||||
@ -394,16 +405,46 @@ class Extension {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Go through the items (or rather their roles) of the validBoxOrder and
|
/// Go through the items (or rather their roles) of the validBoxOrder
|
||||||
// order the panelBox accordingly.
|
/// and order the panelBox accordingly.
|
||||||
for (let i = 0; i < validBoxOrder.length; i++) {
|
// Declare panelBoxChildCount here, because we might need it later.
|
||||||
const role = validBoxOrder[i];
|
let panelBoxChildCount;
|
||||||
// Get the indicator container associated with the current role.
|
switch (box) {
|
||||||
const associatedIndicatorContainer = Main.panel.statusArea[role].container;
|
// If the left or center box is the target box, order form left to
|
||||||
|
// right.
|
||||||
|
case "left":
|
||||||
|
case "center":
|
||||||
|
for (let i = 0; i < validBoxOrder.length; i++) {
|
||||||
|
const role = validBoxOrder[i];
|
||||||
|
// Get the indicator container associated with the current
|
||||||
|
// role.
|
||||||
|
const associatedIndicatorContainer = Main.panel.statusArea[role].container;
|
||||||
|
|
||||||
associatedIndicatorContainer.get_parent().remove_child(associatedIndicatorContainer);
|
associatedIndicatorContainer.get_parent().remove_child(associatedIndicatorContainer);
|
||||||
panelBox.insert_child_at_index(associatedIndicatorContainer, i);
|
panelBox.insert_child_at_index(associatedIndicatorContainer, i);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
// If the right box is the target box, order from right to left.
|
||||||
|
// The order direction is important for the case, where the box
|
||||||
|
// order got set to a box order, which doesn't include all the roles
|
||||||
|
// to cover all items of the respective box.
|
||||||
|
// This could happen, when the box order gets set to a permutation
|
||||||
|
// of an outdated box order.
|
||||||
|
case "right":
|
||||||
|
panelBoxChildCount = panelBox.get_children().length;
|
||||||
|
for (let i = 0; i < validBoxOrder.length; i++) {
|
||||||
|
const role = validBoxOrder[validBoxOrder.length - 1 - i];
|
||||||
|
// Get the indicator container associated with the current role.
|
||||||
|
const associatedIndicatorContainer = Main.panel.statusArea[role].container;
|
||||||
|
|
||||||
|
associatedIndicatorContainer.get_parent().remove_child(associatedIndicatorContainer);
|
||||||
|
panelBox.insert_child_at_index(associatedIndicatorContainer, panelBoxChildCount - 1 -i);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
// To handle the case, where the box order got set to a permutation
|
||||||
|
// of an outdated box order, it would be wise, if the caller updated the
|
||||||
|
// box order now to include the items present in the top bar.
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user