Merge pull request #2 from outfoxxed/popouts-multimon

popouts: fix multimonitor
This commit is contained in:
2 * r + 2 * t 2025-06-07 16:38:10 +10:00 committed by GitHub
commit 5dfb3c43ed
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 47 additions and 46 deletions

View file

@ -1,6 +1,7 @@
import "root:/widgets"
import "root:/services"
import "root:/config"
import "root:/modules/bar/popouts" as BarPopouts
import "components"
import "components/workspaces"
import Quickshell
@ -10,6 +11,7 @@ Item {
id: root
required property ShellScreen screen
required property BarPopouts.Wrapper popouts
function checkPopout(y: real): void {
const spacing = Appearance.spacing.small;
@ -30,30 +32,30 @@ Item {
const by = statusIcons.y + statusIconsInner.y + b.y - spacing / 2;
if (y >= awy && y <= awy + aw.implicitHeight) {
Popouts.currentName = "activewindow";
Popouts.currentCenter = Qt.binding(() => activeWindow.y + aw.y + aw.implicitHeight / 2);
Popouts.hasCurrent = true;
popouts.currentName = "activewindow";
popouts.currentCenter = Qt.binding(() => activeWindow.y + aw.y + aw.implicitHeight / 2);
popouts.hasCurrent = true;
} else if (y > ty && y < ty + th) {
const index = Math.floor(((y - ty) / th) * trayItems.count);
const item = trayItems.itemAt(index);
Popouts.currentName = `traymenu${index}`;
Popouts.currentCenter = Qt.binding(() => tray.y + item.y + item.implicitHeight / 2);
Popouts.hasCurrent = true;
popouts.currentName = `traymenu${index}`;
popouts.currentCenter = Qt.binding(() => tray.y + item.y + item.implicitHeight / 2);
popouts.hasCurrent = true;
} else if (y >= ny && y <= ny + n.implicitHeight + spacing) {
Popouts.currentName = "network";
Popouts.currentCenter = Qt.binding(() => statusIcons.y + statusIconsInner.y + n.y + n.implicitHeight / 2);
Popouts.hasCurrent = true;
popouts.currentName = "network";
popouts.currentCenter = Qt.binding(() => statusIcons.y + statusIconsInner.y + n.y + n.implicitHeight / 2);
popouts.hasCurrent = true;
} else if (y >= bls && y <= ble) {
Popouts.currentName = "bluetooth";
Popouts.currentCenter = Qt.binding(() => statusIcons.y + statusIconsInner.y + statusIconsInner.bs + (statusIconsInner.be - statusIconsInner.bs) / 2);
Popouts.hasCurrent = true;
popouts.currentName = "bluetooth";
popouts.currentCenter = Qt.binding(() => statusIcons.y + statusIconsInner.y + statusIconsInner.bs + (statusIconsInner.be - statusIconsInner.bs) / 2);
popouts.hasCurrent = true;
} else if (y >= by && y <= by + b.implicitHeight + spacing) {
Popouts.currentName = "battery";
Popouts.currentCenter = Qt.binding(() => statusIcons.y + statusIconsInner.y + b.y + b.implicitHeight / 2);
Popouts.hasCurrent = true;
popouts.currentName = "battery";
popouts.currentCenter = Qt.binding(() => statusIcons.y + statusIconsInner.y + b.y + b.implicitHeight / 2);
popouts.hasCurrent = true;
} else {
Popouts.hasCurrent = false;
popouts.hasCurrent = false;
}
}

View file

@ -11,9 +11,23 @@ Item {
required property ShellScreen screen
property string currentName
property real currentCenter
property bool hasCurrent
Behavior on currentCenter {
enabled: root.hasCurrent
NumberAnimation {
duration: Appearance.anim.durations.normal
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.emphasized
}
}
anchors.centerIn: parent
implicitWidth: Popouts.hasCurrent ? (content.children.find(c => c.shouldBeActive)?.implicitWidth ?? 0) + Appearance.padding.large * 2 : 0
implicitWidth: root.hasCurrent ? (content.children.find(c => c.shouldBeActive)?.implicitWidth ?? 0) + Appearance.padding.large * 2 : 0
implicitHeight: (content.children.find(c => c.shouldBeActive)?.implicitHeight ?? 0) + Appearance.padding.large * 2
Item {
@ -70,7 +84,7 @@ Item {
}
Behavior on implicitHeight {
enabled: Popouts.hasCurrent
enabled: root.hasCurrent
Anim {
easing.bezierCurve: Appearance.anim.curves.emphasized
@ -81,7 +95,7 @@ Item {
id: popout
required property string name
property bool shouldBeActive: Popouts.currentName === name
property bool shouldBeActive: root.currentName === name
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right

View file

@ -8,6 +8,10 @@ Item {
required property ShellScreen screen
property alias currentName: content.currentName
property alias currentCenter: content.currentCenter
property alias hasCurrent: content.hasCurrent
visible: width > 0 && height > 0
implicitWidth: content.implicitWidth

View file

@ -117,6 +117,7 @@ Variants {
Interactions {
screen: scope.modelData
popouts: panels.popouts
visibilities: visibilities
panels: panels
bar: bar
@ -134,6 +135,7 @@ Variants {
id: bar
screen: scope.modelData
popouts: panels.popouts
}
}
}

View file

@ -1,5 +1,6 @@
import "root:/services"
import "root:/config"
import "root:/modules/bar/popouts" as BarPopouts
import "root:/modules/osd" as Osd
import Quickshell
import QtQuick
@ -8,6 +9,7 @@ MouseArea {
id: root
required property ShellScreen screen
required property BarPopouts.Wrapper popouts
required property PersistentProperties visibilities
required property Panels panels
required property Item bar
@ -38,7 +40,7 @@ MouseArea {
visibilities.osd = false;
osdHovered = false;
visibilities.dashboard = false;
Popouts.hasCurrent = false;
popouts.hasCurrent = false;
}
}
@ -68,9 +70,9 @@ MouseArea {
bar.checkPopout(y);
else
// Keep on hover
Popouts.hasCurrent = withinPanelHeight(popout, x, y);
popouts.hasCurrent = withinPanelHeight(popout, x, y);
} else
Popouts.hasCurrent = false;
popouts.hasCurrent = false;
}
Osd.Interactions {

View file

@ -83,7 +83,7 @@ Item {
anchors.left: parent.left
anchors.verticalCenter: parent.top
anchors.verticalCenterOffset: {
const off = Popouts.currentCenter - BorderConfig.thickness;
const off = root.popouts.currentCenter - BorderConfig.thickness;
const diff = root.height - Math.floor(off + implicitHeight / 2);
if (diff < 0)
return off + diff;

View file

@ -1,23 +0,0 @@
pragma Singleton
import "root:/config"
import Quickshell
import QtQuick
Singleton {
id: root
property string currentName
property real currentCenter
property bool hasCurrent
Behavior on currentCenter {
enabled: root.hasCurrent
NumberAnimation {
duration: Appearance.anim.durations.normal
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.emphasized
}
}
}