forked from Shinonome/dots-hyprland
wbar: (partial) right click menu for start button
This commit is contained in:
@@ -45,9 +45,7 @@ BarButton {
|
|||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
anchors.rightMargin: 5
|
anchors.rightMargin: 5
|
||||||
active: root.multiple
|
active: root.multiple
|
||||||
sourceComponent: BackgroundAcrylicRectangle {
|
sourceComponent: BackgroundAcrylicRectangle {}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ import qs.modules.waffle.looks
|
|||||||
Button {
|
Button {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
signal altAction()
|
property var altAction: () => {}
|
||||||
signal middleClickAction()
|
property var middleClickAction: () => {}
|
||||||
|
|
||||||
property color colBackground
|
property color colBackground
|
||||||
property color colBackgroundBorder
|
property color colBackgroundBorder
|
||||||
|
|||||||
@@ -0,0 +1,111 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Hyprland
|
||||||
|
import qs.modules.common
|
||||||
|
import qs.modules.common.functions
|
||||||
|
import qs.modules.waffle.looks
|
||||||
|
|
||||||
|
Loader {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property Item anchorItem: parent
|
||||||
|
property real visualMargin: 12
|
||||||
|
readonly property bool barAtBottom: Config.options.waffles.bar.bottom
|
||||||
|
property real ambientShadowWidth: 1
|
||||||
|
|
||||||
|
active: false
|
||||||
|
visible: active
|
||||||
|
sourceComponent: PopupWindow {
|
||||||
|
id: popupWindow
|
||||||
|
visible: true
|
||||||
|
Component.onCompleted: {
|
||||||
|
openAnim.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
anchor {
|
||||||
|
adjustment: PopupAdjustment.Slide
|
||||||
|
item: root.anchorItem
|
||||||
|
gravity: root.barAtBottom ? Edges.Top : Edges.Bottom
|
||||||
|
edges: root.barAtBottom ? Edges.Top : Edges.Bottom
|
||||||
|
}
|
||||||
|
|
||||||
|
HyprlandFocusGrab {
|
||||||
|
id: focusGrab
|
||||||
|
active: true
|
||||||
|
windows: [popupWindow]
|
||||||
|
onCleared: {
|
||||||
|
closeAnim.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
implicitWidth: realContent.implicitWidth + (ambientShadow.border.width * 2) + (root.visualMargin * 2)
|
||||||
|
implicitHeight: realContent.implicitHeight + (ambientShadow.border.width * 2) + (root.visualMargin * 2)
|
||||||
|
|
||||||
|
property real sourceEdgeMargin: -implicitHeight
|
||||||
|
PropertyAnimation {
|
||||||
|
id: openAnim
|
||||||
|
target: popupWindow
|
||||||
|
property: "sourceEdgeMargin"
|
||||||
|
to: (root.ambientShadowWidth + root.visualMargin)
|
||||||
|
duration: 200
|
||||||
|
easing.type: Easing.BezierSpline
|
||||||
|
easing.bezierCurve: Looks.transition.easing.bezierCurve.easeIn
|
||||||
|
}
|
||||||
|
SequentialAnimation {
|
||||||
|
id: closeAnim
|
||||||
|
PropertyAnimation {
|
||||||
|
target: popupWindow
|
||||||
|
property: "sourceEdgeMargin"
|
||||||
|
to: -implicitHeight
|
||||||
|
duration: 150
|
||||||
|
easing.type: Easing.BezierSpline
|
||||||
|
easing.bezierCurve: Looks.transition.easing.bezierCurve.easeOut
|
||||||
|
}
|
||||||
|
ScriptAction {
|
||||||
|
script: {
|
||||||
|
root.active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
color: "transparent"
|
||||||
|
Rectangle {
|
||||||
|
id: ambientShadow
|
||||||
|
z: 0
|
||||||
|
anchors {
|
||||||
|
fill: realContent
|
||||||
|
margins: -border.width
|
||||||
|
}
|
||||||
|
border.color: ColorUtils.transparentize(Looks.colors.bg0Border, Looks.shadowTransparency)
|
||||||
|
border.width: root.ambientShadowWidth
|
||||||
|
color: "transparent"
|
||||||
|
radius: realContent.radius + border.width
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: realContent
|
||||||
|
z: 1
|
||||||
|
anchors {
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
top: root.barAtBottom ? undefined : parent.top
|
||||||
|
bottom: root.barAtBottom ? parent.bottom : undefined
|
||||||
|
margins: root.ambientShadowWidth + root.visualMargin
|
||||||
|
// Opening anim
|
||||||
|
bottomMargin: root.barAtBottom ? popupWindow.sourceEdgeMargin : (root.ambientShadowWidth + root.visualMargin)
|
||||||
|
topMargin: root.barAtBottom ? (root.ambientShadowWidth + root.visualMargin) : popupWindow.sourceEdgeMargin
|
||||||
|
}
|
||||||
|
color: Looks.colors.bg1
|
||||||
|
radius: Looks.radius.large
|
||||||
|
|
||||||
|
// test
|
||||||
|
implicitWidth: 300
|
||||||
|
implicitHeight: 400
|
||||||
|
|
||||||
|
Menu {
|
||||||
|
id: menu
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import QtQuick
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
import org.kde.kirigami as Kirigami
|
import org.kde.kirigami as Kirigami
|
||||||
import qs
|
import qs
|
||||||
@@ -21,4 +22,12 @@ AppButton {
|
|||||||
text: Translation.tr("Start")
|
text: Translation.tr("Start")
|
||||||
extraVisibleCondition: root.shouldShowTooltip
|
extraVisibleCondition: root.shouldShowTooltip
|
||||||
}
|
}
|
||||||
|
|
||||||
|
altAction: () => {
|
||||||
|
contextMenu.active = !contextMenu.active;
|
||||||
|
}
|
||||||
|
|
||||||
|
BarMenu {
|
||||||
|
id: contextMenu
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,6 +90,6 @@ BarButton {
|
|||||||
}
|
}
|
||||||
BarToolTip {
|
BarToolTip {
|
||||||
extraVisibleCondition: root.shouldShowTooltip && batteryHoverArea.containsMouse
|
extraVisibleCondition: root.shouldShowTooltip && batteryHoverArea.containsMouse
|
||||||
text: Translation.tr("Battery: %1").arg(`${Math.round(Battery.percentage * 100) || 0}%`)
|
text: Translation.tr("Battery: %1%2").arg(`${Math.round(Battery.percentage * 100) || 0}%`).arg(Battery.isPluggedIn ? (" " + Translation.tr("(Plugged in)")) : "")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,11 @@ AppButton {
|
|||||||
onClicked: {
|
onClicked: {
|
||||||
GlobalStates.sidebarLeftOpen = !GlobalStates.sidebarLeftOpen
|
GlobalStates.sidebarLeftOpen = !GlobalStates.sidebarLeftOpen
|
||||||
}
|
}
|
||||||
|
onDownChanged: {
|
||||||
|
scaleAnim.duration = root.down ? 150 : 200
|
||||||
|
scaleAnim.easing.bezierCurve = root.down ? Looks.transition.easing.bezierCurve.easeIn : Looks.transition.easing.bezierCurve.easeOut
|
||||||
|
iconWidget.scale = root.down ? 5/6 : 1 // If/When we do dragging, the scale is 1.25
|
||||||
|
}
|
||||||
|
|
||||||
contentItem: Item {
|
contentItem: Item {
|
||||||
anchors {
|
anchors {
|
||||||
@@ -41,6 +46,13 @@ AppButton {
|
|||||||
id: iconWidget
|
id: iconWidget
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
iconName: root.iconName
|
iconName: root.iconName
|
||||||
|
|
||||||
|
Behavior on scale {
|
||||||
|
NumberAnimation {
|
||||||
|
id: scaleAnim
|
||||||
|
easing.type: Easing.BezierSpline
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ AppButton {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onMiddleClickAction: {
|
middleClickAction: () => {
|
||||||
if (root.desktopEntry) {
|
if (root.desktopEntry) {
|
||||||
desktopEntry.execute()
|
desktopEntry.execute()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ PopupWindow {
|
|||||||
property Item anchorItem
|
property Item anchorItem
|
||||||
|
|
||||||
//////////////////// Functions ////////////////////
|
//////////////////// Functions ////////////////////
|
||||||
function close() {
|
function close() { // Closing doesn't animate, not sure if they're just lazy or it's intentional
|
||||||
marginBehavior.enabled = false;
|
marginBehavior.enabled = false;
|
||||||
root.visible = false;
|
root.visible = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,10 @@ MouseArea {
|
|||||||
previewPopup.show(appEntry, button);
|
previewPopup.show(appEntry, button);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function showContextMenu(appEntry, button) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
// Apps row
|
// Apps row
|
||||||
RowLayout {
|
RowLayout {
|
||||||
id: row
|
id: row
|
||||||
@@ -36,6 +40,10 @@ MouseArea {
|
|||||||
onHoverPreviewRequested: {
|
onHoverPreviewRequested: {
|
||||||
root.showPreviewPopup(appEntry, this)
|
root.showPreviewPopup(appEntry, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
altAction: () => {
|
||||||
|
root.showContextMenu(appEntry, this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -46,4 +54,6 @@ MouseArea {
|
|||||||
tasksHovered: root.containsMouse
|
tasksHovered: root.containsMouse
|
||||||
anchor.window: root.QsWindow.window
|
anchor.window: root.QsWindow.window
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user