Add the middle-click event to the system tray

pull/18/head
reionwong 4 years ago
parent 4a4eeaae4b
commit f415f331c7

@ -38,9 +38,12 @@ Item {
property alias mouseArea: _mouseArea
signal clicked(var mouse)
signal pressed(var mouse)
signal wheel(var wheel)
signal contextMenu(var mouse)
signal positionChanged
signal clicked
signal rightClicked
signal released
onCheckedChanged: {
@ -50,7 +53,7 @@ Item {
MouseArea {
id: _mouseArea
anchors.fill: parent
acceptedButtons: Qt.LeftButton | Qt.RightButton
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
hoverEnabled: true
onEntered: {
@ -77,15 +80,17 @@ Item {
onClicked: {
control.moveX = mouseX
control.moveY = mouseY
if (mouse.button == Qt.LeftButton)
control.clicked()
else if (mouse.button == Qt.RightButton)
control.rightClicked()
control.clicked(mouse)
}
onPressed: {
popupTips.hide()
control.pressed(mouse)
}
onWheel: {
control.wheel(wheel)
wheel.accepted = false
}
onReleased: {

@ -92,7 +92,10 @@ Item {
Layout.preferredWidth: acticityLayout.implicitWidth ? Math.min(acticityLayout.implicitWidth + FishUI.Units.largeSpacing,
rootItem.width / 2)
: 0
onRightClicked: acticityMenu.open()
onClicked: {
if (mouse.button === Qt.RightButton)
acticityMenu.open()
}
RowLayout {
id: acticityLayout
@ -181,8 +184,8 @@ Item {
MouseArea {
anchors.fill: parent
hoverEnabled: appMenuApplet.currentIndex !== -1
onPressed: parent.clicked()
onEntered: parent.clicked()
onPressed: parent.clicked(null)
onEntered: parent.clicked(null)
}
}
@ -207,7 +210,7 @@ Item {
var idx = Math.max(0, Math.min(appMenuView.count - 1, index))
var button = appMenuView.itemAtIndex(index)
if (button) {
button.clicked()
button.clicked(null)
}
});
@ -215,7 +218,7 @@ Item {
appMenuApplet.mousePosChanged.connect(function (x, y) {
var item = itemAt(x, y)
if (item)
item.clicked();
item.clicked(null)
});
}
}
@ -318,8 +321,18 @@ Item {
visible: !dragStarted
}
onClicked: trayModel.leftButtonClick(model.id)
onRightClicked: trayModel.rightButtonClick(model.id)
onClicked: {
var pos = trayModel.popupPosition(_trayItem, mouse.x, mouse.y)
if (mouse.button === Qt.LeftButton) {
trayModel.leftButtonClick(model.id, pos.x, pos.y)
} else if (mouse.button === Qt.RightButton) {
trayModel.rightButtonClick(model.id, pos.x, pos.y)
} else if (mouse.button === Qt.MiddleButton) {
trayModel.middleButtonClick(model.id, pos.x, pos.y)
}
}
popupText: model.toolTip ? model.toolTip : model.title
}
}
@ -332,8 +345,9 @@ Item {
Layout.fillHeight: true
Layout.preferredWidth: _controlerLayout.implicitWidth + FishUI.Units.largeSpacing
onClicked: toggleDialog()
onRightClicked: toggleDialog()
onClicked: {
toggleDialog()
}
function toggleDialog() {
if (controlCenter.visible)

@ -108,22 +108,28 @@ StatusNotifierItemSource *SystemTrayModel::findItemById(const QString &id)
return m_items.at(index);
}
void SystemTrayModel::leftButtonClick(const QString &id)
void SystemTrayModel::leftButtonClick(const QString &id, int x, int y)
{
StatusNotifierItemSource *item = findItemById(id);
if (item) {
QPoint p(QCursor::pos());
item->activate(p.x(), p.y());
item->activate(x, y);
}
}
void SystemTrayModel::rightButtonClick(const QString &id)
void SystemTrayModel::rightButtonClick(const QString &id, int x, int y)
{
StatusNotifierItemSource *item = findItemById(id);
if (item) {
QPoint p(QCursor::pos());
item->contextMenu(p.x(), p.y());
item->contextMenu(x, y);
}
}
void SystemTrayModel::middleButtonClick(const QString &id, int x, int y)
{
StatusNotifierItemSource *item = findItemById(id);
if (item) {
item->secondaryActivate(x, y);
}
}
@ -142,6 +148,23 @@ void SystemTrayModel::move(int from, int to)
endMoveRows();
}
QPointF SystemTrayModel::popupPosition(QQuickItem *visualParent, int x, int y)
{
if (!visualParent) {
return QPointF(0, 0);
}
QPointF pos = visualParent->mapToScene(QPointF(x, y));
if (visualParent->window() && visualParent->window()->screen()) {
pos = visualParent->window()->mapToGlobal(pos.toPoint());
} else {
return QPoint();
}
return pos;
}
void SystemTrayModel::onItemAdded(const QString &service)
{
StatusNotifierItemSource *source = new StatusNotifierItemSource(service, this);

@ -23,6 +23,9 @@
#include <QAbstractListModel>
#include <QQuickItem>
#include <QQuickWindow>
#include "statusnotifierwatcher.h"
#include "statusnotifieritemsource.h"
@ -50,11 +53,19 @@ public:
int indexOf(const QString &id);
StatusNotifierItemSource *findItemById(const QString &id);
Q_INVOKABLE void leftButtonClick(const QString &id);
Q_INVOKABLE void rightButtonClick(const QString &id);
Q_INVOKABLE void leftButtonClick(const QString &id, int x, int y);
Q_INVOKABLE void rightButtonClick(const QString &id, int x, int y);
Q_INVOKABLE void middleButtonClick(const QString &id, int x, int y);
Q_INVOKABLE void move(int from, int to);
/**
* Find out global coordinates for a popup given local MouseArea
* coordinates
* from plasma-workspace/applets/systemtray/systemtray.cpp
*/
Q_INVOKABLE QPointF popupPosition(QQuickItem *visualParent, int x, int y);
private slots:
void onItemAdded(const QString &service);
void onItemRemoved(const QString &service);

Loading…
Cancel
Save