Skip to content

Commit

Permalink
Improve behavior under Wayland
Browse files Browse the repository at this point in the history
* Add workaround for using QCursor::pos()
* Set window flags and parent of TrayMenu to it is shown
  like a context menu
  • Loading branch information
Martchus committed Jul 27, 2019
1 parent 9f9b912 commit 1bdba31
Show file tree
Hide file tree
Showing 11 changed files with 206 additions and 52 deletions.
2 changes: 1 addition & 1 deletion tray/application/main.cpp
Expand Up @@ -111,7 +111,7 @@ void trigger(bool tray, bool webUi)
trayWidget->showWebUi();
}
if (tray) {
trayWidget->showAtCursor();
trayWidget->showUsingPositioningSettings();
}
}

Expand Down
18 changes: 9 additions & 9 deletions tray/gui/trayicon.cpp
Expand Up @@ -35,15 +35,15 @@ namespace QtGui {
*/
TrayIcon::TrayIcon(const QString &connectionConfig, QObject *parent)
: QSystemTrayIcon(parent)
, m_trayMenu(this)
, m_trayMenu(new TrayMenu(this, &m_parentWidget))
#ifdef QT_UTILITIES_SUPPORT_DBUS_NOTIFICATIONS
, m_dbusNotificationsEnabled(Settings::values().dbusNotifications)
#endif
, m_notifyOnSyncthingErrors(Settings::values().notifyOn.syncthingErrors)
, m_messageClickedAction(TrayIconMessageClickedAction::None)
{
// get widget, connection and notifier
const auto &widget(m_trayMenu.widget());
const auto &widget(trayMenu().widget());
const auto &connection(widget.connection());
const auto &notifier(widget.notifier());

Expand Down Expand Up @@ -71,7 +71,7 @@ TrayIcon::TrayIcon(const QString &connectionConfig, QObject *parent)
tr("Show internal errors"));
m_errorsAction->setVisible(false);
connect(m_errorsAction, &QAction::triggered, this, &TrayIcon::showInternalErrorsDialog);
m_contextMenu.addMenu(m_trayMenu.widget().connectionsMenu());
m_contextMenu.addMenu(trayMenu().widget().connectionsMenu());
connect(m_contextMenu.addAction(
QIcon::fromTheme(QStringLiteral("help-about"), QIcon(QStringLiteral(":/icons/hicolor/scalable/apps/help-about.svg"))), tr("About")),
&QAction::triggered, &widget, &TrayWidget::showAboutDialog);
Expand Down Expand Up @@ -109,7 +109,7 @@ TrayIcon::TrayIcon(const QString &connectionConfig, QObject *parent)

// apply settings, this also establishes the connection to Syncthing (according to settings)
// note: it is important to apply settings after all Signals & Slots have been connected (eg. to handle SyncthingConnection::error())
m_trayMenu.widget().applySettings(connectionConfig);
trayMenu().widget().applySettings(connectionConfig);
}

