Browse Source

Qt: Add option to hide the system tray icon

My changes leave all tray icon and menu creation/initialization logic
untouched. It only shows or hides the icon according to the setting.

A new checkbox was added to the OptionsDialog under the Window tab. A
bool option named "hideTrayIcon" was added to OptionsModel. This
checkbox was mapped like other all options to the OptionsModel.

A signal was added to the OptionsModel for broadcasting changes the the
hideTrayIcon option. This signal was connected to a new slot added to
BitcoinGUI named setTrayIconVisible(bool). The slot simply hides or
shows the trayIcon in BitcoinGUI according to the parameter recieved.
0.13
Tyler Hardin 9 years ago
parent
commit
8b0e497028
  1. 20
      src/qt/bitcoingui.cpp
  2. 3
      src/qt/bitcoingui.h
  3. 10
      src/qt/forms/optionsdialog.ui
  4. 14
      src/qt/optionsdialog.cpp
  5. 2
      src/qt/optionsdialog.h
  6. 14
      src/qt/optionsmodel.cpp
  7. 4
      src/qt/optionsmodel.h

20
src/qt/bitcoingui.cpp

@ -474,6 +474,16 @@ void BitcoinGUI::setClientModel(ClientModel *clientModel)
} }
#endif // ENABLE_WALLET #endif // ENABLE_WALLET
unitDisplayControl->setOptionsModel(clientModel->getOptionsModel()); unitDisplayControl->setOptionsModel(clientModel->getOptionsModel());
OptionsModel* optionsModel = clientModel->getOptionsModel();
if(optionsModel)
{
// be aware of the tray icon disable state change reported by the OptionsModel object.
connect(optionsModel,SIGNAL(hideTrayIconChanged(bool)),this,SLOT(setTrayIconVisible(bool)));
// initialize the disable state of the tray icon with the current value in the model.
setTrayIconVisible(optionsModel->getHideTrayIcon());
}
} else { } else {
// Disable possibility to show main window via action // Disable possibility to show main window via action
toggleHideAction->setEnabled(false); toggleHideAction->setEnabled(false);
@ -535,7 +545,7 @@ void BitcoinGUI::createTrayIcon(const NetworkStyle *networkStyle)
QString toolTip = tr("%1 client").arg(tr(PACKAGE_NAME)) + " " + networkStyle->getTitleAddText(); QString toolTip = tr("%1 client").arg(tr(PACKAGE_NAME)) + " " + networkStyle->getTitleAddText();
trayIcon->setToolTip(toolTip); trayIcon->setToolTip(toolTip);
trayIcon->setIcon(networkStyle->getTrayAndWindowIcon()); trayIcon->setIcon(networkStyle->getTrayAndWindowIcon());
trayIcon->show(); trayIcon->hide();
#endif #endif
notificator = new Notificator(QApplication::applicationName(), trayIcon, this); notificator = new Notificator(QApplication::applicationName(), trayIcon, this);
@ -1044,6 +1054,14 @@ void BitcoinGUI::showProgress(const QString &title, int nProgress)
progressDialog->setValue(nProgress); progressDialog->setValue(nProgress);
} }
void BitcoinGUI::setTrayIconVisible(bool fHideTrayIcon)
{
if (trayIcon)
{
trayIcon->setVisible(!fHideTrayIcon);
}
}
static bool ThreadSafeMessageBox(BitcoinGUI *gui, const std::string& message, const std::string& caption, unsigned int style) static bool ThreadSafeMessageBox(BitcoinGUI *gui, const std::string& message, const std::string& caption, unsigned int style)
{ {
bool modal = (style & CClientUIInterface::MODAL); bool modal = (style & CClientUIInterface::MODAL);

3
src/qt/bitcoingui.h

@ -218,6 +218,9 @@ private Q_SLOTS:
/** Show progress dialog e.g. for verifychain */ /** Show progress dialog e.g. for verifychain */
void showProgress(const QString &title, int nProgress); void showProgress(const QString &title, int nProgress);
/** When hideTrayIcon setting is changed in OptionsModel hide or show the icon accordingly. */
void setTrayIconVisible(bool);
}; };
class UnitDisplayStatusBarControl : public QLabel class UnitDisplayStatusBarControl : public QLabel

10
src/qt/forms/optionsdialog.ui

@ -504,6 +504,16 @@
<string>&amp;Window</string> <string>&amp;Window</string>
</attribute> </attribute>
<layout class="QVBoxLayout" name="verticalLayout_Window"> <layout class="QVBoxLayout" name="verticalLayout_Window">
<item>
<widget class="QCheckBox" name="hideTrayIcon">
<property name="toolTip">
<string>&amp;Hide the icon from the system tray.</string>
</property>
<property name="text">
<string>Hide tray icon</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QCheckBox" name="minimizeToTray"> <widget class="QCheckBox" name="minimizeToTray">
<property name="toolTip"> <property name="toolTip">

14
src/qt/optionsdialog.cpp

