Merge #14594: qt: Fix minimized window bug on Linux

a88640e123 Fix minimized window bug on Linux (Hennadii Stepanov)

Pull request description:

  Fix #14591

  On some Linux systems the minimized to the taskbar (iconified) main window cannot be restored properly using actions from the systray icon menu when `QSystemTrayIcon::contextMenu()` is a child of the main window.

Tree-SHA512: 05c9f724fc2278d45dac6fe72b09859f12b5d71f54659bb779403c8cd81b55e610fb7b5aa912ac273d3cd19bf953b0405bbc6451feb00d1827c95dd9f0876aa4
This commit is contained in:
Wladimir J. van der Laan 2019-01-15 15:13:18 +01:00
commit a5daf70ffb
No known key found for this signature in database
GPG key ID: 1E4AED62986CD25D
2 changed files with 7 additions and 7 deletions

View file

@ -35,6 +35,7 @@
#include <util/system.h> #include <util/system.h>
#include <iostream> #include <iostream>
#include <memory>
#include <QAction> #include <QAction>
#include <QApplication> #include <QApplication>
@ -43,6 +44,7 @@
#include <QDesktopWidget> #include <QDesktopWidget>
#include <QDragEnterEvent> #include <QDragEnterEvent>
#include <QListWidget> #include <QListWidget>
#include <QMenu>
#include <QMenuBar> #include <QMenuBar>
#include <QMessageBox> #include <QMessageBox>
#include <QMimeData> #include <QMimeData>
@ -52,6 +54,7 @@
#include <QStackedWidget> #include <QStackedWidget>
#include <QStatusBar> #include <QStatusBar>
#include <QStyle> #include <QStyle>
#include <QSystemTrayIcon>
#include <QTimer> #include <QTimer>
#include <QToolBar> #include <QToolBar>
#include <QUrlQuery> #include <QUrlQuery>
@ -72,6 +75,7 @@ const std::string BitcoinGUI::DEFAULT_UIPLATFORM =
BitcoinGUI::BitcoinGUI(interfaces::Node& node, const PlatformStyle *_platformStyle, const NetworkStyle *networkStyle, QWidget *parent) : BitcoinGUI::BitcoinGUI(interfaces::Node& node, const PlatformStyle *_platformStyle, const NetworkStyle *networkStyle, QWidget *parent) :
QMainWindow(parent), QMainWindow(parent),
m_node(node), m_node(node),
trayIconMenu{new QMenu()},
platformStyle(_platformStyle) platformStyle(_platformStyle)
{ {
QSettings settings; QSettings settings;
@ -657,16 +661,12 @@ void BitcoinGUI::createTrayIconMenu()
if (!trayIcon) if (!trayIcon)
return; return;
trayIconMenu = new QMenu(this); trayIcon->setContextMenu(trayIconMenu.get());
trayIcon->setContextMenu(trayIconMenu);
connect(trayIcon, &QSystemTrayIcon::activated, this, &BitcoinGUI::trayIconActivated); connect(trayIcon, &QSystemTrayIcon::activated, this, &BitcoinGUI::trayIconActivated);
#else #else
// Note: On macOS, the Dock icon is used to provide the tray's functionality. // Note: On macOS, the Dock icon is used to provide the tray's functionality.
MacDockIconHandler *dockIconHandler = MacDockIconHandler::instance(); MacDockIconHandler *dockIconHandler = MacDockIconHandler::instance();
connect(dockIconHandler, &MacDockIconHandler::dockIconClicked, this, &BitcoinGUI::macosDockIconActivated); connect(dockIconHandler, &MacDockIconHandler::dockIconClicked, this, &BitcoinGUI::macosDockIconActivated);
trayIconMenu = new QMenu(this);
trayIconMenu->setAsDockMenu(); trayIconMenu->setAsDockMenu();
#endif #endif

View file

@ -16,7 +16,6 @@
#include <QLabel> #include <QLabel>
#include <QMainWindow> #include <QMainWindow>
#include <QMap> #include <QMap>
#include <QMenu>
#include <QPoint> #include <QPoint>
#include <QSystemTrayIcon> #include <QSystemTrayIcon>
@ -47,6 +46,7 @@ class Node;
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QAction; class QAction;
class QComboBox; class QComboBox;
class QMenu;
class QProgressBar; class QProgressBar;
class QProgressDialog; class QProgressDialog;
QT_END_NAMESPACE QT_END_NAMESPACE
@ -146,7 +146,7 @@ private:
QComboBox* m_wallet_selector = nullptr; QComboBox* m_wallet_selector = nullptr;
QSystemTrayIcon* trayIcon = nullptr; QSystemTrayIcon* trayIcon = nullptr;
QMenu* trayIconMenu = nullptr; const std::unique_ptr<QMenu> trayIconMenu;
Notificator* notificator = nullptr; Notificator* notificator = nullptr;
RPCConsole* rpcConsole = nullptr; RPCConsole* rpcConsole = nullptr;
HelpMessageDialog* helpMessageDialog = nullptr; HelpMessageDialog* helpMessageDialog = nullptr;