/*!
Expand All @@ -136,10 +136,10 @@ void TrayIcon::handleActivated(QSystemTrayIcon::ActivationReason reason)
// can't catch that event on Plasma 5 anyways
break;
case QSystemTrayIcon::MiddleClick:
m_trayMenu.widget().showWebUi();
trayMenu().widget().showWebUi();
break;
case QSystemTrayIcon::Trigger: {
m_trayMenu.showAtCursor();
trayMenu().showUsingPositioningSettings();
break;
}
default:;
Expand All @@ -152,13 +152,13 @@ void TrayIcon::handleMessageClicked()
case TrayIconMessageClickedAction::None:
return;
case TrayIconMessageClickedAction::DismissNotification:
m_trayMenu.widget().dismissNotifications();
trayMenu().widget().dismissNotifications();
break;
case TrayIconMessageClickedAction::ShowInternalErrors:
showInternalErrorsDialog();
break;
case TrayIconMessageClickedAction::ShowWebUi:
m_trayMenu.widget().showWebUi();
trayMenu().widget().showWebUi();
break;
}
}
Expand Down Expand Up @@ -199,7 +199,7 @@ void TrayIcon::handleErrorsCleared()
void TrayIcon::showInternalError(
const QString &errorMessage, SyncthingErrorCategory category, int networkError, const QNetworkRequest &request, const QByteArray &response)
{
if (!InternalError::isRelevant(m_trayMenu.widget().connection(), category, networkError)) {
if (!InternalError::isRelevant(trayMenu().widget().connection(), category, networkError)) {
return;
}
InternalError error(errorMessage, request.url(), response);
Expand Down
5 changes: 3 additions & 2 deletions tray/gui/trayicon.h
Expand Up @@ -49,7 +49,8 @@ private slots:
void handleErrorsCleared();

private:
TrayMenu m_trayMenu;
QWidget m_parentWidget;
TrayMenu *m_trayMenu;
#ifndef SYNCTHINGTRAY_UNIFY_TRAY_MENUS
QMenu m_contextMenu;
QAction *m_errorsAction;
Expand All @@ -64,7 +65,7 @@ private slots:

inline TrayMenu &TrayIcon::trayMenu()
{
return m_trayMenu;
return *m_trayMenu;
}

} // namespace QtGui
Expand Down
6 changes: 3 additions & 3 deletions tray/gui/traymenu.cpp
Expand Up @@ -7,7 +7,6 @@
#include <qtutilities/misc/dialogutils.h>

#include <QApplication>
#include <QCursor>
#include <QDesktopWidget>
#include <QHBoxLayout>

Expand All @@ -25,6 +24,7 @@ TrayMenu::TrayMenu(TrayIcon *trayIcon, QWidget *parent)
menuLayout->addWidget(m_trayWidget = new TrayWidget(this));
setLayout(menuLayout);
setPlatformMenu(nullptr);
setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint | Qt::Popup);
}

QSize TrayMenu::sizeHint() const
Expand All @@ -50,10 +50,10 @@ void moveInside(QPoint &point, const QSize &innerRect, const QRect &outerRect)
}
}

void TrayMenu::showAtCursor()
void TrayMenu::showUsingPositioningSettings()
{
resize(sizeHint());
QPoint pos(QCursor::pos());
auto pos = Settings::values().appearance.positioning.positionToUse();
moveInside(pos, size(), availableScreenGeometryAtPoint(pos));
popup(pos);
}
Expand Down
2 changes: 1 addition & 1 deletion tray/gui/traymenu.h
Expand Up @@ -20,7 +20,7 @@ class TrayMenu : public QMenu {
TrayIcon *icon();

public slots:
void showAtCursor();
void showUsingPositioningSettings();

private:
TrayWidget *m_trayWidget;
Expand Down
7 changes: 3 additions & 4 deletions tray/gui/traywidget.cpp
Expand Up @@ -36,7 +36,6 @@

#include <QClipboard>
#include <QCoreApplication>
#include <QCursor>
#include <QDesktopServices>
#include <QDir>
#include <QFontDatabase>
Expand Down Expand Up @@ -278,12 +277,12 @@ void TrayWidget::showNotifications()
dismissNotifications();
}

void TrayWidget::showAtCursor()
void TrayWidget::showUsingPositioningSettings()
{
if (m_menu) {
m_menu->showAtCursor();
m_menu->showUsingPositioningSettings();
} else {
move(QCursor::pos());
move(Settings::values().appearance.positioning.positionToUse());
show();
}
}
Expand Down
2 changes: 1 addition & 1 deletion tray/gui/traywidget.h
Expand Up @@ -60,7 +60,7 @@ public slots:
void showOwnDeviceId();
void showLog();
void showNotifications();
void showAtCursor();
void showUsingPositioningSettings();
#ifdef SYNCTHINGTRAY_UNIFY_TRAY_MENUS
void showInternalErrorsButton();
void showInternalErrorsDialog();
Expand Down

0 comments on commit 1bdba31

Please sign in to comment.