@ -198,6 +198,7 @@ void OptionsDialog::setMapper()
/* Window */ /* Window */
#ifndef Q_OS_MAC #ifndef Q_OS_MAC
mapper->addMapping(ui->hideTrayIcon, OptionsModel::HideTrayIcon);
mapper->addMapping(ui->minimizeToTray, OptionsModel::MinimizeToTray); mapper->addMapping(ui->minimizeToTray, OptionsModel::MinimizeToTray);
mapper->addMapping(ui->minimizeOnClose, OptionsModel::MinimizeOnClose); mapper->addMapping(ui->minimizeOnClose, OptionsModel::MinimizeOnClose);
#endif #endif
@ -243,6 +244,19 @@ void OptionsDialog::on_cancelButton_clicked()
reject(); reject();
} }
void OptionsDialog::on_hideTrayIcon_stateChanged(int fState)
{
if(fState)
{
ui->minimizeToTray->setChecked(false);
ui->minimizeToTray->setEnabled(false);
}
else
{
ui->minimizeToTray->setEnabled(true);
}
}
void OptionsDialog::showRestartWarning(bool fPersistent) void OptionsDialog::showRestartWarning(bool fPersistent)
{ {
ui->statusLabel->setStyleSheet("QLabel { color: red; }"); ui->statusLabel->setStyleSheet("QLabel { color: red; }");

2
src/qt/optionsdialog.h

@ -50,6 +50,8 @@ private Q_SLOTS:
void on_okButton_clicked(); void on_okButton_clicked();
void on_cancelButton_clicked(); void on_cancelButton_clicked();
void on_hideTrayIcon_stateChanged(int fState);
void showRestartWarning(bool fPersistent = false); void showRestartWarning(bool fPersistent = false);
void clearStatusLabel(); void clearStatusLabel();
void updateProxyValidationState(); void updateProxyValidationState();

14
src/qt/optionsmodel.cpp

@ -51,9 +51,14 @@ void OptionsModel::Init(bool resetSettings)
// These are Qt-only settings: // These are Qt-only settings:
// Window // Window
if (!settings.contains("fHideTrayIcon"))
settings.setValue("fHideTrayIcon", false);
fHideTrayIcon = settings.value("fHideTrayIcon").toBool();
Q_EMIT hideTrayIconChanged(fHideTrayIcon);
if (!settings.contains("fMinimizeToTray")) if (!settings.contains("fMinimizeToTray"))
settings.setValue("fMinimizeToTray", false); settings.setValue("fMinimizeToTray", false);
fMinimizeToTray = settings.value("fMinimizeToTray").toBool(); fMinimizeToTray = settings.value("fMinimizeToTray").toBool() && !fHideTrayIcon;
if (!settings.contains("fMinimizeOnClose")) if (!settings.contains("fMinimizeOnClose"))
settings.setValue("fMinimizeOnClose", false); settings.setValue("fMinimizeOnClose", false);
@ -166,6 +171,8 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const
{ {
case StartAtStartup: case StartAtStartup:
return GUIUtil::GetStartOnSystemStartup(); return GUIUtil::GetStartOnSystemStartup();
case HideTrayIcon:
return fHideTrayIcon;
case MinimizeToTray: case MinimizeToTray:
return fMinimizeToTray; return fMinimizeToTray;
case MapPortUPnP: case MapPortUPnP:
@ -242,6 +249,11 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in
case StartAtStartup: case StartAtStartup:
successful = GUIUtil::SetStartOnSystemStartup(value.toBool()); successful = GUIUtil::SetStartOnSystemStartup(value.toBool());
break; break;
case HideTrayIcon:
fHideTrayIcon = value.toBool();
settings.setValue("fHideTrayIcon", fHideTrayIcon);
Q_EMIT hideTrayIconChanged(fHideTrayIcon);
break;
case MinimizeToTray: case MinimizeToTray:
fMinimizeToTray = value.toBool(); fMinimizeToTray = value.toBool();
settings.setValue("fMinimizeToTray", fMinimizeToTray); settings.setValue("fMinimizeToTray", fMinimizeToTray);

4
src/qt/optionsmodel.h

@ -28,6 +28,7 @@ public:
enum OptionID { enum OptionID {
StartAtStartup, // bool StartAtStartup, // bool
HideTrayIcon, // bool
MinimizeToTray, // bool MinimizeToTray, // bool
MapPortUPnP, // bool MapPortUPnP, // bool
MinimizeOnClose, // bool MinimizeOnClose, // bool
@ -58,6 +59,7 @@ public:
void setDisplayUnit(const QVariant &value); void setDisplayUnit(const QVariant &value);
/* Explicit getters */ /* Explicit getters */
bool getHideTrayIcon() { return fHideTrayIcon; }
bool getMinimizeToTray() { return fMinimizeToTray; } bool getMinimizeToTray() { return fMinimizeToTray; }
bool getMinimizeOnClose() { return fMinimizeOnClose; } bool getMinimizeOnClose() { return fMinimizeOnClose; }
int getDisplayUnit() { return nDisplayUnit; } int getDisplayUnit() { return nDisplayUnit; }
@ -72,6 +74,7 @@ public:
private: private:
/* Qt-only settings */ /* Qt-only settings */
bool fHideTrayIcon;
bool fMinimizeToTray; bool fMinimizeToTray;
bool fMinimizeOnClose; bool fMinimizeOnClose;
QString language; QString language;
@ -87,6 +90,7 @@ private:
Q_SIGNALS: Q_SIGNALS:
void displayUnitChanged(int unit); void displayUnitChanged(int unit);
void coinControlFeaturesChanged(bool); void coinControlFeaturesChanged(bool);
void hideTrayIconChanged(bool);
}; };
#endif // BITCOIN_QT_OPTIONSMODEL_H #endif // BITCOIN_QT_OPTIONSMODEL_H

Loading…
Cancel
Save