Global Menu support left & right keys and the mouse to move

pull/7/head
reionwong 5 years ago
parent 5d97bde8fd
commit 0957cbeef6

@ -84,7 +84,7 @@ ControlCenterDialog {
id: _background
anchors.fill: parent
radius: control.height * 0.05
color: FishUI.Theme.darkMode ? "#828286" : "#FFFFFF"
color: FishUI.Theme.darkMode ? "#333333" : "#FFFFFF"
opacity: FishUI.Theme.darkMode ? 0.5 : 0.7
antialiasing: true
border.width: 0

@ -34,7 +34,7 @@ Item {
Rectangle {
id: background
anchors.fill: parent
color: FishUI.Theme.darkMode ? "#828286" : "#FFFFFF"
color: FishUI.Theme.darkMode ? "#333333" : "#FFFFFF"
opacity: FishUI.Theme.darkMode ? 0.5 : 0.7
Behavior on color {
@ -165,6 +165,26 @@ Item {
id: appMenuApplet
model: appMenuModel
}
Component.onCompleted: {
appMenuApplet.buttonGrid = appMenuView
// Handle left and right shortcut keys.
appMenuApplet.requestActivateIndex.connect(function (index) {
var idx = Math.max(0, Math.min(appMenuView.count - 1, index))
var button = appMenuView.itemAtIndex(index)
if (button) {
button.clicked()
}
});
// Handle mouse movement.
appMenuApplet.mousePosChanged.connect(function (x, y) {
var item = itemAt(x, y)
if (item)
item.clicked();
});
}
}
}

@ -214,21 +214,30 @@ bool AppMenuApplet::eventFilter(QObject *watched, QEvent *event)
return false;
}
// FIXME the panel margin breaks Fitt's law :(
const QPointF &windowLocalPos = m_buttonGrid->window()->mapFromGlobal(e->globalPos());
const QPointF &buttonGridLocalPos = m_buttonGrid->mapFromScene(windowLocalPos);
auto *item = m_buttonGrid->childAt(buttonGridLocalPos.x(), buttonGridLocalPos.y());
if (!item) {
return false;
}
bool ok;
const int buttonIndex = item->property("buttonIndex").toInt(&ok);
if (!ok) {
if (buttonGridLocalPos.x() < m_buttonGrid->window()->x() ||
buttonGridLocalPos.y() > m_buttonGrid->window()->height())
return false;
}
emit requestActivateIndex(buttonIndex);
emit mousePosChanged(buttonGridLocalPos.x(), buttonGridLocalPos.y());
// FIXME the panel margin breaks Fitt's law :(
// const QPointF &windowLocalPos = m_buttonGrid->window()->mapFromGlobal(e->globalPos());
// const QPointF &buttonGridLocalPos = m_buttonGrid->mapFromScene(windowLocalPos);
// auto *item = m_buttonGrid->childAt(buttonGridLocalPos.x(), buttonGridLocalPos.y());
// if (!item) {
// return false;
// }
// bool ok;
// const int buttonIndex = item->property("index").toInt(&ok);
// if (!ok) {
// return false;
// }
// emit requestActivateIndex(buttonIndex);
}
return false;

@ -54,6 +54,7 @@ Q_SIGNALS:
void currentIndexChanged();
void buttonGridChanged();
void requestActivateIndex(int index);
void mousePosChanged(int x, int y);
public slots:
Q_INVOKABLE void trigger(QQuickItem *ctx, int idx);

@ -1,6 +1,6 @@
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interface name="org.kde.cappmenu">
<interface name="org.cutefish.cappmenu">
<method name="showMenu">
<arg name="x" type="i" direction="in"/>
<arg name="y" type="i" direction="in"/>

Loading…
Cancel
Save