Improve the system tray, fix the wine apps cannot click the tray icon.

pull/18/head
kateleet 4 years ago
parent 725cb53e9d
commit 460f94c004

@ -89,9 +89,8 @@ Item {
id: acticityItem
animationEnabled: true
Layout.fillHeight: true
Layout.preferredWidth: acticityLayout.implicitWidth ? Math.min(acticityLayout.implicitWidth + FishUI.Units.largeSpacing,
rootItem.width / 2)
: 0
Layout.preferredWidth: Math.min(rootItem.width / 3,
acticityLayout.implicitWidth + FishUI.Units.largeSpacing)
onClicked: {
if (mouse.button === Qt.RightButton)
acticityMenu.open()
@ -260,7 +259,7 @@ Item {
width: trayView.itemWidth
height: ListView.view.height
animationEnabled: true
animationEnabled: false
onDarkModeChanged: updateTimer.restart()
@ -327,7 +326,7 @@ Item {
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)
trayModel.rightButtonClick(model.id, _trayItem, pos.x, pos.y)
} else if (mouse.button === Qt.MiddleButton) {
trayModel.middleButtonClick(model.id, pos.x, pos.y)
}

@ -153,13 +153,30 @@ void StatusNotifierItemSource::scroll(int delta, const QString &direction)
}
}
void StatusNotifierItemSource::contextMenu(int x, int y)
void StatusNotifierItemSource::contextMenu(int x, int y, QQuickItem *item)
{
if (m_menuImporter) {
// Popup menu
if (m_menuImporter->menu()) {
QMenu *menu = m_menuImporter->menu();
if (menu) {
m_menuImporter->updateMenu();
m_menuImporter->menu()->popup(QPoint(x, y));
menu->winId();
if (item) {
QRect screenItemRect(item->mapToScene(QPointF(0, 0)).toPoint(), QSize(item->width(), item->height()));
if (item->window()) {
screenItemRect.moveTopLeft(item->window()->mapToGlobal(screenItemRect.topLeft()));
menu->windowHandle()->setTransientParent(item->window());
}
menu->popup(QPoint(screenItemRect.left(),
screenItemRect.bottom() + 5));
} else {
menu->popup(QPoint(x, y + 5));
}
}
} else {
qWarning() << "Could not find DBusMenu interface, falling back to calling ContextMenu()";

@ -27,6 +27,10 @@
#include <QMenu>
#include <QDBusPendingCallWatcher>
#include <QQuickWindow>
#include <QQuickItem>
#include <QWindow>
#include "statusnotifieritem_interface.h"
class DBusMenuImporter;
@ -48,7 +52,7 @@ public:
void activate(int x, int y);
void secondaryActivate(int x, int y);
void scroll(int delta, const QString &direction);
void contextMenu(int x, int y);
void contextMenu(int x, int y, QQuickItem *item);
signals:
void contextMenuReady(QMenu *menu);

@ -113,23 +113,29 @@ void SystemTrayModel::leftButtonClick(const QString &id, int x, int y)
StatusNotifierItemSource *item = findItemById(id);
if (item) {
item->activate(x, y);
item->activate(x * qApp->devicePixelRatio(),
y * qApp->devicePixelRatio());
}
}
void SystemTrayModel::rightButtonClick(const QString &id, int x, int y)
void SystemTrayModel::rightButtonClick(const QString &id, QQuickItem *iconItem, int x, int y)
{
StatusNotifierItemSource *item = findItemById(id);
if (item) {
item->contextMenu(x, y);
item->contextMenu(x * qApp->devicePixelRatio(),
y * qApp->devicePixelRatio(),
iconItem);
}
}
void SystemTrayModel::middleButtonClick(const QString &id, int x, int y)
{
StatusNotifierItemSource *item = findItemById(id);
if (item) {
item->secondaryActivate(x, y);
item->secondaryActivate(x * qApp->devicePixelRatio(),
y * qApp->devicePixelRatio());
}
}
@ -167,7 +173,7 @@ QPointF SystemTrayModel::popupPosition(QQuickItem *visualParent, int x, int y)
void SystemTrayModel::onItemAdded(const QString &service)
{
StatusNotifierItemSource *source = new StatusNotifierItemSource(service, this);
StatusNotifierItemSource *source = m_sniHost->itemForService(service);
connect(source, &StatusNotifierItemSource::updated, this, &SystemTrayModel::updated);

@ -55,7 +55,7 @@ public:
StatusNotifierItemSource *findItemById(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 rightButtonClick(const QString &id, QQuickItem *iconItem, int x, int y);
Q_INVOKABLE void middleButtonClick(const QString &id, int x, int y);
Q_INVOKABLE void move(int from, int to);

Loading…
Cancel
Save